From 199edd571611f8526dfcedf6c8b1c9473ef4e434 Mon Sep 17 00:00:00 2001 From: Gavin Li Date: Sun, 4 Jan 2015 21:40:12 -0800 Subject: [PATCH] install systemd services as compat package --- install.sh | 103 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 81 insertions(+), 22 deletions(-) diff --git a/install.sh b/install.sh index 8944d2f..b784d51 100755 --- a/install.sh +++ b/install.sh @@ -57,6 +57,7 @@ set -eu set -o pipefail shopt -s nullglob shopt -s dotglob +umask 022 export LC_ALL=C export LANG=C @@ -83,6 +84,70 @@ mask_to_prefix() { echo ${prefix} } +install_compat_package() { + + local workdir=$(mktemp -d) + local unitdir=${workdir}/usr/lib/systemd/system + local kexeccmd + + set -- /sbin/kexec \ + /boot/vmlinuz-${kernel_package} \ + --initrd=/boot/initramfs-${kernel_package}.img \ + --reuse-cmdline \ + --command-line=archkernel + kexeccmd="$*" + + cat > ${workdir}/.PKGINFO <<-'EOF' + pkgname = digitalocean-debian-compat + pkgver = 1.0-1 + pkgdesc = Compatibility files to run Arch Linux as a Debian distro on DigitalOcean + url = https://github.com/gh2o/digitalocean-debian-to-arch + arch = any + license = GPL + EOF + + mkdir -p ${unitdir}/sysinit.target.wants/ + ln -s ../arch-kernel.service ${unitdir}/sysinit.target.wants/ + cat > ${unitdir}/arch-kernel.service <<-EOF + [Unit] + Description=Reboots into Arch kernel + ConditionKernelCommandLine=!archkernel + DefaultDependencies=no + Before=local-fs-pre.target systemd-remount-fs.service + + [Service] + Type=oneshot + ExecStart=${kexeccmd} + EOF + + mkdir -p ${unitdir}/multi-user.target.wants/ + ln -s ../debian-interfaces.service ${unitdir}/multi-user.target.wants/ + cat > ${unitdir}/debian-interfaces.service <<-EOF + [Unit] + Description=Parses /etc/network/interfaces into .network files for systemd-networkd + DefaultDependencies=no + Before=systemd-networkd.service + + [Service] + Type=oneshot + ExecStart=/usr/sbin/parse-debian-interfaces + EOF + + mkdir -p ${workdir}/usr/bin/ + cat > ${workdir}/usr/bin/parse-debian-interfaces <<-EOF + #!/bin/bash + set -eu + set -o pipefail + echo ENIENIENIENI > /dev/kmsg + EOF + chmod 0755 ${workdir}/usr/bin/parse-debian-interfaces + + ( cd ${workdir} && bsdtar -cf compat.pkg.tar * ) + pacman -U --noconfirm ${workdir}/compat.pkg.tar + rm -rf ${workdir} + +} + parse_debian_interfaces() { local filename="${1}" # path to interfaces file local interface="${2}" # interface name @@ -431,29 +496,15 @@ postbootstrap_configuration() { local unitdir=/archroot/etc/systemd/system mkdir -p ${unitdir}/basic.target.wants - ln -s ../installer-cleanup.service ${unitdir}/basic.target.wants/ - cat > ${unitdir}/installer-cleanup.service < ${unitdir}/installer-finalize.service < ${unitdir}/arch-kernel.service <