diff options
69 files changed, 1622 insertions, 0 deletions
| diff --git a/Reaktor/startup/systemd/system/Reaktor.service b/Reaktor/startup/systemd/system/Reaktor.service new file mode 100644 index 00000000..59d0e904 --- /dev/null +++ b/Reaktor/startup/systemd/system/Reaktor.service @@ -0,0 +1,12 @@ +[Unit] +Description=Reaktor +After=network.target nss-lookup.target + +[Service] +Type=forking +PIDFile=/run/ntpd.pid +ExecStart=/krebs/Reaktor/index +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/filehooker/.gitignore b/filehooker/.gitignore new file mode 100644 index 00000000..6b6e109e --- /dev/null +++ b/filehooker/.gitignore @@ -0,0 +1,4 @@ +work/ +out/ +arch/ +root-image/usr/bin/ncdc diff --git a/filehooker/aitab b/filehooker/aitab new file mode 100644 index 00000000..b7e9a17a --- /dev/null +++ b/filehooker/aitab @@ -0,0 +1,3 @@ +# <img>         <mnt>                 <arch>   <sfs_comp>  <fs_type>  <fs_size> +root-image      /                     i686     xz          ext4       50% +root-image      /                     x86_64   xz          ext4       50% diff --git a/filehooker/build.sh b/filehooker/build.sh new file mode 100755 index 00000000..6a46a8dc --- /dev/null +++ b/filehooker/build.sh @@ -0,0 +1,265 @@ +#!/bin/bash + +set -e -u + +iso_name=archlinux +iso_label="ARCH_$(date +%Y%m)" +iso_version=$(date +%Y.%m.%d) +install_dir=arch +work_dir=work +out_dir=out + +arch=$(uname -m) +verbose="" +pacman_conf=${work_dir}/pacman.conf +script_path=$(readlink -f ${0%/*}) + +_usage () +{ +    echo "usage ${0} [options]" +    echo +    echo " General options:" +    echo "    -N <iso_name>      Set an iso filename (prefix)" +    echo "                        Default: ${iso_name}" +    echo "    -V <iso_version>   Set an iso version (in filename)" +    echo "                        Default: ${iso_version}" +    echo "    -L <iso_label>     Set an iso label (disk label)" +    echo "                        Default: ${iso_label}" +    echo "    -D <install_dir>   Set an install_dir (directory inside iso)" +    echo "                        Default: ${install_dir}" +    echo "    -w <work_dir>      Set the working directory" +    echo "                        Default: ${work_dir}" +    echo "    -o <out_dir>       Set the output directory" +    echo "                        Default: ${out_dir}" +    echo "    -v                 Enable verbose output" +    echo "    -h                 This help message" +    exit ${1} +} + +# Helper function to run make_*() only one time per architecture. +run_once() { +    if [[ ! -e ${work_dir}/build.${1}_${arch} ]]; then +        $1 +        touch ${work_dir}/build.${1}_${arch} +    fi +} + +# Setup custom pacman.conf with current cache directories. +make_pacman_conf() { +    local _cache_dirs +    _cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) +    sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${_cache_dirs[@]})|g" ${script_path}/pacman.conf > ${pacman_conf} +} + +# Base installation, plus needed packages (root-image) +make_basefs() { +    setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" init +    setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" -p "memtest86+ mkinitcpio-nfs-utils nbd" install +} + +# Additional packages (root-image) +make_packages() { +    setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" -p "$(grep -h -v ^# ${script_path}/packages.{both,${arch}})" install +} + +# Copy mkinitcpio archiso hooks and build initramfs (root-image) +make_setup_mkinitcpio() { +    local _hook +    for _hook in archiso archiso_shutdown archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_loop_mnt; do +        cp /usr/lib/initcpio/hooks/${_hook} ${work_dir}/${arch}/root-image/usr/lib/initcpio/hooks +        cp /usr/lib/initcpio/install/${_hook} ${work_dir}/${arch}/root-image/usr/lib/initcpio/install +    done +    cp /usr/lib/initcpio/install/archiso_kms ${work_dir}/${arch}/root-image/usr/lib/initcpio/install +    cp /usr/lib/initcpio/archiso_shutdown ${work_dir}/${arch}/root-image/usr/lib/initcpio +    cp ${script_path}/mkinitcpio.conf ${work_dir}/${arch}/root-image/etc/mkinitcpio-archiso.conf +    setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" -r 'mkinitcpio -c /etc/mkinitcpio-archiso.conf -k /boot/vmlinuz-linux -g /boot/archiso.img' run +} + +# Customize installation (root-image) +make_customize_root_image() { +    cp -af ${script_path}/root-image ${work_dir}/${arch} +     +    # we do not need no new mirrorlist! +    #curl -o ${work_dir}/${arch}/root-image/etc/pacman.d/mirrorlist 'https://www.archlinux.org/mirrorlist/?country=all&protocol=http&use_mirror_status=on' +     +    #we do not need no bloody documentation +    #lynx -dump -nolist 'https://wiki.archlinux.org/index.php/Installation_Guide?action=render' >> ${work_dir}/${arch}/root-image/root/install.txt + +    setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${pacman_conf}" -D "${install_dir}" -r '/root/customize_root_image.sh' run +    rm ${work_dir}/${arch}/root-image/root/customize_root_image.sh +} + +# Prepare kernel/initramfs ${install_dir}/boot/ +make_boot() { +    mkdir -p ${work_dir}/iso/${install_dir}/boot/${arch} +    cp ${work_dir}/${arch}/root-image/boot/archiso.img ${work_dir}/iso/${install_dir}/boot/${arch}/archiso.img +    cp ${work_dir}/${arch}/root-image/boot/vmlinuz-linux ${work_dir}/iso/${install_dir}/boot/${arch}/vmlinuz +} + +# Add other aditional/extra files to ${install_dir}/boot/ +make_boot_extra() { +    cp ${work_dir}/${arch}/root-image/boot/memtest86+/memtest.bin ${work_dir}/iso/${install_dir}/boot/memtest +    cp ${work_dir}/${arch}/root-image/usr/share/licenses/common/GPL2/license.txt ${work_dir}/iso/${install_dir}/boot/memtest.COPYING +} + +# Prepare /${install_dir}/boot/syslinux +make_syslinux() { +    mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux +    for _cfg in ${script_path}/syslinux/*.cfg; do +        sed "s|%ARCHISO_LABEL%|${iso_label}|g; +             s|%INSTALL_DIR%|${install_dir}|g" ${_cfg} > ${work_dir}/iso/${install_dir}/boot/syslinux/${_cfg##*/} +    done +    cp ${script_path}/syslinux/splash.png ${work_dir}/iso/${install_dir}/boot/syslinux +    cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/*.c32 ${work_dir}/iso/${install_dir}/boot/syslinux +    cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/lpxelinux.0 ${work_dir}/iso/${install_dir}/boot/syslinux +    cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/memdisk ${work_dir}/iso/${install_dir}/boot/syslinux +    mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux/hdt +    gzip -c -9 ${work_dir}/${arch}/root-image/usr/share/hwdata/pci.ids > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/pciids.gz +    gzip -c -9 ${work_dir}/${arch}/root-image/usr/lib/modules/*-ARCH/modules.alias > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/modalias.gz +} + +# Prepare /isolinux +make_isolinux() { +    mkdir -p ${work_dir}/iso/isolinux +    sed "s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/isolinux/isolinux.cfg > ${work_dir}/iso/isolinux/isolinux.cfg +    cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/isolinux.bin ${work_dir}/iso/isolinux/ +    cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/isohdpfx.bin ${work_dir}/iso/isolinux/ +    cp ${work_dir}/${arch}/root-image/usr/lib/syslinux/bios/ldlinux.c32 ${work_dir}/iso/isolinux/ +} + +# Prepare /EFI +make_efi() { +    mkdir -p ${work_dir}/iso/EFI/boot +    cp ${work_dir}/x86_64/root-image/usr/lib/prebootloader/PreLoader.efi ${work_dir}/iso/EFI/boot/bootx64.efi +    cp ${work_dir}/x86_64/root-image/usr/lib/prebootloader/HashTool.efi ${work_dir}/iso/EFI/boot/ + +    cp ${work_dir}/x86_64/root-image/usr/lib/gummiboot/gummibootx64.efi ${work_dir}/iso/EFI/boot/loader.efi + +    mkdir -p ${work_dir}/iso/loader/entries +    cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/iso/loader/ +    cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/ +    cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/ + +    sed "s|%ARCHISO_LABEL%|${iso_label}|g; +         s|%INSTALL_DIR%|${install_dir}|g" \ +        ${script_path}/efiboot/loader/entries/archiso-x86_64-usb.conf > ${work_dir}/iso/loader/entries/archiso-x86_64.conf +     +    # TODO no uefi shell +    # EFI Shell 2.0 for UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Shell ) +    # curl -o ${work_dir}/iso/EFI/shellx64_v2.efi https://svn.code.sf.net/p/edk2/code/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi +    # EFI Shell 1.0 for non UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Efi-shell ) +    # curl -o ${work_dir}/iso/EFI/shellx64_v1.efi https://svn.code.sf.net/p/edk2/code/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi +} + +# Prepare efiboot.img::/EFI for "El Torito" EFI boot mode +make_efiboot() { +    mkdir -p ${work_dir}/iso/EFI/archiso +    truncate -s 31M ${work_dir}/iso/EFI/archiso/efiboot.img +    mkfs.vfat -n ARCHISO_EFI ${work_dir}/iso/EFI/archiso/efiboot.img + +    mkdir -p ${work_dir}/efiboot +    mount ${work_dir}/iso/EFI/archiso/efiboot.img ${work_dir}/efiboot + +    mkdir -p ${work_dir}/efiboot/EFI/archiso +    cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/efiboot/EFI/archiso/vmlinuz.efi +    cp ${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img ${work_dir}/efiboot/EFI/archiso/archiso.img + +    mkdir -p ${work_dir}/efiboot/EFI/boot +    cp ${work_dir}/x86_64/root-image/usr/lib/prebootloader/PreLoader.efi ${work_dir}/efiboot/EFI/boot/bootx64.efi +    cp ${work_dir}/x86_64/root-image/usr/lib/prebootloader/HashTool.efi ${work_dir}/efiboot/EFI/boot/ + +    cp ${work_dir}/x86_64/root-image/usr/lib/gummiboot/gummibootx64.efi ${work_dir}/efiboot/EFI/boot/loader.efi + +    mkdir -p ${work_dir}/efiboot/loader/entries +    cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/efiboot/loader/ +    cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot/loader/entries/ +    cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot/loader/entries/ + +    sed "s|%ARCHISO_LABEL%|${iso_label}|g; +         s|%INSTALL_DIR%|${install_dir}|g" \ +        ${script_path}/efiboot/loader/entries/archiso-x86_64-cd.conf > ${work_dir}/efiboot/loader/entries/archiso-x86_64.conf + +    #cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot/EFI/ +    #cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/ + +    umount ${work_dir}/efiboot +} + +# Copy aitab +make_aitab() { +    mkdir -p ${work_dir}/iso/${install_dir} +    cp ${script_path}/aitab ${work_dir}/iso/${install_dir}/aitab +} + +# Build all filesystem images specified in aitab (.fs.sfs .sfs) +make_prepare() { +    cp -a -l -f ${work_dir}/${arch}/root-image ${work_dir} +    setarch ${arch} mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" pkglist +    setarch ${arch} mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" prepare +    rm -rf ${work_dir}/root-image +    # rm -rf ${work_dir}/${arch}/root-image (if low space, this helps) +} + +# Build ISO +make_iso() { +    mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" checksum +    mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" -L "${iso_label}" -o "${out_dir}" iso "${iso_name}-${iso_version}-dual.iso" +} + +if [[ ${EUID} -ne 0 ]]; then +    echo "This script must be run as root." +    _usage 1 +fi + +if [[ ${arch} != x86_64 ]]; then +    echo "This script needs to be run on x86_64" +    _usage 1 +fi + +while getopts 'N:V:L:D:w:o:vh' arg; do +    case "${arg}" in +        N) iso_name="${OPTARG}" ;; +        V) iso_version="${OPTARG}" ;; +        L) iso_label="${OPTARG}" ;; +        D) install_dir="${OPTARG}" ;; +        w) work_dir="${OPTARG}" ;; +        o) out_dir="${OPTARG}" ;; +        v) verbose="-v" ;; +        h) _usage 0 ;; +        *) +           echo "Invalid argument '${arg}'" +           _usage 1 +           ;; +    esac +done + +mkdir -p ${work_dir} + +run_once make_pacman_conf + +# Do all stuff for each root-image +for arch in x86_64; do +    run_once make_basefs +    run_once make_packages +    run_once make_setup_mkinitcpio +    run_once make_customize_root_image +done + +for arch in x86_64; do +    run_once make_boot +done + +# Do all stuff for "iso" +run_once make_boot_extra +run_once make_syslinux +run_once make_isolinux +run_once make_efi +run_once make_efiboot + +run_once make_aitab + +for arch in x86_64; do +    run_once make_prepare +done + +run_once make_iso diff --git a/filehooker/efiboot/loader/entries/archiso-x86_64-cd.conf b/filehooker/efiboot/loader/entries/archiso-x86_64-cd.conf new file mode 100644 index 00000000..9892c591 --- /dev/null +++ b/filehooker/efiboot/loader/entries/archiso-x86_64-cd.conf @@ -0,0 +1,4 @@ +title   Arch Linux archiso x86_64 UEFI CD +linux   /EFI/archiso/vmlinuz.efi +initrd  /EFI/archiso/archiso.img +options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% diff --git a/filehooker/efiboot/loader/entries/archiso-x86_64-usb.conf b/filehooker/efiboot/loader/entries/archiso-x86_64-usb.conf new file mode 100644 index 00000000..f61c5323 --- /dev/null +++ b/filehooker/efiboot/loader/entries/archiso-x86_64-usb.conf @@ -0,0 +1,4 @@ +title   Arch Linux archiso x86_64 UEFI USB +linux   /%INSTALL_DIR%/boot/x86_64/vmlinuz +initrd  /%INSTALL_DIR%/boot/x86_64/archiso.img +options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% diff --git a/filehooker/efiboot/loader/entries/uefi-shell-v1-x86_64.conf b/filehooker/efiboot/loader/entries/uefi-shell-v1-x86_64.conf new file mode 100644 index 00000000..9597ff2f --- /dev/null +++ b/filehooker/efiboot/loader/entries/uefi-shell-v1-x86_64.conf @@ -0,0 +1,2 @@ +title  UEFI Shell x86_64 v1 +efi    /EFI/shellx64_v1.efi diff --git a/filehooker/efiboot/loader/entries/uefi-shell-v2-x86_64.conf b/filehooker/efiboot/loader/entries/uefi-shell-v2-x86_64.conf new file mode 100644 index 00000000..0dde77ab --- /dev/null +++ b/filehooker/efiboot/loader/entries/uefi-shell-v2-x86_64.conf @@ -0,0 +1,2 @@ +title  UEFI Shell x86_64 v2 +efi    /EFI/shellx64_v2.efi diff --git a/filehooker/efiboot/loader/loader.conf b/filehooker/efiboot/loader/loader.conf new file mode 100644 index 00000000..62c4a839 --- /dev/null +++ b/filehooker/efiboot/loader/loader.conf @@ -0,0 +1,2 @@ +timeout 3 +default archiso-x86_64 diff --git a/filehooker/isolinux/isolinux.cfg b/filehooker/isolinux/isolinux.cfg new file mode 100644 index 00000000..10fd2852 --- /dev/null +++ b/filehooker/isolinux/isolinux.cfg @@ -0,0 +1,6 @@ +PATH /%INSTALL_DIR%/boot/syslinux/ +DEFAULT loadconfig + +LABEL loadconfig +  CONFIG /%INSTALL_DIR%/boot/syslinux/archiso.cfg +  APPEND /%INSTALL_DIR%/ diff --git a/filehooker/mkinitcpio.conf b/filehooker/mkinitcpio.conf new file mode 100644 index 00000000..2f46da49 --- /dev/null +++ b/filehooker/mkinitcpio.conf @@ -0,0 +1,2 @@ +HOOKS="base udev memdisk archiso_shutdown archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard" +COMPRESSION="xz" diff --git a/filehooker/packages.both b/filehooker/packages.both new file mode 100644 index 00000000..1a047a53 --- /dev/null +++ b/filehooker/packages.both @@ -0,0 +1,51 @@ +arch-install-scripts +btrfs-progs +crda +dhclient +dialog +dmraid +dnsmasq +dnsutils +dosfstools +elinks +ethtool +f2fs-tools +fsarchiver +gnu-netcat +gpm +gptfdisk +grml-zsh-config +grub +haveged +hdparm +irssi +lftp +linux-atm | 
