From 2bbb8c12ede1161a1d15c227d60cbdda96de9292 Mon Sep 17 00:00:00 2001 From: abveritas Date: Fri, 24 Aug 2012 17:13:00 -0400 Subject: [PATCH] adding transitional chakra-init for full move to systemd --- chakra-init/PKGBUILD | 29 +++++++ chakra-init/chakra-init.install | 5 ++ chakra-init/inittab | 48 +++++++++++ chakra-init/rc.local.shutdown | 5 ++ chakra-init/rc.shutdown | 143 ++++++++++++++++++++++++++++++++ 5 files changed, 230 insertions(+) create mode 100644 chakra-init/PKGBUILD create mode 100644 chakra-init/chakra-init.install create mode 100644 chakra-init/inittab create mode 100755 chakra-init/rc.local.shutdown create mode 100755 chakra-init/rc.shutdown diff --git a/chakra-init/PKGBUILD b/chakra-init/PKGBUILD new file mode 100644 index 000000000..f678af10f --- /dev/null +++ b/chakra-init/PKGBUILD @@ -0,0 +1,29 @@ +# +# Chakra Packages for Chakra, part of chakra-project.org +# +# maintainer: abveritas[at]chakra-project[dot]org> + +pkgname=chakra-init +pkgver=2012.08 +pkgrel=1 +pkgdesc="Transitional systemd scripts" +arch=('i686' 'x86_64') +url="http://www.chakra-project.org" +license=('GPL2') +depends=('filesystem') +makedepends=('asciidoc') +install=chakra-init.install +source=('rc.shutdown' 'rc.local.shutdown' 'inittab') +md5sums=('e4798daef2b565e3b6f2ec5e0d5ce3d2' + '669ce6d766dd9deb86686219f3763fe4' + 'ec5d68e47feac3fb486b72f82ddabfb5') + +package() { + cd ${srcdir} + # setup /etc + mkdir ${pkgdir}/etc + install -m644 -t ${pkgdir}/etc inittab + install -m755 -t ${pkgdir}/etc rc.local.shutdown + install -m755 -t ${pkgdir}/etc rc.shutdown + +} diff --git a/chakra-init/chakra-init.install b/chakra-init/chakra-init.install new file mode 100644 index 000000000..ade2704e8 --- /dev/null +++ b/chakra-init/chakra-init.install @@ -0,0 +1,5 @@ +post_install() { + grep "KEYMAP=" /etc/rc.conf.pacsave >> /etc/vconsole.conf + sed -e 's,/usr/bin/halt,/usr/bin/poweroff,g' /usr/share/config/kdm/kdmrc + systemctl preset +} diff --git a/chakra-init/inittab b/chakra-init/inittab new file mode 100644 index 000000000..1f4d7255f --- /dev/null +++ b/chakra-init/inittab @@ -0,0 +1,48 @@ +# +# /etc/inittab +# + +# Runlevels: +# 0 Halt +# 1(S) Single-user +# 2 Not used +# 3 Multi-user +# 4 Not used +# 5 X11 +# 6 Reboot + +## Only one of the following two lines can be uncommented! +# Boot to console +#id:3:initdefault: +# Boot to X11 +#id:5:initdefault: + +#rc::sysinit:/etc/rc.sysinit +#rs:S1:wait:/etc/rc.single +#rm:2345:wait:/etc/rc.multi +rh:06:wait:/etc/rc.shutdown +#su:S:wait:/sbin/sulogin -p + +# -8 options fixes umlauts problem on login +c1:2345:respawn:/sbin/agetty -8 -s 38400 tty1 linux +c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux +c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux +c4:2345:respawn:/sbin/agetty -8 -s 38400 tty4 linux +c5:2345:respawn:/sbin/agetty -8 -s 38400 tty5 linux +c6:2345:respawn:/sbin/agetty -8 -s 38400 tty6 linux + +# Serial Virtual Console for KVM and others VMs +#s0:2345:respawn:/sbin/agetty -8 -s 9600 ttyS0 linux + +# Hypervisor Virtual Console for Xen and KVM +#h0:2345:respawn:/sbin/agetty -8 -s 38400 hvc0 linux + +ca::ctrlaltdel:/sbin/shutdown -t3 -r now + +# Example lines for starting a login manager +#x:5:respawn:/usr/bin/xdm -nodaemon +#x:5:respawn:/usr/sbin/gdm -nodaemon +#x:5:respawn:/usr/bin/kdm -nodaemon +#x:5:respawn:/usr/bin/slim >/dev/null 2>&1 + +# End of file diff --git a/chakra-init/rc.local.shutdown b/chakra-init/rc.local.shutdown new file mode 100755 index 000000000..fe6046227 --- /dev/null +++ b/chakra-init/rc.local.shutdown @@ -0,0 +1,5 @@ +#!/bin/bash +# +# /etc/rc.local.shutdown: Local shutdown script. +# + diff --git a/chakra-init/rc.shutdown b/chakra-init/rc.shutdown new file mode 100755 index 000000000..ec30d5602 --- /dev/null +++ b/chakra-init/rc.shutdown @@ -0,0 +1,143 @@ +#!/bin/bash +# +# /etc/rc.shutdown +# + +. /etc/rc.conf +. /etc/rc.d/functions + +# avoid staircase effect +stty onlcr + +echo " " +printhl "Initiating Shutdown..." +echo " " + +run_hook shutdown_start + +[[ -x /etc/rc.local.shutdown ]] && /etc/rc.local.shutdown + +stop_all_daemons + +stat_busy "Saving Random Seed" + RANDOM_SEED=/var/lib/misc/random-seed + install -TDm 0600 /dev/null $RANDOM_SEED + POOL_FILE=/proc/sys/kernel/random/poolsize + if [[ -r $POOL_FILE ]]; then + read POOL_SIZE < $POOL_FILE + (( POOL_SIZE /= 8 )) + else + POOL_SIZE=512 + fi + dd if=/dev/urandom of=$RANDOM_SEED count=1 bs=$POOL_SIZE &>/dev/null +stat_done + +[[ $TIMEZONE ]] && status "Configuring Time Zone" set_timezone "$TIMEZONE" + +# Write to wtmp file before unmounting +halt -w + +# stop monitoring of lvm2 groups before unmounting filesystems +[[ $USELVM = [Yy][Ee][Ss] && -x $(type -P lvm) ]] && + status "Deactivating monitoring of LVM2 groups" vgchange --monitor n + +# any future uevents can and should be ignored +status "Shutting down UDev" udevadm control --exit + +run_hook shutdown_prekillall + +kill_all + +run_hook shutdown_postkillall + +run_hook shutdown_preumount + +# unmount any non-api partitions that are backed by swap, we don't want to +# move their contents into memory (waste of time and might caues OOM). +status "Unmounting Swap-backed Filesystems" umount_all "tmpfs" + +# almost everything is dead now, so the swap should hopefully be relatively +# empty, and quick to switch off +status "Deactivating Swap" swapoff -a + +status "Unmounting Non-API Filesystems" umount_all + +run_hook shutdown_postumount + +# Kill non-root encrypted partition mappings +if [[ -f /etc/crypttab ]] && type -p cryptsetup >/dev/null; then + stat_busy "Deactivating encrypted volumes:" + # Maybe someone has LVM on an encrypted block device + # executing an extra vgchange is errorless + [[ $USELVM = [Yy][Ee][Ss] ]] && vgchange --sysinit -a n &>/dev/null + do_lock() { + stat_append "${1}.." + if cryptsetup remove "$1" &>/dev/null; then + stat_append "ok " + else + stat_append "failed " + fi + } + read_crypttab do_lock + stat_done +fi + +[[ $USELVM = [Yy][Ee][Ss] && -x $(type -P lvm) && -d /sys/block ]] && + status "Deactivating LVM2 groups" vgchange --sysinit -a n &>/dev/null + +run_hook shutdown_poweroff + +if [[ -x /run/initramfs/shutdown ]]; then + + # decide what we want to do + if [[ $RUNLEVEL = 0 ]]; then + action="poweroff" + else + action="reboot" + fi + + # make /run/initrafs a mount + mount --bind /run/initramfs /run/initramfs + + # in case someone has shared our mountpoints, unshare them + mount --make-private /run/initramfs + mount --make-private / + + # bind all api mounts + mkdir -p /run/initramfs/{sys,proc,dev,run,oldroot} + mount --bind /sys /run/initramfs/sys + mount --bind /proc /run/initramfs/proc + mount --bind /dev /run/initramfs/dev + mount --bind /run /run/initramfs/run + + # enter shutdownramfs + cd /run/initramfs + pivot_root . oldroot + + #reexec init + /oldroot/sbin/init u + + # run /shutdown in the new root + exec chroot . /shutdown $action /dev/console 2>&1 + +else + + status "Remounting Root Filesystem Read-only" \ + mount -o remount,ro / + + # Power off or reboot + printsep + if [[ $RUNLEVEL = 0 ]]; then + printhl "${C_H2}POWER OFF" + poweroff -d -f -h -i + else + printhl "${C_H2}REBOOTING" + # if kexec is installed and a kernel is loaded, use it + [[ -x $(type -P kexec) ]] && kexec -e &>/dev/null + reboot -d -f -i + fi + +fi + +# End of file +# vim: set ts=2 sw=2 noet: