From 99019febf4c250efb8f23c4594ef1cfff1d973a1 Mon Sep 17 00:00:00 2001 From: Jeremy Huntwork Date: Wed, 16 Apr 2014 13:01:57 -0400 Subject: [PATCH] Remove the image specific items. --- duck.yaml => duck.yaml.example | 0 files/etc/dhclient-exit-hooks.d/hostname | 19 -- files/etc/fstab | 1 - files/etc/hostname | 1 - files/etc/hosts | 2 - files/etc/inittab | 25 --- files/etc/mtab | 1 - files/init | 9 - files/lib/duck.d/00-splash | 28 --- files/lib/duck.d/02-setup-network | 30 ---- files/lib/duck.d/40-debootstrap | 16 -- files/lib/duck.d/41-add-policy-rc.d | 14 -- files/lib/duck.d/41-update-hostname | 9 - files/lib/duck.d/98-remove-policy-rc.d | 9 - files/lib/duck.d/99-reboot | 18 -- files/lib/libduck.sh | 149 ---------------- files/lib/python-duck/duck/__init__.py | 2 - files/lib/python-duck/duck/db.py | 48 ----- files/lib/python-duck/duck/log.py | 5 - files/sbin/duckdb | 212 ----------------------- files/sbin/duckinstall | 23 --- files/sbin/ducklogin | 3 - fixes/busybox-links | 14 -- fixes/clear-persistent-udev | 10 -- fixes/kernel-boot-fix | 53 ------ fixes/squeeze-fix | 14 -- 26 files changed, 715 deletions(-) rename duck.yaml => duck.yaml.example (100%) delete mode 100644 files/etc/dhclient-exit-hooks.d/hostname delete mode 100644 files/etc/fstab delete mode 100644 files/etc/hostname delete mode 100644 files/etc/hosts delete mode 100644 files/etc/inittab delete mode 100644 files/etc/mtab delete mode 100755 files/init delete mode 100755 files/lib/duck.d/00-splash delete mode 100755 files/lib/duck.d/02-setup-network delete mode 100755 files/lib/duck.d/40-debootstrap delete mode 100755 files/lib/duck.d/41-add-policy-rc.d delete mode 100755 files/lib/duck.d/41-update-hostname delete mode 100755 files/lib/duck.d/98-remove-policy-rc.d delete mode 100755 files/lib/duck.d/99-reboot delete mode 100644 files/lib/libduck.sh delete mode 100644 files/lib/python-duck/duck/__init__.py delete mode 100644 files/lib/python-duck/duck/db.py delete mode 100644 files/lib/python-duck/duck/log.py delete mode 100755 files/sbin/duckdb delete mode 100755 files/sbin/duckinstall delete mode 100755 files/sbin/ducklogin delete mode 100755 fixes/busybox-links delete mode 100755 fixes/clear-persistent-udev delete mode 100755 fixes/kernel-boot-fix delete mode 100755 fixes/squeeze-fix diff --git a/duck.yaml b/duck.yaml.example similarity index 100% rename from duck.yaml rename to duck.yaml.example diff --git a/files/etc/dhclient-exit-hooks.d/hostname b/files/etc/dhclient-exit-hooks.d/hostname deleted file mode 100644 index 03a58ea..0000000 --- a/files/etc/dhclient-exit-hooks.d/hostname +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \ - && [ "$reason" != REBIND ] && [ "$reason" != REBOOT ] -then - return -fi - -if [ ! -z $new_host_name ] ; then - hn="$new_host_name" - [ ! -z $new_domain_name ] && hn="$hn.$new_domain_name" - - # update the hostname - echo $hn > /etc/hostname - hostname $hn - - # restart syslog to use the correct hostname. - invoke-rc.d syslog-ng restart -fi diff --git a/files/etc/fstab b/files/etc/fstab deleted file mode 100644 index 3142e86..0000000 --- a/files/etc/fstab +++ /dev/null @@ -1 +0,0 @@ -# empty fstab diff --git a/files/etc/hostname b/files/etc/hostname deleted file mode 100644 index ed89170..0000000 --- a/files/etc/hostname +++ /dev/null @@ -1 +0,0 @@ -duck diff --git a/files/etc/hosts b/files/etc/hosts deleted file mode 100644 index 2bb6b23..0000000 --- a/files/etc/hosts +++ /dev/null @@ -1,2 +0,0 @@ -127.0.0.1 localhost duckinstall -::1 localhost diff --git a/files/etc/inittab b/files/etc/inittab deleted file mode 100644 index 2ceddf9..0000000 --- a/files/etc/inittab +++ /dev/null @@ -1,25 +0,0 @@ -# The default runlevel. -id:2:initdefault: -# Boot-time system configuration/initialization script. -# This is run first except when booting in emergency (-b) mode. -si::sysinit:/etc/init.d/rcS -# What to do in single-user mode. -~~:S:wait:/sbin/sulogin - -l0:0:wait:/etc/init.d/rc 0 -l1:1:wait:/etc/init.d/rc 1 -l2:2:wait:/etc/init.d/rc 2 -l6:6:wait:/etc/init.d/rc 6 -# Normally not reached, but fallthrough in case of emergency. -z6:6:respawn:/sbin/sulogin -# What to do when CTRL-ALT-DEL is pressed. -ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now -# What to do when the power fails/returns. -pf::powerwait:/etc/init.d/powerfail start -pn::powerfailnow:/etc/init.d/powerfail now -po::powerokwait:/etc/init.d/powerfail stop - -1:23:respawn:/sbin/agetty -n -l /sbin/duckinstall 38400 tty1 -2:23:respawn:/sbin/agetty -n -l /sbin/ducklogin 38400 tty2 -3:23:respawn:/sbin/agetty -n -l /sbin/ducklogin 38400 tty3 -4:23:respawn:/sbin/agetty -n -l /sbin/ducklogin 38400 tty4 diff --git a/files/etc/mtab b/files/etc/mtab deleted file mode 100644 index 5027e2a..0000000 --- a/files/etc/mtab +++ /dev/null @@ -1 +0,0 @@ -# empty mtab diff --git a/files/init b/files/init deleted file mode 100755 index 1c13ea2..0000000 --- a/files/init +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -echo "Invoking INIT" - -exec /sbin/init - -# this will only be run if init cannot be run for some reason. -echo "System init failed, starting /bin/sh" -exec /bin/sh diff --git a/files/lib/duck.d/00-splash b/files/lib/duck.d/00-splash deleted file mode 100755 index ed17d06..0000000 --- a/files/lib/duck.d/00-splash +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -. /lib/libduck.sh - -cat - < $policy_rcd - -chmod +x $policy_rcd diff --git a/files/lib/duck.d/41-update-hostname b/files/lib/duck.d/41-update-hostname deleted file mode 100755 index e04c052..0000000 --- a/files/lib/duck.d/41-update-hostname +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -. /lib/libduck.sh -a_get_into hostname hostname -a_get_into target duck/target - -info "duckdb: Setting hostname in target" -echo $hostname > $target/etc/hostname - -exit 0 diff --git a/files/lib/duck.d/98-remove-policy-rc.d b/files/lib/duck.d/98-remove-policy-rc.d deleted file mode 100755 index 533c4dd..0000000 --- a/files/lib/duck.d/98-remove-policy-rc.d +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -# vim: filetype=sh -. /lib/libduck.sh -a_get_into target duck/target - -info "Removing policy-rc.d" - -policy_rcd=$target/usr/sbin/policy-rc.d -rm -f $policy_rcd diff --git a/files/lib/duck.d/99-reboot b/files/lib/duck.d/99-reboot deleted file mode 100755 index 7e8ec5f..0000000 --- a/files/lib/duck.d/99-reboot +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -. /lib/libduck.sh -a_get_into reboot_enabled "reboot/enabled" "True" - -if [ "$DUCK_MODE" = "testing" ]; then - warning "Not rebooting, duck/mode=testing" - exit 0 -fi - -info "Installation done, rebooting!" - -if [ "$reboot_enabled" = "True" ]; then - reboot -else - info "Not rebooting, reboot/enabled=$reboot_enabled" -fi - -exit 0 diff --git a/files/lib/libduck.sh b/files/lib/libduck.sh deleted file mode 100644 index 4e62a97..0000000 --- a/files/lib/libduck.sh +++ /dev/null @@ -1,149 +0,0 @@ -# static variables -export DUCK_VERSION="0.1" -export DUCKDB_CONF="/duckdb.conf" -export DUCKDB_JSON="/duckdb.json" -# if this file exists, the installation loop should not run. -export INSTALLER_STATUS="/.installer_status" -# default logging location. -export DEFAULT_LOG="/var/log/duckinstall.log" -export DUCK_LOGIN="/sbin/ducklogin" -export DUCK_HOOKS="/lib/duck-hooks.d" -export DUCK_PYTHONLIB="/lib/python-duck" -export PYTHONPATH="$DUCK_PYTHONLIB" - -invoke_hook() { - name=$1 - shift - path=$DUCK_HOOKS/$name - [ -x $path ] && ( $path "$@" || true ) -} - -info() { - echo "INFO : $@"; - invoke_hook log info "$@" -} - -warning() { - echo "WARNING : $@"; - invoke_hook log warning "$@" -} - -error() { - echo "ERROR : $@"; - invoke_hook log error "$@" -} - -setup_duckdb() { - info "duckdb: Loading Static Variables" - - if [ -f "$DUCKDB_CONF" ]; then - info "duckdb: Loading $DUCKDB_CONF" - duckdb url file://$DUCKDB_CONF - fi - - if [ -f "$DUCKDB_JSON" ]; then - info "duckdb: Loading $DUCKDB_JSON" - duckdb url --json file://$DUCKDB_JSON - fi - - info "duckdb: Loading /proc/cmdline" - - if ! duckdb url --cmdline file:///proc/cmdline; then - error "duckdb: Failed to load kernel arguments" - return 1 - fi - - # Time to enable hooks. - duckdb set --json duck/hooks-enabled true - duckdb set --json duck/log-hook-enabled true -} - -run_installer() { - if ! setup_duckdb; then - return 1 - fi - - for script in /lib/duck.d/[0-9][0-9]-*; do - [ ! -x "$script" ] && continue - - info "Running: $script" - logger -t installer "running: $script" - - if ! $script; then - error "Failed: $script" - return 1 - fi - done - - return 0 -} - -# Run a command in the target environment. -# required duckdb variables: -# - duck/target -in_target() { - # run chroot invocation inside of a subshell - # this allows us to override some useful environment variables - # at leisure. - - a_get_into target duck/target - - command="$@" - - info "in-target: $command" - - ( - export DEBIAN_FRONTEND=noninteractive - export DEBCONF_NONINTERACTIVE_SEEN=true - export LC_ALL=C - export LANGUAGE=C - export LANG=C - exec chroot $target $command - ) - - return $? -} - - -# get single duckdb variable -# exports the RET variable containing the value of the requested variable -# or invokes 'exit 1' if it was unable to fetch the value from duckdb. -# -# a_get duck/mode -# duck_mode="$RET" -# -# duckdb supprts the notion of default values, in that case, two arguments -# should be provided, as follows. -# -# a_get duck/mode testing -# duck_mode="$RET" -a_get() { - export DUCK_RETURN="" - export DUCK_OK="no" - - eval $(duckdb get --sh "$@") - - if [ "$DUCK_OK" != "yes" ]; then - error "Missing required duckdb variable: $1" - exit 1 - fi - - export RET=$DUCK_RETURN -} - -# This function was introduced because the common idiom of assigning RET -# resulted in code which was error prone. -a_get_into() { - name=$1 - shift - a_get "$@" - export "$name"="$RET" -} - -# set single duckdb variable -a_set() { - eval $(duckdb set "$@"); -} - -# Dynamic Variables -a_get_into DUCK_MODE duck/mode "testing" diff --git a/files/lib/python-duck/duck/__init__.py b/files/lib/python-duck/duck/__init__.py deleted file mode 100644 index 87541a4..0000000 --- a/files/lib/python-duck/duck/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -__version__ = (0, 3, 0) -__version_string__ = ".".join(map(str, __version__)) diff --git a/files/lib/python-duck/duck/db.py b/files/lib/python-duck/duck/db.py deleted file mode 100644 index e21ebc0..0000000 --- a/files/lib/python-duck/duck/db.py +++ /dev/null @@ -1,48 +0,0 @@ -import dbm -import json -import contextlib - -DEFAULT_DB = "/var/duck" -DEFAULT_ENCODING = 'utf-8' - - -class DBSession(object): - def __init__(self, db, encoding): - self._db = db - self._encoding = encoding - - def get(self, key, default=None): - try: - value = self._db[key] - except KeyError: - return default - - if value is None: - return None - - value = value.decode(self._encoding) - value = json.loads(value) - return value - - def set(self, key, value): - value = json.dumps(value) - value = value.encode(self._encoding) - self._db[key] = value - - def keys(self): - return self._db.keys() - - -class DB(object): - def __init__(self, path=None, encoding=None): - if path is None: - path = DEFAULT_DB - if encoding is None: - encoding = DEFAULT_ENCODING - self._full_path = "{0}.dbm".format(path) - self._encoding = encoding - - @contextlib.contextmanager - def open(self): - with contextlib.closing(dbm.open(self._full_path, "c")) as db: - yield DBSession(db, self._encoding) diff --git a/files/lib/python-duck/duck/log.py b/files/lib/python-duck/duck/log.py deleted file mode 100644 index 902fd83..0000000 --- a/files/lib/python-duck/duck/log.py +++ /dev/null @@ -1,5 +0,0 @@ -import logging - - -def setup(): - logging.basicConfig(level=logging.INFO) diff --git a/files/sbin/duckdb b/files/sbin/duckdb deleted file mode 100755 index 9418a08..0000000 --- a/files/sbin/duckdb +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/python -# -# AutoDB is used to store duckinstaller variables. -# - -import duck.db as duck_db -import duck - -import argparse -import urllib2 -import json -import contextlib - -VERSION = duck.__version_string__ - - -def update_db(function): - def inner(ns): - with ns.db.open() as S: - for key, value in function(S, ns): - if ns.ns: - key = "%s/%s" % (ns.ns, key) - S.set(key, value) - - return 0 - - return inner - - -def parse_text(fd): - for line in fd: - line = line.strip() - - if line.startswith("#") or not line: - continue - - key, value = line.split(" ", 2) - yield key, value - - -def flatten_dict(doc, keys=[]): - result = dict() - - for key, value in doc.items(): - this_keys = keys + [key] - - if isinstance(value, dict): - result.update(flatten_dict(value, this_keys)) - else: - result["/".join(this_keys)] = value - - return result - - -def parse_json(fd): - doc = json.load(fd) - - for key, value in doc.items(): - yield key, value - - -def parse_cmdline(fd): - cmdline = fd.read() - - for c in cmdline.split(" "): - c = c.strip() - - if not c or '=' not in c: - continue - - key, value = c.split("=", 2) - yield key, value - - -def read_dict(mode, fd): - if mode == 'cmdline': - return parse_cmdline(fd) - - if mode == 'json': - return parse_json(fd) - - if mode == 'text': - return parse_text(fd) - - raise Exception("Unknown file mode: {0}".format(mode)) - - -def read(ns, fd): - value = dict(read_dict(ns.mode, fd)) - - if ns.flatten: - return flatten_dict(value) - - return value - - -def action_get(ns): - with ns.db.open() as S: - value = S.get(ns.key, ns.default) - - if value is None: - ok = False - value = "" - else: - ok = True - - if ns.sh: - print "DUCK_RETURN=\'%s\';" % (value,) - print "DUCK_OK=\"%s\"" % ("yes" if ok else "no",) - return 0 - - if not ok: - return 1 - - if ns.raw: - value = repr(value) - - print value - - return 0 - - -@update_db -def action_set(S, ns): - if ns.json: - value = json.loads(ns.value) - elif ns.value == '-': - value = sys.stdin.read() - else: - value = ns.value - - yield ns.key, value - - -@update_db -def action_url(S, ns): - with contextlib.closing(urllib2.urlopen(ns.url)) as fd: - for key, value in read(ns, fd).items(): - yield key, value - - -def action_list(ns): - with ns.db.open() as S: - for key in S.keys(): - print key, repr(S.get(key)) - - -def main(args): - parser = argparse.ArgumentParser( - usage="usage: %(prog)s [options] [action-options]") - - parser.add_argument("-v", "--version", action='version', version=VERSION) - - parser.add_argument( - "--db", - metavar="", - default=None) - - parser.add_argument( - "--ns", - metavar="", - default=None) - - parsers = parser.add_subparsers() - - get_parser = parsers.add_parser("get", help="Get a value") - get_parser.add_argument("key") - get_parser.add_argument("default", nargs='?', default=None) - get_parser.add_argument("--sh", - help=("Output return value as a shell " - "evaluable string"), - default=False, - action='store_true') - get_parser.add_argument("--raw", - help=("Output raw (repr) value"), - default=False, - action='store_true') - get_parser.set_defaults(action=action_get) - - set_parser = parsers.add_parser("set", help="Set a value") - set_parser.add_argument("--json", - help="treat argument as json", - default=False, - action='store_true') - set_parser.add_argument("key") - set_parser.add_argument("value") - set_parser.set_defaults(action=action_set) - - list_parser = parsers.add_parser("list", help="List all values") - list_parser.set_defaults(action=action_list) - - url_parser = parsers.add_parser("url", - help="Read values from an url") - url_parser.add_argument("url", help="Fetch values from specified url") - url_parser.add_argument("--json", dest='mode', - help="Treat input as a json document", - action='store_const', const='json') - url_parser.add_argument("--cmdline", dest='mode', - help="Treat input as a /proc/cmdline file", - action='store_const', const='cmdline') - url_parser.add_argument("--flatten", - help="Flatten a nested dictionary", - default=False, action='store_true') - url_parser.set_defaults(action=action_url, mode='file') - - ns = parser.parse_args(args) - ns.db = duck_db.DB(path=ns.db) - return ns.action(ns) - -if __name__ == "__main__": - import sys - sys.exit(main(sys.argv[1:])) diff --git a/files/sbin/duckinstall b/files/sbin/duckinstall deleted file mode 100755 index 27760d7..0000000 --- a/files/sbin/duckinstall +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -. /lib/libduck.sh -a_get_into log duck/log "$DEFAULT_LOG" -a_get_into error_command 'duck/error-command' "$DUCK_LOGIN" -a_get_into success_command 'duck/success-command' "$DUCK_LOGIN" - -trap $error_command INT TERM - -info "Duck Installer $DUCK_VERSION" - -if [[ -f $INSTALLER_STATUS ]]; then - info "Not running installation, $INSTALLER_STATUS exists" - exec $DUCK_LOGIN -fi - -info "Running installation, logging to $log and syslog" - -if ! run_installer 2>&1 | tee -a $log | logger -t duckinstall -s; then - exec $error_command -fi - -touch $INSTALLER_STATUS -exec $success_command diff --git a/files/sbin/ducklogin b/files/sbin/ducklogin deleted file mode 100755 index 478588c..0000000 --- a/files/sbin/ducklogin +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -read -p "(press 'enter' to login)" -exec /bin/login -f root diff --git a/fixes/busybox-links b/fixes/busybox-links deleted file mode 100755 index 8418cab..0000000 --- a/fixes/busybox-links +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# Make busybox applets available in the PATH for general use - -set -e - -case "$1" in - "post-packages-configure") - for a in $(/bin/busybox --list) ; do - which $a >/dev/null || ln -s busybox /bin/$a - done - ;; -esac - -exit 0 diff --git a/fixes/clear-persistent-udev b/fixes/clear-persistent-udev deleted file mode 100755 index e79e41e..0000000 --- a/fixes/clear-persistent-udev +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -# Remove any persistent udev rules -# If the host system runs it's own udev daemon, there is a chance that installation -# hooks will trigger the generation of persistent files. - -set -e - -case "$1" in - "final") rm -f /etc/udev/rules.d/*; ;; -esac diff --git a/fixes/kernel-boot-fix b/fixes/kernel-boot-fix deleted file mode 100755 index f6d1e2f..0000000 --- a/fixes/kernel-boot-fix +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -# Make sure that the kernel does not generate an initramfs. -# Clear /boot before packages are being configured. - -set -e - -status_code=0 - -case "$1" in - "pre-packages-configure") - echo "Disabling generation of an initramfs" - - rm -rf /etc/kernel/postinst.d - rm -rf /etc/kernel/postrm.d - - dpkg --get-selections | while read name _; do - case "$name" in - linux-image-*-dbg) continue ;; - linux-image-*) ;; - *) continue ;; - esac - - version=${name#linux-image-*} - - path="/var/lib/dpkg/info/$name.postinst" - - [[ ! -f $path ]] && continue - - if ! grep -E 'my \$initrd\s+=\s+"YES";' $path; then - echo "initrd already disabled: $name" - continue - fi - - cp -a $path $path.original - - echo "Disabling initrd for: $name" - - if ! sed -r -i 's/my \$initrd\s+=\s+"YES";/my $initrd = "";/' $path; then - echo "failed to patch: $path" - exit 1 - fi - - echo "Generating modules.dep" - depmod $version - done - ;; - "final") - echo "Clearing /boot" - rm -rf /boot - ;; -esac - -exit 0 diff --git a/fixes/squeeze-fix b/fixes/squeeze-fix deleted file mode 100755 index b77a8a1..0000000 --- a/fixes/squeeze-fix +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# fix for dash hooks that does not run properly on it's own. -# http://wiki.debian.org/Multistrap#Steps_for_Squeeze_and_later - -set -e - -case "$1" in - "pre-bootstrap-configure") - mkdir -p /usr/share/man/man1 - ;; - *) ;; -esac - -exit 0