archboot/usr/lib/initcpio/install/archboot_base_latest
2022-01-16 16:18:16 +01:00

239 lines
9.3 KiB
Bash

#!/usr/bin/env bash
# Created by Tobias Powalowski <tpowa@archlinux.org>
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 dir du ls mv rm sed grep \
kill killall more ps pwd rmdir true cat mkdir echo false sleep kmod pidof touch chmod \
find wc nano wget uname bsdtar yes"
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_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 nano files
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"
if [[ "$(uname -m)" == "x86_64" ]]; then
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"
fi
if [[ "$(uname -m)" == "aarch64" ]]; then
add_file "/usr/share/archboot/pacman/etc/systemd/system/pacman-init-arm.service" "/etc/systemd/system/pacman-init-arm.service"
add_symlink "/etc/systemd/system/multi-user.target.wants/pacman-init-arm.service" "/etc/systemd/system/pacman-init-arm.service"
fi
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"
### 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 <<HELPEOF
This hook sets up all initial directories and installs base, kmod,
pam, pacman, shadow, systemd, udev utilities and libraries
for an archboot image, stripped down for latest image.
DO NOT remove this one unless you know what you're doing.
HELPEOF
}