#!/usr/bin/env bash # Created by Tobias Powalowski build () { ### setting up base structure add_dir "/mnt" add_dir "/install" add_dir "/var/log" add_dir "/home" add_symlink /var/run ../run add_symlink /var/lock ../run/lock apps="agetty basename mount umount clear env printf gawk tty bash partprobe cp mv rm sed grep \ kill killall more ps pwd rmdir true cat mkdir echo false sleep kmod pidof touch chmod \ find wc nano wget" for i in $apps; do add_binary "$i" done appfiles="/usr/lib/libkmod.so" for i in $appfiles; do add_file "$i" done symlinks="/usr/bin/awk /usr/bin/halt /usr/bin/shutdown /usr/bin/reboot \ /usr/bin/poweroff /usr/bin/insmod /usr/bin/modprobe /usr/bin/sh" for i in $symlinks; do # echo "Checking $i" # if [ -e $i ]; then add_binary "$(which "$(basename "$(readlink "$i")")")" add_symlink "$i" "$(which "$(basename "$(readlink "$i")")")" # fi done #add_full_dir "/usr/lib" add_symlink "/usr/bin/init" "/usr/lib/systemd/systemd" add_symlink "/init" "/usr/lib/systemd/systemd" ### adding needed files from running system add_symlink "/etc/mtab" "/proc/self/mounts" add_file "/usr/share/terminfo/l/linux" add_full_dir "/etc/profile.d" systemfiles="bash.bashrc bash.bash_logout fstab host.conf hosts inputrc \ nanorc nsswitch.conf protocols request-key.conf resolv.conf securetty \ wgetrc services" for i in $systemfiles; do add_file "/etc/$i" done add_full_dir /usr/share/nano ### adding config files of installation system for i in $(find /usr/share/archboot/base/etc/* ! -type d ! -name passwd); do add_file "$i" "$(echo $i | sed -e 's#/usr/share/archboot/base##g')" done add_file "/usr/share/archboot/installer_latest/etc/passwd" "/etc/passwd" add_file "/etc/profile" add_file "/etc/group" add_file "/etc/gshadow" ### add kmod related config file(s) add_file "/usr/lib/depmod.d/search.conf" ### fixing network support add_file "/lib/libnss_files.so.2" add_file "/lib/libnss_dns.so.2" ### add pam apps="mkhomedir_helper pam_timestamp_check unix_chkpwd unix_update" for i in $apps; do add_binary "$i" done add_full_dir "/etc/security" add_full_dir "/etc/default" add_full_dir "/etc/pam.d" add_file "/etc/environment" add_full_dir "/usr/lib/security" #fix cracklib support! add_file /usr/lib/libcrack.so.2 ### add shadow apps="login nologin" for i in $apps; do add_binary "$i" done add_file "/etc/login.defs" ### add virtio modules add_checked_modules 'virtio' #dbus files apps="dbus-cleanup-sockets dbus-daemon dbus-launch dbus-monitor dbus-run-session dbus-send dbus-test-tool \ dbus-update-activation-environment dbus-uuidgen" for i in $apps; do add_binary "$i" done add_binary "/usr/lib/dbus-1.0/dbus-daemon-launch-helper" add_dir "/var/lib/dbus" add_full_dir "/etc/dbus-1" add_full_dir "/usr/share/dbus-1" ### add systemd # add systemd kernel modules add_checked_modules 'nfs|autofs4|loop' apps="mount.nfs setfont loadkeys" for i in $apps; do add_binary "$i" done #systemd files apps="busctl bootctl coredumpctl hostnamectl journalctl kernel-install localectl \ loginctl machinectl networkctl systemctl systemd-analyze systemd-ask-password \ systemd-cat systemd-cgls systemd-cgtop \ systemd-delta systemd-detect-virt systemd-escape systemd-firstboot systemd-hwdb systemd-inhibit systemd-machine-id-setup \ systemd-mount systemd-notify systemd-nspawn systemd-path systemd-resolve \ systemd-run systemd-socket-activate systemd-stdio-bridge systemd-sysusers systemd-tmpfiles \ systemd-tty-ask-password-agent timedatectl systemd-repart userdbctl" for i in $apps; do add_binary "$i" done add_dir "/etc/tmpfiles.d" add_dir "/etc/modules-load.d" add_dir "/etc/binfmt.d/" add_full_dir "/etc/sysctl.d/" add_file "/usr/lib/os-release" add_full_dir "/etc/systemd" add_full_dir "/etc/xdg" add_full_dir "/usr/lib/systemd" add_full_dir "/usr/share/systemd" add_full_dir "/usr/share/factory" add_full_dir "/usr/share/polkit-1" add_full_dir "/usr/lib/tmpfiles.d" add_full_dir "/usr/lib/modules-load.d" add_dir "/var/lib/systemd" add_file "/usr/share/archboot/base/etc/locale.conf" "/etc/locale.conf" add_file "/usr/share/archboot/base/etc/vconsole.conf" "/etc/vconsole.conf" add_file "/usr/share/archboot/base/etc/systemd/system/getty@.service" "/etc/systemd/system/getty@.service" add_file "/usr/share/archboot/base/etc/systemd/system/local-fs.target.wants/var-tmp.mount" \ "/usr/lib/systemd/system/var-tmp.mount" add_symlink "/etc/systemd/system/local-fs.target.wants/var-tmp.mount" "/usr/lib/systemd/system/var-tmp.mount" add_file "/usr/share/archboot/base/etc/systemd/system/serial-getty@.service" "/etc/systemd/system/serial-getty@.service" add_file "/usr/share/archboot/base/etc/systemd/system/autovt@.service" "/etc/systemd/system/autovt@.service" add_file "/usr/share/archboot/base/etc/systemd/system/getty.target.wants/getty@tty1.service" \ "/usr/lib/systemd/system/getty@tty1.service" add_symlink "/etc/systemd/system/getty.target.wants/getty@tty1.service" "/usr/lib/systemd/system/getty@tty1.service" add_file "/usr/share/archboot/base/etc/machine-id" "/etc/machine-id" ### add missing libsystemd files add_file "/usr/lib/libnss_myhostname.so.2" add_file "/usr/lib/libnss_mymachines.so.2" add_file "/usr/lib/libnss_resolve.so.2" add_file "/usr/lib/libnss_systemd.so.2" ### fix tmpfiles startup add_file "/usr/lib/libnss_compat.so.2" add_file "/usr/lib/libnsl.so.1" ## fix for systemd >=245 set default target add_symlink "/etc/systemd/system/initrd.target" "/usr/lib/systemd/system/multi-user.target" ### add udev, which is not covered by udev hook add_binary "logger" # add rule files add_full_dir "/usr/lib/udev" # add schedule rules file add_file "/usr/share/archboot/base/etc/udev/rules.d/60-ioschedulers.rules" "/etc/udev/rules.d/60-ioschedulers.rules" # add swapiness sysctl config file add_file "/usr/share/archboot/base/etc/sysctl.d/99-sysctl.conf" "/etc/sysctl.d/99-sysctl.conf" ### add pacman apps="pacman pacman-conf pacman-key pacman-db-upgrade makepkg \ repo-add repo-elephant testpkg vercmp curl gpg-agent haveged gpg" for i in $apps; do add_binary "$i" done symlinks="/usr/bin/repo-remove" for i in $symlinks; do # echo "Checking $i" # if [ -e $i ]; then add_binary "$(which "$(basename "$(readlink "$i")")")" add_symlink "$i" "$(which "$(basename "$(readlink "$i")")")" # fi done add_dir "/var/cache/pacman/pkg" add_dir "/var/lib/pacman" add_file "/etc/pacman.conf" add_file "/etc/makepkg.conf" add_file "/etc/pacman.d/mirrorlist" # add pacman initialisation of gpg keys add_file "/usr/share/archboot/pacman/etc/systemd/system/etc-pacman.d-gnupg.mount" "/etc/systemd/system/etc-pacman.d-gnupg.mount" add_file "/usr/share/archboot/pacman/etc/systemd/system/pacman-init.service" "/etc/systemd/system/pacman-init.service" add_symlink "/etc/systemd/system/multi-user.target.wants/pacman-init.service" "/etc/systemd/system/pacman-init.service" add_symlink "/etc/systemd/system/multi-user.target.wants/etc-pacman.d-gnupg.mount" "/etc/systemd/system/etc-pacman.d-gnupg.mount" add_full_dir "/usr/share/pacman/keyrings" add_full_dir "/usr/share/makepkg" # add local installed pacman database in container mode if [[ -e "/etc/hostname" ]]; then [[ "$(cat /etc/hostname )" == "archboot" ]] && add_full_dir "/var/lib/pacman/local" else add_full_dir "/var/lib/pacman/local" fi ### fix file add_file "/usr/share/file/misc/magic.mgc" ### add ca certificates cafile="tls-ca-bundle.pem" cert="cert.pem" cert2="ca-certificates.crt" ca_dir="/etc/ca-certificates/extracted" cert_dir="/etc/ssl" cert2_dir="/etc/ssl/certs" add_full_dir "$ca_dir" add_full_dir "$cert2_dir" add_symlink "${cert_dir}/${cert}" "../ca-certificates/extracted/$cafile" add_symlink "${cert2_dir}/${cert2}" "../../ca-certificates/extracted/$cafile" ### generate boot.msg [ -s "${APPENDBOOTMESSAGE}" ] && cat ${APPENDBOOTMESSAGE} >> ${BOOTMESSAGE} [ -s "${APPENDOPTIONSBOOTMESSAGE}" ] && cat ${APPENDOPTIONSBOOTMESSAGE} >> ${OPTIONSBOOTMESSAGE} ### fix licenses add_file "/usr/share/licenses/shadow/LICENSE" add_file "/usr/share/licenses/iana-etc/LICENSE" add_file "/usr/share/licenses/dbus/COPYING" } help () { cat <