From ec0c7a74bbf5824adc4efa54e1f91984ac870a8e Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Wed, 6 May 2009 09:53:36 +0000 Subject: move to .in files --- Makefile | 103 +++++----- albootstrap | 54 ----- albootstrap.in | 54 +++++ lbu | 553 --------------------------------------------------- lbu.in | 554 ++++++++++++++++++++++++++++++++++++++++++++++++++++ libalpine.sh | 73 ------- libalpine.sh.in | 73 +++++++ setup-ads | 173 ---------------- setup-ads.in | 173 ++++++++++++++++ setup-alpine | 52 ----- setup-alpine-web | 145 -------------- setup-alpine-web.in | 145 ++++++++++++++ setup-alpine.in | 52 +++++ setup-cryptswap | 48 ----- setup-cryptswap.in | 48 +++++ setup-disk | 102 ---------- setup-disk.in | 102 ++++++++++ setup-dns | 25 --- setup-dns.in | 25 +++ setup-hostname | 14 -- setup-hostname.in | 14 ++ setup-interfaces | 136 ------------- setup-interfaces.in | 136 +++++++++++++ setup-keymap | 104 ---------- setup-keymap.in | 104 ++++++++++ setup-mta | 51 ----- setup-mta.in | 51 +++++ setup-sendbug | 41 ---- setup-sendbug.in | 41 ++++ setup-webconf | 98 ---------- setup-webconf.in | 98 ++++++++++ update-conf | 88 --------- update-conf.in | 88 +++++++++ 33 files changed, 1817 insertions(+), 1801 deletions(-) delete mode 100644 albootstrap create mode 100644 albootstrap.in delete mode 100644 lbu create mode 100644 lbu.in delete mode 100755 libalpine.sh create mode 100755 libalpine.sh.in delete mode 100644 setup-ads create mode 100644 setup-ads.in delete mode 100644 setup-alpine delete mode 100644 setup-alpine-web create mode 100644 setup-alpine-web.in create mode 100644 setup-alpine.in delete mode 100755 setup-cryptswap create mode 100755 setup-cryptswap.in delete mode 100644 setup-disk create mode 100644 setup-disk.in delete mode 100755 setup-dns create mode 100755 setup-dns.in delete mode 100755 setup-hostname create mode 100755 setup-hostname.in delete mode 100755 setup-interfaces create mode 100755 setup-interfaces.in delete mode 100644 setup-keymap create mode 100644 setup-keymap.in delete mode 100755 setup-mta create mode 100755 setup-mta.in delete mode 100755 setup-sendbug create mode 100755 setup-sendbug.in delete mode 100644 setup-webconf create mode 100644 setup-webconf.in delete mode 100644 update-conf create mode 100644 update-conf.in diff --git a/Makefile b/Makefile index 36fe4c6..65e118b 100644 --- a/Makefile +++ b/Makefile @@ -1,55 +1,70 @@ -V=2.0_alpha7 -P=alpine-conf -PV=$(P)-$(V) -APKF=$(PV).apk -TARBZ2=$(PV).tar.bz2 -PREFIX?= -TMP=$(PV) - -LIB_FILES=libalpine.sh -SBIN_FILES=albootstrap\ - lbu\ - setup-ads\ - setup-alpine\ - setup-alpine-web\ - setup-cryptswap\ - setup-disk\ - setup-dns\ - setup-hostname\ - setup-interfaces\ - setup-keymap\ - setup-mta\ - setup-sendbug\ - setup-webconf\ - update-conf - -ETC_LBU_FILES=lbu.conf -EXTRA_DIST=Makefile README - -DIST_FILES=$(LIB_FILES) $(SBIN_FILES) $(ETC_LBU_FILES) $(EXTRA_DIST) +VERSION := 2.0_alpha7 + +sysconfdir ?= /etc/lbu + +P := alpine-conf +PV := $(P)-$(VERSION) +TARBZ2 := $(PV).tar.bz2 +PREFIX ?= +TMP := $(PV) + +LIB_FILES := libalpine.sh +SBIN_FILES := albootstrap\ + lbu\ + setup-ads\ + setup-alpine\ + setup-alpine-web\ + setup-cryptswap\ + setup-disk\ + setup-dns\ + setup-hostname\ + setup-interfaces\ + setup-keymap\ + setup-mta\ + setup-sendbug\ + setup-webconf\ + update-conf + +SCRIPTS := $(LIB_FILES) $(SBIN_FILES) +SCRIPT_SOURCES := $(addsuffix .in,$(SCRIPTS)) + +ETC_LBU_FILES := lbu.conf +EXTRA_DIST := Makefile README +DIST_FILES := $(SCRIPT_SOURCES) $(ETC_LBU_FILES) $(EXTRA_DIST) + +GIT_REV := $(shell git describe || echo exported) +ifneq ($(GIT_REV), exported) +FULL_VERSION := $(patsubst $(PACKAGE)-%,%,$(GIT_REV)) +FULL_VERSION := $(patsubst v%,%,$(FULL_VERSION)) +else +FULL_VERSION := $(VERSION) +endif + DESC="Alpine configuration scripts" WWW="http://alpinelinux.org/alpine-conf" -TAR=tar -DB=$(TMP)/var/db/apk/$(PV) + +SED := sed +TAR := tar + +SED_REPLACE := -i -e 's:@VERSION@:$(VERSION):g' \ + -e 's:@PREFIX@:$(PREFIX):g' + +.SUFFIXES: .sh.in .in +.sh.in.sh: + ${SED} ${SED_REPLACE} ${SED_EXTRA} $< > $@ + +.in: + ${SED} ${SED_REPLACE} ${SED_EXTRA} $< > $@ .PHONY: all apk clean dist install uninstall -all: - sed -i 's|^PREFIX=.*|PREFIX=$(PREFIX)|' $(SBIN_FILES) +all: $(SCRIPTS) apk: $(APKF) dist: $(TARBZ2) -$(APKF): $(SBIN_FILES) - rm -rf $(TMP) - make all PREFIX= - make install DESTDIR=$(TMP) PREFIX= - mkdir -p $(DB) - echo $(DESC) > $(DB)/DESC - cd $(TMP) && $(TAR) -czf ../$@ . - rm -rf $(TMP) $(TARBZ2): $(DIST_FILES) rm -rf $(TMP) @@ -63,8 +78,8 @@ install: install -m 755 $(SBIN_FILES) $(DESTDIR)/$(PREFIX)/sbin install -m 755 -d $(DESTDIR)/$(PREFIX)/lib install -m 755 $(LIB_FILES) $(DESTDIR)/$(PREFIX)/lib - install -m 755 -d $(DESTDIR)/etc/lbu - install -m 755 $(ETC_LBU_FILES) $(DESTDIR)/etc/lbu + install -m 755 -d $(DESTDIR)/$(sysconfdir) + install -m 755 $(ETC_LBU_FILES) $(DESTDIR)/$(sysconfdir) uninstall: for i in $(SBIN_FILES); do \ @@ -75,5 +90,5 @@ uninstall: done clean: - rm -rf $(APKF) $(TMP) $(TARBZ2) + rm -rf $(SCRIPTS) $(TMP) $(TARBZ2) diff --git a/albootstrap b/albootstrap deleted file mode 100644 index 2538fa3..0000000 --- a/albootstrap +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh - -# bootstrap an alpine installation - -VERSION=1.0 - -usage() { - echo "usage: $(basename $0) TARGETDIR" - exit 2 -} - -die () { - echo "$@" >&2 - exit 3 -} - -# set up vars -: ${WGET:="/usr/bin/wget"} -: ${TAR:="/usr/bin/tar"} -: ${MIRROR:="http://dev.alpinelinux.org/alpine/v1.7"} -: ${BASE:="base.tar.bz2"} -target=$1 - -# main -[ -z "$target" ] && usage -[ "$target" = "/" ] && die "Bootstrapping Alpine to '/' is probably not a good idea. Aborting..." - -mkdir -p "$target" - -echo ">>> Fetching $MIRROR/$BASE..." -$WGET -q -O - "$MIRROR/$BASE" | tar -C "$target" -jx || die "Failed to fetch or unpack $BASE" - -echo ">>> Creating missing dirs..." -for dir in proc sys dev home; do - mkdir -p "$target/$dir" -done - -echo ">>> Installing busybox links..." -# create fake /proc/self/exe -mkdir -p "$target/proc/self" -ln -s /bin/busybox "$target/proc/self/exe" -chroot "$target" /bin/busybox --install -s -rm -r "$target/proc/self" - -if [ -f /etc/resolv.conf ]; then - echo ">>> Copying /etc/resolv.conf..." - cp /etc/resolv.conf "$target/etc/" -fi - -echo ">>> Setting up APK_PATH..." -echo "export APK_PATH=$MIRROR/apks" >> "$target/etc/profile" - -echo ">>> Alpine bootstrap complete." - diff --git a/albootstrap.in b/albootstrap.in new file mode 100644 index 0000000..fe3df60 --- /dev/null +++ b/albootstrap.in @@ -0,0 +1,54 @@ +#!/bin/sh + +# bootstrap an alpine installation + +VERSION=2.0_alpha7 + +usage() { + echo "usage: $(basename $0) TARGETDIR" + exit 2 +} + +die () { + echo "$@" >&2 + exit 3 +} + +# set up vars +: ${WGET:="/usr/bin/wget"} +: ${TAR:="/usr/bin/tar"} +: ${MIRROR:="http://dev.alpinelinux.org/alpine/v1.7"} +: ${BASE:="base.tar.bz2"} +target=$1 + +# main +[ -z "$target" ] && usage +[ "$target" = "/" ] && die "Bootstrapping Alpine to '/' is probably not a good idea. Aborting..." + +mkdir -p "$target" + +echo ">>> Fetching $MIRROR/$BASE..." +$WGET -q -O - "$MIRROR/$BASE" | tar -C "$target" -jx || die "Failed to fetch or unpack $BASE" + +echo ">>> Creating missing dirs..." +for dir in proc sys dev home; do + mkdir -p "$target/$dir" +done + +echo ">>> Installing busybox links..." +# create fake /proc/self/exe +mkdir -p "$target/proc/self" +ln -s /bin/busybox "$target/proc/self/exe" +chroot "$target" /bin/busybox --install -s +rm -r "$target/proc/self" + +if [ -f /etc/resolv.conf ]; then + echo ">>> Copying /etc/resolv.conf..." + cp /etc/resolv.conf "$target/etc/" +fi + +echo ">>> Setting up APK_PATH..." +echo "export APK_PATH=$MIRROR/apks" >> "$target/etc/profile" + +echo ">>> Alpine bootstrap complete." + diff --git a/lbu b/lbu deleted file mode 100644 index e26094f..0000000 --- a/lbu +++ /dev/null @@ -1,553 +0,0 @@ -#!/bin/sh - -# lbu - utility to create local backups. -# Copyright (c) 2006 Natanael Copa -# May be distributed under GPL2 - -VERSION=1.2 - -if [ ! -f ${libalpine:="./libalpine.sh"} ]; then - libalpine=/usr/share/lbu/libalpine.sh - if [ ! -f "$libalpine" ]; then - libalpine=/lib/libalpine.sh - fi -fi -. $libalpine || exit 1 - -EXCLUDE_LIST=/etc/lbu/exclude -INCLUDE_LIST=/etc/lbu/include - -DEFAULT_CIPHER="aes-256-cbc" - -LBU_CONF=/etc/lbu/lbu.conf -if [ -f "$LBU_CONF" ]; then - . "$LBU_CONF" -fi - -UMOUNT_LIST= - -usage() { - echo "$PROGRAM $VERSION" - echo "usage: $PROGRAM [options] [args] - -Available subcommands: - commit (ci) - exclude (ex, delete) - include (inc, add) - list (ls) - package (pkg) - status (stat, st) - list-backup (lb) - revert - -Common options: - -h Show help for subcommand. - -q Quiet mode. - -v Verbose mode. -" - exit 1 -} - -cleanup() { - local i - for i in $UMOUNT_LIST; do - umount $i - done -} - -exit_clean() { - cleanup - exit 1 -} - -mount_once() { - if ! grep $1 /proc/mounts >/dev/null; then - mount $1 && UMOUNT_LIST="$1 $UMOUNT_LIST" - fi -} - -# create backupfile -backup_apkovl() { - local outfile="$1" - local d=$( date -u -r "$outfile" "+%Y%m%d%H%M%S" ) - local backup=$(echo "$outfile" | sed "s/\.apkovl\.tar\.gz/.$d.tar.gz/") - vecho "Creating backup $backup" - if [ -z "$DRYRUN" ]; then - mv "$outfile" "$backup" - fi -} - -# verify we have openssl if we want to encrypt -check_openssl() { - [ -z "$ENCRYPTION" ] && return 0 - OPENSSL=$(which openssl 2>/dev/null) || die "openssl was not found" - - $OPENSSL list-cipher-commands | grep "^$ENCRYPTION$" > /dev/null \ - || die "Cipher $ENCRYPTION is not supported" -} - -# list_add(char *listfile, char* file...) -list_add() { - local list="$1" - shift - mkdir -p `dirname "$list"` - while [ $# -gt 0 ] ; do - filename=`echo "$1" | sed 's:^/\+::'` - if grep "^$filename$" "$list" >/dev/null 2>&1 ; then - vecho "$filename is already in $list." - else - vecho "Adding $filename to $list." - echo "$filename" >> "$list" - fi - shift - done -} - -# list_delete(char *listfile, char *file...) -list_delete() { - local list="$1" - local tmp="$list.old" - shift - [ -f "$list" ] || return 1 - while [ $# -gt 0 ] ; do - filename=`echo "$1" | sed 's:^/\+::'` - mv "$list" "$tmp" - vecho "Removing $filename from list." - grep -v "^$filename$" "$tmp" > "$list" - rm "$tmp" - shift - done -} - - - -# -# lbu_include - add/remove files to include list -# -usage_include() { - echo "$PROGRAM $VERSION -Add filename(s) to include list (/etc/lbu/include) - -usage: $PROGRAM include|inc|add [-rv] ... - $PROGRAM include|inc|add [-v] -l - -Options: - -l List contents of include list. - -r Remove specified file(s) from include list instead of adding. - -v Verbose mode. -" - exit 1 -} - -cmd_include() { - if [ "$LIST" ] ; then - [ $# -gt 0 ] && usage_include - show_include - return - fi - - [ $# -lt 1 ] && usage_include - if [ "$REMOVE" ] ; then - list_delete "$INCLUDE_LIST" "$@" - else - list_add "$INCLUDE_LIST" "$@" - list_delete "$EXCLUDE_LIST" "$@" - fi -} - -show_include() { - if [ -f "$INCLUDE_LIST" ] ; then - vecho "Include files:" - cat "$INCLUDE_LIST" - fi -} - -# -# lbu_package - create a package -# -usage_package() { - echo "$PROGRAM $VERSION -Create backup package. - -usage: $PROGRAM package|pkg -v [|] - -Options: - -v Verbose mode. - -If is a directory, a package named .apkovl.tar.gz will -be created in the specified directory. - -If is specified, and is not a direcotry, a package with the -specified name willbe created. - -If nor is not specified, a package named -.apkovl.tar.gz will be created in current work directory. -" - exit 1 -} - -cmd_package() { - local pkg="$1" - local rc=0 - local owd="$PWD" - local suff="apkovl.tar.gz" - local tmpdir tmppkg - - check_openssl - init_tmpdir tmpdir - - [ -n "$ENCRYPTION" ] && suff="$suff.$ENCRYPTION" - - # find filename - if [ -d "$pkg" ] ; then - pkg="$pkg/$(hostname).$suff" - elif [ -z "$pkg" ]; then - pkg="$PWD/$(hostname).$suff" - fi - - tmppkg="$tmpdir/$(basename $pkg)" - - cd "${ROOT:-/}" - currentlist=$(apk audit --backup -q) - if [ -f var/lib/apk/world ]; then - currentlist="$currentlist var/lib/apk/world" - fi - - # create tar archive - [ -f "$EXCLUDE_LIST" ] && excl="-X $EXCLUDE_LIST" - [ -f "$INCLUDE_LIST" ] && incl="-T $INCLUDE_LIST" - if [ -n "$VERBOSE" ]; then - echo "Archiving the following files:" >&2 - # we dont want to mess the tar output with the - # password prompt. Lets get the tar output first. - tar $excl $incl -c -v $currentlist > /dev/null - rc=$? - fi - if [ $rc -eq 0 ]; then - if [ -z "$ENCRYPTION" ]; then - tar $excl $incl -c $currentlist | gzip -c >"$tmppkg" - rc=$? - else - set -- enc "-$ENCRYPTION" -salt - [ -n "$PASSWORD" ] && set -- "$@" -pass pass:"$PASSWORD" - tar $excl $incl -c $currentlist | gzip -c \ - | $OPENSSL "$@" > "$tmppkg" - rc=$? - fi - fi - cd "$owd" - - # actually commit unless dryrun mode - if [ $rc -eq 0 ]; then - if [ -z "$DRYRUN" ]; then - if [ "x$pkg" = "x-" ]; then - cat "$tmppkg" - else - cp "$tmppkg" "$pkg" - fi - fi - vecho "Created $pkg" - fi - return $rc -} - -# -# lbu list - list files that would go to archive -# -usage_list() { - echo "$PROGRAM $VERSION -Lists files that would go to tar package. Same as: 'lbu package -v /dev/null' - -usage: $PROGRAM list|ls -" - exit 1 -} - -cmd_list() { - VERBOSE="-v" - cmd_package /dev/null -} - -# -# lbu_commit - commit config files to writeable media -# -usage_commit() { - echo "$PROGRAM $VERSION -Create a backup of config to writeable media. - -usage: $PROGRAM commit|ci [-nv] [] - -Options: - -d Remove old apk overlay files. - -e Protect configuration with a password. - -n Don't commit, just show what would have been commited. - -p Give encryption password on the command-line - -v Verbose mode. - -The following values for is supported: floppy usb -If is not specified, the environment variable LBU_MEDIA will be used. - -Password protection will use $DEFAULT_CIPHER encryption. Other ciphers can be -used by setting the DEFAULT_CIPHER or ENCRYPTION environment variables. -For possible ciphers, try: openssl -v - -The password used to encrypt the file, can either be specified with the -p -option or using the PASSWORD environment variable. - -The environment varialbes can also be set in $LBU_CONF -" - exit 1 -} - -cmd_commit() { - local media mnt statuslist tmplist currentlist - local incl excl outfile ovls lines - - check_openssl - - # turn on verbose mode if dryrun - [ -n "$DRYRUN" ] && VERBOSE="-v" - - # find what media to use - media="${1:-$LBU_MEDIA}" - [ -z "$media" ] && usage_commit - - # mount media unles its already mounted - mnt=/media/$media - [ -d "$mnt" ] || usage - mount_once "$mnt" || die "failed to mount $mnt" - - # find the outfile - outfile="$mnt/$(hostname).apkovl.tar.gz" - if [ -n "$ENCRYPTION" ]; then - outfile="$outfile.$ENCRYPTION" - fi - - - # remove old config files - if [ -n "$DELETEOLDCONFIGS" ] ; then - local rmfiles=$(ls "$mnt/"*.apkovl.tar.gz* 2>/dev/null) - if [ -n "$rmfiles" ] ; then - if [ -n "$VERBOSE" ]; then - echo "Removing old apk overlay files:" >&2 - echo "$rmfiles" - echo "" >&2 - fi - [ -z "$DRYRUN" ] && rm "$mnt/"*.apkovl.tar.gz* - fi - else - lines=$(ls -1 "$mnt"/*.apkovl.tar.gz* 2>/dev/null) - if [ "$lines" = "$outfile" ]; then - backup_apkovl "$outfile" - elif [ -n "$lines" ]; then - # More then one apkovl, this is a security concern - cleanup - eecho "The following apkovl file(s) were found:" - eecho "$lines" - eecho "" - die "Please use -d to replace." - fi - fi - - # create package - if ! cmd_package "$outfile"; then - cleanup - die "Problems creating archive. aborting" - fi - - # delete old backups if needed - # poor mans 'head -n -N' done with awk. - ls "$mnt"/$(hostname).[0-9][0-9][0-9][0-9]*[0-9].tar.gz 2>/dev/null \ - | awk '{ a[++i] = $0; } END { - print a[0]; - while (i-- > '"${BACKUP_LIMIT:-0}"') { - print a[++j] - } - }' | xargs rm 2>/dev/null - - # remove obsolete file. some older version of alpine needs this - # to be ble to upgrade - if [ -z "$DRYRUN" ] && [ -f $mnt/packages.list ]; then - echo "Note: Removing packages.list from $(basename $mnt)." - echo " $PACKAGES_LIST will be used." - rm -f $mnt/packages.list - fi - - # make sure data is written - sync - [ "$media" = "floppy" ] && sleep 1 - - # move current to commited. - vecho "Successfully saved apk overlay files" -} - -#--------------------------------------------------------------------------- -# lbu_exclude - add remove file(s) from exclude list - -usage_exclude() { - echo "$PROGRAM $VERSION -Add filename(s) to exclude list (/etc/lbu/exclude) - -usage: $PROGRAM exclude|ex|delete [-rv] ... - $PROGRAM exclude|ex|delete [-v] -l - -Options: - -l List contents of exclude list. - -r Remove specified file(s) from exclude list instead of adding. - -v Verbose mode. -" - exit 1 -} - -cmd_exclude() { - if [ "$LIST" ] ; then - [ $# -gt 0 ] && usage_exclude - show_exclude - return - fi - - [ $# -lt 1 ] && usage_exclude - if [ "$REMOVE" ] ; then - list_delete "$EXCLUDE_LIST" "$@" - else - list_delete "$INCLUDE_LIST" "$@" - list_add "$EXCLUDE_LIST" "$@" - fi -} - -show_exclude() { - if [ -f "$EXCLUDE_LIST" ] ; then - vecho "Exclude files:" - cat "$EXCLUDE_LIST" - fi -} - -#--------------------------------------------------------------------------- -# lbu_listbackup - Show old commits -usage_listbackup() { - cat <] - -EOF - exit 1 -} - -cmd_listbackup() { - local media=${1:-"$LBU_MEDIA"} - local mnt="/media/$media" - [ -z "$media" ] && usage_listbackup - - mount_once "$mnt" || die "failed to mount $mnt" - ls -1 "$mnt"/*.[0-9][0-9]*[0-9][0-9].tar.gz* 2>/dev/null | sed 's:.*/::' -} - -#--------------------------------------------------------------------------- -# lbu_revert - revert to old config -usage_revert() { - cat < [] - -The revision should be one of the files listed by 'lbu list-backup'. - -EOF -} - -cmd_revert() { - local media=${2:-"$LBU_MEDIA"} - [ -z "$media" ] && usage_revert - local mnt="/media/$media" - local revertto="$mnt/$1" - local current="$mnt/$(hostname).apkovl.tar.gz" - - if [ -n "$ENCRYPTION" ]; then - current="$current.$ENCRYPTION" - fi - mount_once "$mnt" || die "failed to mount $mnt" - [ -f "$revertto" ] || die "file not found: $revertto" - backup_apkovl "$current" - vecho "Reverting to $1" - [ -z "$DRYRUN" ] && mv "$revertto" "$current" -} - -#--------------------------------------------------------------------------- -# lbu_status - check what files have been changed since last save -usage_status() { - echo "$PROGRAM $VERSION -Check what files have been changed since last commit. - -usage: $PROGRAM status|st [-av] - -Options: - -a Compare all files, not just since last commit. - -v Also show include and exclude lists. -" - exit 1 -} - - - -#----------------------------------------------------------- -# Main - -cmd=`echo "$PROGRAM" | cut -s -d_ -f2` -PROGRAM=`echo "$PROGRAM" | cut -d_ -f1` -if [ -z "$cmd" ] ; then - cmd="$1" - [ -z "$cmd" ] && usage - shift -fi - -# check for valid sub command -case "$cmd" in - include|inc|add) SUBCMD="include";; - commit|ci) SUBCMD="commit";; - exclude|ex|delete) SUBCMD="exclude";; - list|ls) SUBCMD="list";; - package|pkg) SUBCMD="package";; - status|stat|st) SUBCMD="status";; - list-backup|lb) SUBCMD="listbackup";; - revert) SUBCMD="revert";; - *) usage;; -esac - -# parse common args -while getopts "adehlM:np:qrv" opt ; do - case "$opt" in - a) [ $SUBCMD = status ] || usage_$SUBCMD - USE_DEFAULT="-a" - ;; - d) DELETEOLDCONFIGS="yes" - ;; - e) [ -z "$ENCRYPTION" ] && ENCRYPTION="$DEFAULT_CIPHER" - ;; - h) usage_$SUBCMD - ;; - l) LIST="-l" - ;; - n) [ $SUBCMD = commit ] || usage_$SUBCMD - DRYRUN="-n" - ;; - p) PASSWORD="$OPTARG" - ;; - q) QUIET="$QUIET -q" - ;; - r) REMOVE="-r" - ;; - v) VERBOSE="$VERBOSE -v" - ;; - esac -done -shift `expr $OPTIND - 1` - -trap exit_clean SIGINT SIGTERM -cmd_$SUBCMD "$@" -retcode=$? - -cleanup -exit $retcode diff --git a/lbu.in b/lbu.in new file mode 100644 index 0000000..69770e2 --- /dev/null +++ b/lbu.in @@ -0,0 +1,554 @@ +#!/bin/sh + +# lbu - utility to create local backups. +# Copyright (c) 2006 Natanael Copa +# May be distributed under GPL2 + +VERSION=2.0_alpha7 +sysconfdir=@sysconfdir@ + +if [ ! -f ${libalpine:="./libalpine.sh"} ]; then + libalpine=/usr/share/lbu/libalpine.sh + if [ ! -f "$libalpine" ]; then + libalpine=/lib/libalpine.sh + fi +fi +. $libalpine || exit 1 + +EXCLUDE_LIST="$sysconfdir"/exclude +INCLUDE_LIST="$sysconfdir"/include + +DEFAULT_CIPHER="aes-256-cbc" + +LBU_CONF="$sysconfdir"/lbu.conf +if [ -f "$LBU_CONF" ]; then + . "$LBU_CONF" +fi + +UMOUNT_LIST= + +usage() { + echo "$PROGRAM $VERSION" + echo "usage: $PROGRAM [options] [args] + +Available subcommands: + commit (ci) + exclude (ex, delete) + include (inc, add) + list (ls) + package (pkg) + status (stat, st) + list-backup (lb) + revert + +Common options: + -h Show help for subcommand. + -q Quiet mode. + -v Verbose mode. +" + exit 1 +} + +cleanup() { + local i + for i in $UMOUNT_LIST; do + umount $i + done +} + +exit_clean() { + cleanup + exit 1 +} + +mount_once() { + if ! grep $1 /proc/mounts >/dev/null; then + mount $1 && UMOUNT_LIST="$1 $UMOUNT_LIST" + fi +} + +# create backupfile +backup_apkovl() { + local outfile="$1" + local d=$( date -u -r "$outfile" "+%Y%m%d%H%M%S" ) + local backup=$(echo "$outfile" | sed "s/\.apkovl\.tar\.gz/.$d.tar.gz/") + vecho "Creating backup $backup" + if [ -z "$DRYRUN" ]; then + mv "$outfile" "$backup" + fi +} + +# verify we have openssl if we want to encrypt +check_openssl() { + [ -z "$ENCRYPTION" ] && return 0 + OPENSSL=$(which openssl 2>/dev/null) || die "openssl was not found" + + $OPENSSL list-cipher-commands | grep "^$ENCRYPTION$" > /dev/null \ + || die "Cipher $ENCRYPTION is not supported" +} + +# list_add(char *listfile, char* file...) +list_add() { + local list="$1" + shift + mkdir -p `dirname "$list"` + while [ $# -gt 0 ] ; do + filename=`echo "$1" | sed 's:^/\+::'` + if grep "^$filename$" "$list" >/dev/null 2>&1 ; then + vecho "$filename is already in $list." + else + vecho "Adding $filename to $list." + echo "$filename" >> "$list" + fi + shift + done +} + +# list_delete(char *listfile, char *file...) +list_delete() { + local list="$1" + local tmp="$list.old" + shift + [ -f "$list" ] || return 1 + while [ $# -gt 0 ] ; do + filename=`echo "$1" | sed 's:^/\+::'` + mv "$list" "$tmp" + vecho "Removing $filename from list." + grep -v "^$filename$" "$tmp" > "$list" + rm "$tmp" + shift + done +} + + + +# +# lbu_include - add/remove files to include list +# +usage_include() { + echo "$PROGRAM $VERSION +Add filename(s) to include list ($sysconfdir/include) + +usage: $PROGRAM include|inc|add [-rv] ... + $PROGRAM include|inc|add [-v] -l + +Options: + -l List contents of include list. + -r Remove specified file(s) from include list instead of adding. + -v Verbose mode. +" + exit 1 +} + +cmd_include() { + if [ "$LIST" ] ; then + [ $# -gt 0 ] && usage_include + show_include + return + fi + + [ $# -lt 1 ] && usage_include + if [ "$REMOVE" ] ; then + list_delete "$INCLUDE_LIST" "$@" + else + list_add "$INCLUDE_LIST" "$@" + list_delete "$EXCLUDE_LIST" "$@" + fi +} + +show_include() { + if [ -f "$INCLUDE_LIST" ] ; then + vecho "Include files:" + cat "$INCLUDE_LIST" + fi +} + +# +# lbu_package - create a package +# +usage_package() { + echo "$PROGRAM $VERSION +Create backup package. + +usage: $PROGRAM package|pkg -v [|] + +Options: + -v Verbose mode. + +If is a directory, a package named .apkovl.tar.gz will +be created in the specified directory. + +If is specified, and is not a direcotry, a package with the +specified name willbe created. + +If nor is not specified, a package named +.apkovl.tar.gz will be created in current work directory. +" + exit 1 +} + +cmd_package() { + local pkg="$1" + local rc=0 + local owd="$PWD" + local suff="apkovl.tar.gz" + local tmpdir tmppkg + + check_openssl + init_tmpdir tmpdir + + [ -n "$ENCRYPTION" ] && suff="$suff.$ENCRYPTION" + + # find filename + if [ -d "$pkg" ] ; then + pkg="$pkg/$(hostname).$suff" + elif [ -z "$pkg" ]; then + pkg="$PWD/$(hostname).$suff" + fi + + tmppkg="$tmpdir/$(basename $pkg)" + + cd "${ROOT:-/}" + currentlist=$(apk audit --backup -q) + if [ -f var/lib/apk/world ]; then + currentlist="$currentlist var/lib/apk/world" + fi + + # create tar archive + [ -f "$EXCLUDE_LIST" ] && excl="-X $EXCLUDE_LIST" + [ -f "$INCLUDE_LIST" ] && incl="-T $INCLUDE_LIST" + if [ -n "$VERBOSE" ]; then + echo "Archiving the following files:" >&2 + # we dont want to mess the tar output with the + # password prompt. Lets get the tar output first. + tar $excl $incl -c -v $currentlist > /dev/null + rc=$? + fi + if [ $rc -eq 0 ]; then + if [ -z "$ENCRYPTION" ]; then + tar $excl $incl -c $currentlist | gzip -c >"$tmppkg" + rc=$? + else + set -- enc "-$ENCRYPTION" -salt + [ -n "$PASSWORD" ] && set -- "$@" -pass pass:"$PASSWORD" + tar $excl $incl -c $currentlist | gzip -c \ + | $OPENSSL "$@" > "$tmppkg" + rc=$? + fi + fi + cd "$owd" + + # actually commit unless dryrun mode + if [ $rc -eq 0 ]; then + if [ -z "$DRYRUN" ]; then + if [ "x$pkg" = "x-" ]; then + cat "$tmppkg" + else + cp "$tmppkg" "$pkg" + fi + fi + vecho "Created $pkg" + fi + return $rc +} + +# +# lbu list - list files that would go to archive +# +usage_list() { + echo "$PROGRAM $VERSION +Lists files that would go to tar package. Same as: 'lbu package -v /dev/null' + +usage: $PROGRAM list|ls +" + exit 1 +} + +cmd_list() { + VERBOSE="-v" + cmd_package /dev/null +} + +# +# lbu_commit - commit config files to writeable media +# +usage_commit() { + echo "$PROGRAM $VERSION +Create a backup of config to writeable media. + +usage: $PROGRAM commit|ci [-nv] [] + +Options: + -d Remove old apk overlay files. + -e Protect configuration with a password. + -n Don't commit, just show what would have been commited. + -p Give encryption password on the command-line + -v Verbose mode. + +The following values for is supported: floppy usb +If is not specified, the environment variable LBU_MEDIA will be used. + +Password protection will use $DEFAULT_CIPHER encryption. Other ciphers can be +used by setting the DEFAULT_CIPHER or ENCRYPTION environment variables. +For possible ciphers, try: openssl -v + +The password used to encrypt the file, can either be specified with the -p +option or using the PASSWORD environment variable. + +The environment varialbes can also be set in $LBU_CONF +" + exit 1 +} + +cmd_commit() { + local media mnt statuslist tmplist currentlist + local incl excl outfile ovls lines + + check_openssl + + # turn on verbose mode if dryrun + [ -n "$DRYRUN" ] && VERBOSE="-v" + + # find what media to use + media="${1:-$LBU_MEDIA}" + [ -z "$media" ] && usage_commit + + # mount media unles its already mounted + mnt=/media/$media + [ -d "$mnt" ] || usage + mount_once "$mnt" || die "failed to mount $mnt" + + # find the outfile + outfile="$mnt/$(hostname).apkovl.tar.gz" + if [ -n "$ENCRYPTION" ]; then + outfile="$outfile.$ENCRYPTION" + fi + + + # remove old config files + if [ -n "$DELETEOLDCONFIGS" ] ; then + local rmfiles=$(ls "$mnt/"*.apkovl.tar.gz* 2>/dev/null) + if [ -n "$rmfiles" ] ; then + if [ -n "$VERBOSE" ]; then + echo "Removing old apk overlay files:" >&2 + echo "$rmfiles" + echo "" >&2 + fi + [ -z "$DRYRUN" ] && rm "$mnt/"*.apkovl.tar.gz* + fi + else + lines=$(ls -1 "$mnt"/*.apkovl.tar.gz* 2>/dev/null) + if [ "$lines" = "$outfile" ]; then + backup_apkovl "$outfile" + elif [ -n "$lines" ]; then + # More then one apkovl, this is a security concern + cleanup + eecho "The following apkovl file(s) were found:" + eecho "$lines" + eecho "" + die "Please use -d to replace." + fi + fi + + # create package + if ! cmd_package "$outfile"; then + cleanup + die "Problems creating archive. aborting" + fi + + # delete old backups if needed + # poor mans 'head -n -N' done with awk. + ls "$mnt"/$(hostname).[0-9][0-9][0-9][0-9]*[0-9].tar.gz 2>/dev/null \ + | awk '{ a[++i] = $0; } END { + print a[0]; + while (i-- > '"${BACKUP_LIMIT:-0}"') { + print a[++j] + } + }' | xargs rm 2>/dev/null + + # remove obsolete file. some older version of alpine needs this + # to be ble to upgrade + if [ -z "$DRYRUN" ] && [ -f $mnt/packages.list ]; then + echo "Note: Removing packages.list from $(basename $mnt)." + echo " $PACKAGES_LIST will be used." + rm -f $mnt/packages.list + fi + + # make sure data is written + sync + [ "$media" = "floppy" ] && sleep 1 + + # move current to commited. + vecho "Successfully saved apk overlay files" +} + +#--------------------------------------------------------------------------- +# lbu_exclude - add remove file(s) from exclude list + +usage_exclude() { + echo "$PROGRAM $VERSION +Add filename(s) to exclude list ($sysconfdir/exclude) + +usage: $PROGRAM exclude|ex|delete [-rv] ... + $PROGRAM exclude|ex|delete [-v] -l + +Options: + -l List contents of exclude list. + -r Remove specified file(s) from exclude list instead of adding. + -v Verbose mode. +" + exit 1 +} + +cmd_exclude() { + if [ "$LIST" ] ; then + [ $# -gt 0 ] && usage_exclude + show_exclude + return + fi + + [ $# -lt 1 ] && usage_exclude + if [ "$REMOVE" ] ; then + list_delete "$EXCLUDE_LIST" "$@" + else + list_delete "$INCLUDE_LIST" "$@" + list_add "$EXCLUDE_LIST" "$@" + fi +} + +show_exclude() { + if [ -f "$EXCLUDE_LIST" ] ; then + vecho "Exclude files:" + cat "$EXCLUDE_LIST" + fi +} + +#--------------------------------------------------------------------------- +# lbu_listbackup - Show old commits +usage_listbackup() { + cat <] + +EOF + exit 1 +} + +cmd_listbackup() { + local media=${1:-"$LBU_MEDIA"} + local mnt="/media/$media" + [ -z "$media" ] && usage_listbackup + + mount_once "$mnt" || die "failed to mount $mnt" + ls -1 "$mnt"/*.[0-9][0-9]*[0-9][0-9].tar.gz* 2>/dev/null | sed 's:.*/::' +} + +#--------------------------------------------------------------------------- +# lbu_revert - revert to old config +usage_revert() { + cat < [] + +The revision should be one of the files listed by 'lbu list-backup'. + +EOF +} + +cmd_revert() { + local media=${2:-"$LBU_MEDIA"} + [ -z "$media" ] && usage_revert + local mnt="/media/$media" + local revertto="$mnt/$1" + local current="$mnt/$(hostname).apkovl.tar.gz" + + if [ -n "$ENCRYPTION" ]; then + current="$current.$ENCRYPTION" + fi + mount_once "$mnt" || die "failed to mount $mnt" + [ -f "$revertto" ] || die "file not found: $revertto" + backup_apkovl "$current" + vecho "Reverting to $1" + [ -z "$DRYRUN" ] && mv "$revertto" "$current" +} + +#--------------------------------------------------------------------------- +# lbu_status - check what files have been changed since last save +usage_status() { + echo "$PROGRAM $VERSION +Check what files have been changed since last commit. + +usage: $PROGRAM status|st [-av] + +Options: + -a Compare all files, not just since last commit. + -v Also show include and exclude lists. +" + exit 1 +} + + + +#----------------------------------------------------------- +# Main + +cmd=`echo "$PROGRAM" | cut -s -d_ -f2` +PROGRAM=`echo "$PROGRAM" | cut -d_ -f1` +if [ -z "$cmd" ] ; then + cmd="$1" + [ -z "$cmd" ] && usage + shift +fi + +# check for valid sub command +case "$cmd" in + include|inc|add) SUBCMD="include";; + commit|ci) SUBCMD="commit";; + exclude|ex|delete) SUBCMD="exclude";; + list|ls) SUBCMD="list";; + package|pkg) SUBCMD="package";; + status|stat|st) SUBCMD="status";; + list-backup|lb) SUBCMD="listbackup";; + revert) SUBCMD="revert";; + *) usage;; +esac + +# parse common args +while getopts "adehlM:np:qrv" opt ; do + case "$opt" in + a) [ $SUBCMD = status ] || usage_$SUBCMD + USE_DEFAULT="-a" + ;; + d) DELETEOLDCONFIGS="yes" + ;; + e) [ -z "$ENCRYPTION" ] && ENCRYPTION="$DEFAULT_CIPHER" + ;; + h) usage_$SUBCMD + ;; + l) LIST="-l" + ;; + n) [ $SUBCMD = commit ] || usage_$SUBCMD + DRYRUN="-n" + ;; + p) PASSWORD="$OPTARG" + ;; + q) QUIET="$QUIET -q" + ;; + r) REMOVE="-r" + ;; + v) VERBOSE="$VERBOSE -v" + ;; + esac +done +shift `expr $OPTIND - 1` + +trap exit_clean SIGINT SIGTERM +cmd_$SUBCMD "$@" +retcode=$? + +cleanup +exit $retcode diff --git a/libalpine.sh b/libalpine.sh deleted file mode 100755 index 005d595..0000000 --- a/libalpine.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/sh - -PREFIX= - -PROGRAM=`basename $0` - - -echon () { - if [ X"$ECHON" = X ]; then - # Determine how to "echo" without newline: "echo -n" - # or "echo ...\c" - if [ X`echo -n` = X-n ]; then - ECHON=echo - NNL="\c" - # " - else - ECHON="echo -n" - NNL="" - fi - fi - $ECHON "$*$NNL" -} - -# echo if in verbose mode -vecho() { - [ -n "$VERBOSE" ] && echo "$@" -} - -# echo unless quiet mode -qecho() { - [ -z "$QUIET" ] && echo "$@" -} - -# echo to stderr -eecho() { - echo "$@" >&2 -} - -init_tmpdir() { - local omask=`umask` - local __tmpd="/tmp/$PROGRAM-${$}-`date +%s`" - umask 077 || die "umask" - mkdir "$__tmpd" || exit 1 - trap "rm -fr \"$__tmpd\"; exit" 0 - umask $omask - eval "$1=\"$__tmpd\"" -} - -pkg_inst() { - [ -z "$NOCOMMIT" ] && apk add $* -} - -pkg_deinst() { - [ -z "$NOCOMMIT" ] && apk del $* -} - -default_read() { - local n - read n - [ -z "$n" ] && n="$2" - eval "$1=\"$n\"" -} - - -invalid_ip() { - [ "$1" ] || return 0 - ! ipcalc -s $1 -} - - -cfg_add() { - [ -z "$NOCOMMIT" ] && lbu_add "$@" -} diff --git a/libalpine.sh.in b/libalpine.sh.in new file mode 100755 index 0000000..add5798 --- /dev/null +++ b/libalpine.sh.in @@ -0,0 +1,73 @@ +#!/bin/sh + +PREFIX=@PREFIX@ + +PROGRAM=`basename $0` + + +echon () { + if [ X"$ECHON" = X ]; then + # Determine how to "echo" without newline: "echo -n" + # or "echo ...\c" + if [ X`echo -n` = X-n ]; then + ECHON=echo + NNL="\c" + # " + else + ECHON="echo -n" + NNL="" + fi + fi + $ECHON "$*$NNL" +} + +# echo if in verbose mode +vecho() { + [ -n "$VERBOSE" ] && echo "$@" +} + +# echo unless quiet mode +qecho() { + [ -z "$QUIET" ] && echo "$@" +} + +# echo to stderr +eecho() { + echo "$@" >&2 +} + +init_tmpdir() { + local omask=`umask` + local __tmpd="/tmp/$PROGRAM-${$}-`date +%s`" + umask 077 || die "umask" + mkdir "$__tmpd" || exit 1 + trap "rm -fr \"$__tmpd\"; exit" 0 + umask $omask + eval "$1=\"$__tmpd\"" +} + +pkg_inst() { + [ -z "$NOCOMMIT" ] && apk add $* +} + +pkg_deinst() { + [ -z "$NOCOMMIT" ] && apk del $* +} + +default_read() { + local n + read n + [ -z "$n" ] && n="$2" + eval "$1=\"$n\"" +} + + +invalid_ip() { + [ "$1" ] || return 0 + ! ipcalc -s $1 +} + + +cfg_add() { + [ -z "$NOCOMMIT" ] && lbu_add "$@" +} diff --git a/setup-ads b/setup-ads deleted file mode 100644 index f538557..0000000 --- a/setup-ads +++ /dev/null @@ -1,173 +0,0 @@ -#!/bin/sh -# -# Join AD -# for uclibc systems -# -# Copyright (c) 2007 A.Poslavsky -# May be distributed under gpl2 - -# TODO: -# * suggest a domain name based on hostname -d? /etc/resolv.conf? -# * suggest DC server(s) based on -# $(dig _kerberos._tcp.dc._msdcs.$DOMAIN SRV +short) - -VERSION=0.1 -PROGRAM=setup-ads - -. $PREFIX/lib/libalpine.sh - -KRBCONF="/etc/krb5.conf" -SMBCONF="/etc/samba/smb.conf" -DOMAINADMIN="Administrator" -PW="" -HOSTNAME=$(hostname) -FORCE="" - -retcode=0 - -die() { - echo $* >&2 - exit 1 -} - -ask_info() { - - echo "Configuring kerberos" - echon "Enter your full Domain name in uppercase [$DOMAIN]: " - default_read DOMAIN $DOMAIN - echon "Enter your short Domain name (Workgroup) [$WORKGROUP]: " - default_read WORKGROUP $WORKGROUP - echon "Domain controller(s) (separate with space) [$DC]: " - default_read DC $DC - echon "Domain Administrator [$DOMAINADMIN]: " - default_read DOMAINADMIN $DOMAINADMIN -} - -conf_krb() { - [ -f $KRBCONF ] && cp $KRBCONF $KRBCONF.bak ; [ "$VERBOSE" ] && echo "Making backup copy of $KRBCONF to $KRBCONF.bak" - - echo "Writing $KRBCONF" - - - echo "[libdefaults] - default_realm = $DOMAIN - -[realms] -$DOMAIN = { -$(for a in $DC -do - echo " kdc = $a" -done) - admin_server = $(echo $DC | sed "s/ .*//") -} - -[login] - krb4_convert = true - krb4_get_tickets = true" > $KRBCONF - - kinit $DOMAINADMIN@$DOMAIN || die "Sorry, could not authenticate against kerberos!" -} - -join_ads() { - if [ -f $SMBCONF ] ; then - cp $SMBCONF $SMBCONF.bak - [ "$VERBOSE" ] && echo "Making backup copy of $SMBCONF to $SMBCONF.bak" - fi - echo "smb.conf witten by $PROGRAM - -[global] - # Browsing/Identification - domain master = no - domain logons = no - preferred master = no - - # Domain info - security = ADS - password server = $(echo $DC) - - workgroup = $WORKGROUP - realm = $DOMAIN - netbios name = $HOSTNAME - server string = "Samba Server $HOSTNAME" - allow trusted domains = no - idmap backend = rid:$WORKGROUP=50000-100000000 - winbind separator = - - winbind nested groups = Yes - winbind enum users = yes - winbind enum groups = yes - idmap uid = 50000-100000000 - idmap gid = 50000-100000000 - wins server = $(echo $DC) - guest account = nobody - -[testshare] - comment = Secret data - writable = yes - path = /srv/Samba/Test - public = yes - " > $SMBCONF - - [ "$VERBOSE" ] && echo "net ads join -W $DOMAIN -S $(echo $DC | sed "s/ .*//") -U $DOMAINADMIN" - net ads join -W $DOMAIN -S $(echo $DC | awk '{ print $1 }') -U $DOMAINADMIN\ - || echo "Sorry could not join $DOMAIN domain" && exit 1 -} - -check_exist() { - if [ -f "$SMBCONF" -o -f "$KRBCONF" ] ; then - [ ! "$FORCE" ] && die "Config file(s) already exist(s), -use -f to force overwriting of these file(s)" - fi -} - -usage() { - echo "$PROGRAM $VERSION" - echo "usage: $PROGRAM [options] [args] - -Options: - -h Show help for subcommand. - -q Quiet mode. - -v Verbose mode. - -K - -S - -U - -D - -P - -f force overwrite of existing configfiles (will do backup) - -" - exit 1 -} - - - -# parse common args -while getopts "D:fP:hvU:K:S:" opt ; do - case "$opt" in - h) usage - ;; - P) PW="$OPTARG" - ;; - v) VERBOSE="$VERBOSE -v" - ;; - U) DOMAINADMIN="$OPTARG" - ;; - K) KRBCONF="$OPTARG" - ;; - S) SMBCONF="$OPTARG" - ;; - D) DOMAIN="$OPTARG" - ;; - f) FORCE="$FORCE -f" - ;; - esac -done -shift `expr $OPTIND - 1` - -apk_add samba-ldap -check_exist -ask_info -conf_krb -join_ads -echo "kerberos initialized, domain joined" - -exit $retcode diff --git a/setup-ads.in b/setup-ads.in new file mode 100644 index 0000000..863028a --- /dev/null +++ b/setup-ads.in @@ -0,0 +1,173 @@ +#!/bin/sh +# +# Join AD +# for uclibc systems +# +# Copyright (c) 2007 A.Poslavsky +# May be distributed under gpl2 + +# TODO: +# * suggest a domain name based on hostname -d? /etc/resolv.conf? +# * suggest DC server(s) based on +# $(dig _kerberos._tcp.dc._msdcs.$DOMAIN SRV +short) + +VERSION=2.0_alpha7 +PROGRAM=setup-ads + +. $PREFIX/lib/libalpine.sh + +KRBCONF="/etc/krb5.conf" +SMBCONF="/etc/samba/smb.conf" +DOMAINADMIN="Administrator" +PW="" +HOSTNAME=$(hostname) +FORCE="" + +retcode=0 + +die() { + echo $* >&2 + exit 1 +} + +ask_info() { + + echo "Configuring kerberos" + echon "Enter your full Domain name in uppercase [$DOMAIN]: " + default_read DOMAIN $DOMAIN + echon "Enter your short Domain name (Workgroup) [$WORKGROUP]: " + default_read WORKGROUP $WORKGROUP + echon "Domain controller(s) (separate with space) [$DC]: " + default_read DC $DC + echon "Domain Administrator [$DOMAINADMIN]: " + default_read DOMAINADMIN $DOMAINADMIN +} + +conf_krb() { + [ -f $KRBCONF ] && cp $KRBCONF $KRBCONF.bak ; [ "$VERBOSE" ] && echo "Making backup copy of $KRBCONF to $KRBCONF.bak" + + echo "Writing $KRBCONF" + + + echo "[libdefaults] + default_realm = $DOMAIN + +[realms] +$DOMAIN = { +$(for a in $DC +do + echo " kdc = $a" +done) + admin_server = $(echo $DC | sed "s/ .*//") +} + +[login] + krb4_convert = true + krb4_get_tickets = true" > $KRBCONF + + kinit $DOMAINADMIN@$DOMAIN || die "Sorry, could not authenticate against kerberos!" +} + +join_ads() { + if [ -f $SMBCONF ] ; then + cp $SMBCONF $SMBCONF.bak + [ "$VERBOSE" ] && echo "Making backup copy of $SMBCONF to $SMBCONF.bak" + fi + echo "smb.conf witten by $PROGRAM + +[global] + # Browsing/Identification + domain master = no + domain logons = no + preferred master = no + + # Domain info + security = ADS + password server = $(echo $DC) + + workgroup = $WORKGROUP + realm = $DOMAIN + netbios name = $HOSTNAME + server string = "Samba Server $HOSTNAME" + allow trusted domains = no + idmap backend = rid:$WORKGROUP=50000-100000000 + winbind separator = - + winbind nested groups = Yes + winbind enum users = yes + winbind enum groups = yes + idmap uid = 50000-100000000 + idmap gid = 50000-100000000 + wins server = $(echo $DC) + guest account = nobody + +[testshare] + comment = Secret data + writable = yes + path = /srv/Samba/Test + public = yes + " > $SMBCONF + + [ "$VERBOSE" ] && echo "net ads join -W $DOMAIN -S $(echo $DC | sed "s/ .*//") -U $DOMAINADMIN" + net ads join -W $DOMAIN -S $(echo $DC | awk '{ print $1 }') -U $DOMAINADMIN\ + || echo "Sorry could not join $DOMAIN domain" && exit 1 +} + +check_exist() { + if [ -f "$SMBCONF" -o -f "$KRBCONF" ] ; then + [ ! "$FORCE" ] && die "Config file(s) already exist(s), +use -f to force overwriting of these file(s)" + fi +} + +usage() { + echo "$PROGRAM $VERSION" + echo "usage: $PROGRAM [options] [args] + +Options: + -h Show help for subcommand. + -q Quiet mode. + -v Verbose mode. + -K + -S + -U + -D + -P + -f force overwrite of existing configfiles (will do backup) + +" + exit 1 +} + + + +# parse common args +while getopts "D:fP:hvU:K:S:" opt ; do + case "$opt" in + h) usage + ;; + P) PW="$OPTARG" + ;; + v) VERBOSE="$VERBOSE -v" + ;; + U) DOMAINADMIN="$OPTARG" + ;; + K) KRBCONF="$OPTARG" + ;; + S) SMBCONF="$OPTARG" + ;; + D) DOMAIN="$OPTARG" + ;; + f) FORCE="$FORCE -f" + ;; + esac +done +shift `expr $OPTIND - 1` + +apk_add samba-ldap +check_exist +ask_info +conf_krb +join_ads +echo "kerberos initialized, domain joined" + +exit $retcode diff --git a/setup-alpine b/setup-alpine deleted file mode 100644 index 504f850..0000000 --- a/setup-alpine +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh - -PROGRAM=setup-alpine -VERSION=0.1 - -PREFIX= -. $PREFIX/lib/libalpine.sh - -while getopts "ah" opt ; do - case $opt in - a) ARCHIVE=yes;; - h) usage;; - *) usage;; - esac -done -shift `expr $OPTIND - 1` - -if [ "$ARCHIVE" ] ; then - echo "Creating an Alpine overlay" - init_tmpdir ROOT -else - PKGADD=apk_add -fi - -$PREFIX/sbin/setup-keymap -$PREFIX/sbin/setup-hostname -$PREFIX/sbin/setup-interfaces - -# setup up dns if no dhcp was configured -grep '^iface.*dhcp' $ROOT/etc/network/interfaces > /dev/null ||\ - $PREFIX/sbin/setup-dns - -# set root password -[ -z "$NOCOMMIT" ] && while ! passwd ; do echo "Please retry." ; done - -for i in devfs dmesg; do - rc-update add $i sysinit -done - -# add some boot services -for i in hwclock modules sysctl hostname syslog bootmisc; do - rc-update add $i boot -done - -for i in networking; do - rc-update add $i default -done - -# start up the services -rc sysinit -rc boot -rc default diff --git a/setup-alpine-web b/setup-alpine-web deleted file mode 100644 index ca98d1f..0000000 --- a/setup-alpine-web +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh - -PROGRAM=${0##*/} - -BRNUM=0 -CNET="10.$BRNUM.0" -HNAME=alpine -DOMAIN="bootstrap.invalid" -IFACE_LIST=/tmp/interfaces - -get_interfaces() { - [ -f "$IFACE_LIST" ] || tail -n +3 /proc/net/dev \ - | awk -F: '$1 !~ /lo/ { print $1 }' > "$IFACE_LIST" - cat "$IFACE_LIST" -} - -make_dhcp_subnet() { - local num=$1 - local iface=$2 - local network="$CNET.$num" - local netmask=255.255.255.240 - local router="$CNET.$(( $num + 1 ))" - local poolstart="$CNET.$(( $num + 3 ))" - local poolend="$CNET.$(( $num + 14 ))" - echo "subnet $network netmask $netmask {" - echo " range $poolstart $poolend;" - echo " option routers $router;" - echo "}" - echo "" - ip addr add $router/28 dev $iface || echo "Failed to set address $router/28 on $iface" >&2 - ip link set dev $iface up - iptables -t nat -A PREROUTING -i $iface -j DNAT --to-destination $router -} - -make_dhcp_global() { - echo "option domain-name \"$DOMAIN\";" - echo "option domain-name-servers $CNET.1;" - echo "ddns-update-style none;" - echo "" -} - -do_setup() { - local i - local count - hostname $HNAME - - # install needed packages - apk_add dhcp iptables "$@" - - # config dhcp server - make_dhcp_global > /etc/dhcp/dhcpd.conf - count=0 - for i in $(get_interfaces); do - # maximum 16 network interfaces - [ $count -ge 16 ] && break - make_dhcp_subnet $(( $count * 16 )) $i >> /etc/dhcp/dhcpd.conf - count=$(( $count + 1 )) - done - - /etc/init.d/syslog start - /etc/init.d/dhcpd start - FORCE_SETUP_WEBCONF=yes setup-webconf "$@" - - # set up http listener/forwarder - mkdir -p /var/www/redirect - cat </var/www/redirect/index.html - - - - - - -EOF - echo "E404:/var/www/redirect/index.html" > /etc/httpd.conf - echo "HTTPD_OPTS=\"-h /var/www/redirect\"" > /etc/conf.d/httpd - - /etc/init.d/httpd start - - # dummy dns - echo "* $CNET.1" > /etc/dnsd.conf - /etc/init.d/dnsd start -} - -# reconf dhcp and kill all interfaces but $1 -do_reset() { - local iface=$1 - local i - local oldip=$(ip addr show dev $iface | awk '/inet / { print $2 } ' | head -n 1) - - # setup new dhcpd.conf - make_dhcp_global > /etc/dhcp/dhcpd.conf - cat >> /etc/dhcp/dhcpd.conf < "$IFACE_LIST" + cat "$IFACE_LIST" +} + +make_dhcp_subnet() { + local num=$1 + local iface=$2 + local network="$CNET.$num" + local netmask=255.255.255.240 + local router="$CNET.$(( $num + 1 ))" + local poolstart="$CNET.$(( $num + 3 ))" + local poolend="$CNET.$(( $num + 14 ))" + echo "subnet $network netmask $netmask {" + echo " range $poolstart $poolend;" + echo " option routers $router;" + echo "}" + echo "" + ip addr add $router/28 dev $iface || echo "Failed to set address $router/28 on $iface" >&2 + ip link set dev $iface up + iptables -t nat -A PREROUTING -i $iface -j DNAT --to-destination $router +} + +make_dhcp_global() { + echo "option domain-name \"$DOMAIN\";" + echo "option domain-name-servers $CNET.1;" + echo "ddns-update-style none;" + echo "" +} + +do_setup() { + local i + local count + hostname $HNAME + + # install needed packages + apk_add dhcp iptables "$@" + + # config dhcp server + make_dhcp_global > /etc/dhcp/dhcpd.conf + count=0 + for i in $(get_interfaces); do + # maximum 16 network interfaces + [ $count -ge 16 ] && break + make_dhcp_subnet $(( $count * 16 )) $i >> /etc/dhcp/dhcpd.conf + count=$(( $count + 1 )) + done + + /etc/init.d/syslog start + /etc/init.d/dhcpd start + FORCE_SETUP_WEBCONF=yes setup-webconf "$@" + + # set up http listener/forwarder + mkdir -p /var/www/redirect + cat </var/www/redirect/index.html + + + + + + +EOF + echo "E404:/var/www/redirect/index.html" > /etc/httpd.conf + echo "HTTPD_OPTS=\"-h /var/www/redirect\"" > /etc/conf.d/httpd + + /etc/init.d/httpd start + + # dummy dns + echo "* $CNET.1" > /etc/dnsd.conf + /etc/init.d/dnsd start +} + +# reconf dhcp and kill all interfaces but $1 +do_reset() { + local iface=$1 + local i + local oldip=$(ip addr show dev $iface | awk '/inet / { print $2 } ' | head -n 1) + + # setup new dhcpd.conf + make_dhcp_global > /etc/dhcp/dhcpd.conf + cat >> /etc/dhcp/dhcpd.conf < /dev/null ||\ + $PREFIX/sbin/setup-dns + +# set root password +[ -z "$NOCOMMIT" ] && while ! passwd ; do echo "Please retry." ; done + +for i in devfs dmesg; do + rc-update add $i sysinit +done + +# add some boot services +for i in hwclock modules sysctl hostname syslog bootmisc; do + rc-update add $i boot +done + +for i in networking; do + rc-update add $i default +done + +# start up the services +rc sysinit +rc boot +rc default diff --git a/setup-cryptswap b/setup-cryptswap deleted file mode 100755 index 0ec11fc..0000000 --- a/setup-cryptswap +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh - -PREFIX= -. "$PREFIX/lib/libalpine.sh" - - -list_partitions() { - awk '$1 ~ /[0-9]/ {print " " $4}' /proc/partitions -} - - -if [ -z "$1" ] ; then - while [ "x$verify" != "xy" ] ; do - echo "Available partitions: " $(list_partitions) - echon "Use what partition for encrypted swap? [none] " - default_read part "none" - - # check if user requested to abort - if [ "x$part" = "xabort" ] || [ "x$part" = "xnone" ] ; then - exit - fi - # check if device exist - [ -e /dev/$part ] || continue - - # let the user verify - echon "Warning! you will lose all data on $part. Continue? (y/n) [n] " - default_read verify "n" - done -else - part=$1 -fi - - -apk_add cryptsetup-luks - -# set the device in /etc/conf.f/cryptswap -if grep ^DEVICE= /etc/conf.d/cryptswap >/dev/null ; then - sed -i 's:^DEVICE=.*:DEVICE=/dev/'$part':' /etc/conf.d/cryptswap -else - echo "DEVICE=/dev/$part" >> /etc/conf.d/cryptswap -fi - -rc_add -k -s 05 cryptswap -rc_add -k -s 06 swap - -/etc/init.d/cryptswap start -/etc/init.d/swap start - diff --git a/setup-cryptswap.in b/setup-cryptswap.in new file mode 100755 index 0000000..0ec11fc --- /dev/null +++ b/setup-cryptswap.in @@ -0,0 +1,48 @@ +#!/bin/sh + +PREFIX= +. "$PREFIX/lib/libalpine.sh" + + +list_partitions() { + awk '$1 ~ /[0-9]/ {print " " $4}' /proc/partitions +} + + +if [ -z "$1" ] ; then + while [ "x$verify" != "xy" ] ; do + echo "Available partitions: " $(list_partitions) + echon "Use what partition for encrypted swap? [none] " + default_read part "none" + + # check if user requested to abort + if [ "x$part" = "xabort" ] || [ "x$part" = "xnone" ] ; then + exit + fi + # check if device exist + [ -e /dev/$part ] || continue + + # let the user verify + echon "Warning! you will lose all data on $part. Continue? (y/n) [n] " + default_read verify "n" + done +else + part=$1 +fi + + +apk_add cryptsetup-luks + +# set the device in /etc/conf.f/cryptswap +if grep ^DEVICE= /etc/conf.d/cryptswap >/dev/null ; then + sed -i 's:^DEVICE=.*:DEVICE=/dev/'$part':' /etc/conf.d/cryptswap +else + echo "DEVICE=/dev/$part" >> /etc/conf.d/cryptswap +fi + +rc_add -k -s 05 cryptswap +rc_add -k -s 06 swap + +/etc/init.d/cryptswap start +/etc/init.d/swap start + diff --git a/setup-disk b/setup-disk deleted file mode 100644 index b7d8323..0000000 --- a/setup-disk +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/sh - -PREFIX= -. "$PREFIX/lib/libalpine.sh" - - -in_list() { - local i="$1" - shift - while [ $# -gt 0 ]; do - [ "$i" = "$1" ] && return 0 - shift - done - return 1 -} - -useall() { - local i size - echo "Creating root partition..." - apk_add -q parted e2fsprogs - # erase all partitions - for i in $(parted /dev/$rootdisk print | awk '$1 ~ /[0-9]+/ {print $1}'); do - parted /dev/$rootdisk rm $i >/dev/null - done - # create new partition - size=$(parted /dev/$rootdisk print | awk '/^Disk / {print $3}') - parted /dev/$rootdisk mkpart primary 0 $size >/dev/null - parted /dev/$rootdisk set 1 boot on >/dev/null - - # create device node if not exist - mdev -s - rootdev=/dev/${rootdisk}1 - - mkfs.ext3 -q $rootdev - # we are done with parted and dont want it in the lbu package - apk del -q parted e2fsprogs - - mount -t ext3 $rootdev /mnt || return 1 - - echon "Installing system on $rootdev: " - lbu package - | tar -C /mnt -zx - apk add -q --progress --root /mnt $(cat /mnt/var/lib/apk/world) \ - linux-grsec linux-grsec-mod acct mkinitfs - echo "" - # make things bootable - kernel=$(ls /mnt/lib/modules) - chroot /mnt /sbin/mkinitfs -F "ata base bootchart cdrom ext3 ide scsi usb" $kernel - - # create an extlinux.conf - sed '/append initrd/d' /media/*/syslinux.cfg > /mnt/boot/extlinux.conf - echo -e "\tappend initrd=/boot/grsec.gz root=$rootdev modules=ext3 quiet" >> /mnt/boot/extlinux.conf - - # fix the fstab - echo -e "$rootdev\t/\t\text3\tdefaults\t1 1" >> /mnt/etc/fstab - - # install extlinux - apk add -q syslinux - extlinux -i /mnt/boot - umount /mnt - - # fix mbr - dd if=/usr/share/syslinux/mbr.bin of=/dev/$rootdisk - echo "" - echo "Installation is done. Please reboot." - apk del -q syslinux - -} - -usbdisk=$(readlink /dev/usbdisk) -disks= -cd /dev -for i in sd[a-z] hd[a-z]; do - case "$usbdisk" in - $i[0-9]*);; - *) [ -b "$i" ] && disks="$disks $i";; - esac -done - -# no disks so lets exit quietly. -[ -z "$disks" ] && exit 0 - -rootdisk= -while ! in_list "$rootdisk" $disks "none" "abort"; do - echo "Available disks are: $disks" - echon "Which one is the root disk? (or none) [none] " - default_read rootdisk "none" -done - -[ -b "/dev/$rootdisk" ] || exit 0 - -echon "Do you want use *all* of $rootdisk for Alpine? (y/n) [n] " -default_read useall "n" -case "$useall" in - [Yy]*) useall="yes";; -esac - -if [ "x$useall" != "xyes" ]; then - echo "Only 'use all' option is available at the moment. Sorry" - exit 1 -fi - -useall diff --git a/setup-disk.in b/setup-disk.in new file mode 100644 index 0000000..b7d8323 --- /dev/null +++ b/setup-disk.in @@ -0,0 +1,102 @@ +#!/bin/sh + +PREFIX= +. "$PREFIX/lib/libalpine.sh" + + +in_list() { + local i="$1" + shift + while [ $# -gt 0 ]; do + [ "$i" = "$1" ] && return 0 + shift + done + return 1 +} + +useall() { + local i size + echo "Creating root partition..." + apk_add -q parted e2fsprogs + # erase all partitions + for i in $(parted /dev/$rootdisk print | awk '$1 ~ /[0-9]+/ {print $1}'); do + parted /dev/$rootdisk rm $i >/dev/null + done + # create new partition + size=$(parted /dev/$rootdisk print | awk '/^Disk / {print $3}') + parted /dev/$rootdisk mkpart primary 0 $size >/dev/null + parted /dev/$rootdisk set 1 boot on >/dev/null + + # create device node if not exist + mdev -s + rootdev=/dev/${rootdisk}1 + + mkfs.ext3 -q $rootdev + # we are done with parted and dont want it in the lbu package + apk del -q parted e2fsprogs + + mount -t ext3 $rootdev /mnt || return 1 + + echon "Installing system on $rootdev: " + lbu package - | tar -C /mnt -zx + apk add -q --progress --root /mnt $(cat /mnt/var/lib/apk/world) \ + linux-grsec linux-grsec-mod acct mkinitfs + echo "" + # make things bootable + kernel=$(ls /mnt/lib/modules) + chroot /mnt /sbin/mkinitfs -F "ata base bootchart cdrom ext3 ide scsi usb" $kernel + + # create an extlinux.conf + sed '/append initrd/d' /media/*/syslinux.cfg > /mnt/boot/extlinux.conf + echo -e "\tappend initrd=/boot/grsec.gz root=$rootdev modules=ext3 quiet" >> /mnt/boot/extlinux.conf + + # fix the fstab + echo -e "$rootdev\t/\t\text3\tdefaults\t1 1" >> /mnt/etc/fstab + + # install extlinux + apk add -q syslinux + extlinux -i /mnt/boot + umount /mnt + + # fix mbr + dd if=/usr/share/syslinux/mbr.bin of=/dev/$rootdisk + echo "" + echo "Installation is done. Please reboot." + apk del -q syslinux + +} + +usbdisk=$(readlink /dev/usbdisk) +disks= +cd /dev +for i in sd[a-z] hd[a-z]; do + case "$usbdisk" in + $i[0-9]*);; + *) [ -b "$i" ] && disks="$disks $i";; + esac +done + +# no disks so lets exit quietly. +[ -z "$disks" ] && exit 0 + +rootdisk= +while ! in_list "$rootdisk" $disks "none" "abort"; do + echo "Available disks are: $disks" + echon "Which one is the root disk? (or none) [none] " + default_read rootdisk "none" +done + +[ -b "/dev/$rootdisk" ] || exit 0 + +echon "Do you want use *all* of $rootdisk for Alpine? (y/n) [n] " +default_read useall "n" +case "$useall" in + [Yy]*) useall="yes";; +esac + +if [ "x$useall" != "xyes" ]; then + echo "Only 'use all' option is available at the moment. Sorry" + exit 1 +fi + +useall diff --git a/setup-dns b/setup-dns deleted file mode 100755 index fd6b04e..0000000 --- a/setup-dns +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -PREFIX= -. "$PREFIX/lib/libalpine.sh" - -conf="$ROOT/etc/resolv.conf" -if [ -f "$conf" ] ; then - domain=`awk '/^domain/ {print $2}' $conf` - dns=`awk '/^nameserver/ {print $2}' $conf` -fi - -echon "DNS domain name? (e.g 'bar.com') [$domain] " -default_read domain $domain -echon "DNS nameserver(s)? [" -for i in $dns ; do - echon "$i " -done -echon "] " -default_read dns "$dns" - -echo "search $domain" > $conf -for i in $dns ; do - echo "nameserver $i" >> $conf -done - diff --git a/setup-dns.in b/setup-dns.in new file mode 100755 index 0000000..fd6b04e --- /dev/null +++ b/setup-dns.in @@ -0,0 +1,25 @@ +#!/bin/sh + +PREFIX= +. "$PREFIX/lib/libalpine.sh" + +conf="$ROOT/etc/resolv.conf" +if [ -f "$conf" ] ; then + domain=`awk '/^domain/ {print $2}' $conf` + dns=`awk '/^nameserver/ {print $2}' $conf` +fi + +echon "DNS domain name? (e.g 'bar.com') [$domain] " +default_read domain $domain +echon "DNS nameserver(s)? [" +for i in $dns ; do + echon "$i " +done +echon "] " +default_read dns "$dns" + +echo "search $domain" > $conf +for i in $dns ; do + echo "nameserver $i" >> $conf +done + diff --git a/setup-hostname b/setup-hostname deleted file mode 100755 index b1c2379..0000000 --- a/setup-hostname +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -PROGRAM=setup-hostname -PREFIX= - -. $PREFIX/lib/libalpine.sh - -HOST=`hostname` -echon "Enter system hostname (short form, e.g. 'foo') [$HOST]: " -default_read HOST `hostname` - -mkdir -p "$ROOT/etc" -echo "$HOST" > "$ROOT/etc/hostname" - diff --git a/setup-hostname.in b/setup-hostname.in new file mode 100755 index 0000000..b1c2379 --- /dev/null +++ b/setup-hostname.in @@ -0,0 +1,14 @@ +#!/bin/sh + +PROGRAM=setup-hostname +PREFIX= + +. $PREFIX/lib/libalpine.sh + +HOST=`hostname` +echon "Enter system hostname (short form, e.g. 'foo') [$HOST]: " +default_read HOST `hostname` + +mkdir -p "$ROOT/etc" +echo "$HOST" > "$ROOT/etc/hostname" + diff --git a/setup-interfaces b/setup-interfaces deleted file mode 100755 index cfb4ad0..0000000 --- a/setup-interfaces +++ /dev/null @@ -1,136 +0,0 @@ -#!/bin/sh - -PROGRAM=setup-interfaces -PREFIX= - -. $PREFIX/lib/libalpine.sh - - -detect_interfaces() { - ip addr | grep -v ' lo:' | awk -F : '/^[0-9]*:/ { print $2}' -} - -get_first_unconfigured() { - ls *.noconf 2>/dev/null | head -n 1 | sed 's/.noconf//' -} - -get_default_addr() { - # check if dhcpcd is running - if pidof dhcpcd > /dev/null && [ -f "$ROOT/var/lib/dhcpc/dhcpcd-$1.info" ]; then - echo dhcp - else - ip addr show $1 | awk '/inet / {print $2}' | head -n 1 | sed 's:/.*::' - fi -} - -get_default_mask() { - if [ "$1" ] ; then - ipcalc -m $1 | sed 's/.*=//' - else - echo "255.255.255.0" - fi -} - -get_default_gateway() { - ip route show dev $1 | awk '/^default/ {print $3}' -} - - -config_iface() { - local iface=$1 - local address - local netmask - local gateway - while invalid_ip $address ; do - address=`get_default_addr $iface` - echon "Ip address for $iface? (or 'dhcp') [$address] " - default_read address $address - [ "$address" = "abort" ] && return - if [ "$address" = "dhcp" ] ; then - HAS_DHCP=yes - echo "type=dhcp" > $iface.conf - rm $iface.noconf - return - fi - done - - while invalid_ip $netmask ; do - netmask=`get_default_mask $address` - echon "Netmask? [$netmask] " - default_read netmask "$netmask" - [ "$netmask" = "abort" ] && return - done - - while invalid_ip $gateway ; do - gateway=`get_default_gateway $iface` - [ -z "$gateway" ] && gateway=none - echon "Gateway? (or 'none') [$gateway] " - default_read gateway $gateway - [ "$gateway" = "abort" ] && return - [ "$gateway" = "none" ] && gateway="" - [ -z "$gateway" ] && break - done - - echo "type=static" > $iface.conf - echo "address=$address" >> $iface.conf - echo "netmask=$netmask" >> $iface.conf - echo "gateway=$gateway" >> $iface.conf - - rm $iface.noconf -} - -init_tmpdir TMP - -cd $TMP -for i in $(detect_interfaces); do - touch $i.noconf -done - - -while ls *.noconf > /dev/null 2>&1 ; do - echon "Available interfaces are:" - for i in *.noconf; do - echon " `basename $i .noconf`" - done - echo "." - - firstif=`get_first_unconfigured` - echon "Which one do you want to initialize? (or 'done') [$firstif] " - default_read iface "$firstif" - - [ "$iface" = "done" ] && break - [ -f $iface.noconf ] || continue - config_iface $iface -done - -echo "type=loopback" > lo.conf -echo "" > interface -for i in *.conf ; do - iface=`basename $i .conf` - . ./$i - echo "" >> interfaces - echo "auto $iface" >> interfaces - echo "iface $iface inet $type" >> interfaces - [ "$type" = "static" ] || continue - echo " address $address" >> interfaces - echo " netmask $netmask" >> interfaces - [ "$gateway" ] && echo " gateway $gateway" >> interfaces -done - -while [ "$answer" != "yes" ] && [ "$answer" != "no" ] ; do - echon "Do you want to do any manual network configuration? [no] " - default_read answer no -done - -if [ "$answer" = "yes" ]; then - [ -z "$EDITOR" ] && EDITOR=nano - case $EDITOR in - nano) pkg_inst nano;; - vim) pkg_inst vim;; - esac - $EDITOR interfaces -fi - -mkdir -p $ROOT/etc/network -cp interfaces $ROOT/etc/network/ - diff --git a/setup-interfaces.in b/setup-interfaces.in new file mode 100755 index 0000000..cfb4ad0 --- /dev/null +++ b/setup-interfaces.in @@ -0,0 +1,136 @@ +#!/bin/sh + +PROGRAM=setup-interfaces +PREFIX= + +. $PREFIX/lib/libalpine.sh + + +detect_interfaces() { + ip addr | grep -v ' lo:' | awk -F : '/^[0-9]*:/ { print $2}' +} + +get_first_unconfigured() { + ls *.noconf 2>/dev/null | head -n 1 | sed 's/.noconf//' +} + +get_default_addr() { + # check if dhcpcd is running + if pidof dhcpcd > /dev/null && [ -f "$ROOT/var/lib/dhcpc/dhcpcd-$1.info" ]; then + echo dhcp + else + ip addr show $1 | awk '/inet / {print $2}' | head -n 1 | sed 's:/.*::' + fi +} + +get_default_mask() { + if [ "$1" ] ; then + ipcalc -m $1 | sed 's/.*=//' + else + echo "255.255.255.0" + fi +} + +get_default_gateway() { + ip route show dev $1 | awk '/^default/ {print $3}' +} + + +config_iface() { + local iface=$1 + local address + local netmask + local gateway + while invalid_ip $address ; do + address=`get_default_addr $iface` + echon "Ip address for $iface? (or 'dhcp') [$address] " + default_read address $address + [ "$address" = "abort" ] && return + if [ "$address" = "dhcp" ] ; then + HAS_DHCP=yes + echo "type=dhcp" > $iface.conf + rm $iface.noconf + return + fi + done + + while invalid_ip $netmask ; do + netmask=`get_default_mask $address` + echon "Netmask? [$netmask] " + default_read netmask "$netmask" + [ "$netmask" = "abort" ] && return + done + + while invalid_ip $gateway ; do + gateway=`get_default_gateway $iface` + [ -z "$gateway" ] && gateway=none + echon "Gateway? (or 'none') [$gateway] " + default_read gateway $gateway + [ "$gateway" = "abort" ] && return + [ "$gateway" = "none" ] && gateway="" + [ -z "$gateway" ] && break + done + + echo "type=static" > $iface.conf + echo "address=$address" >> $iface.conf + echo "netmask=$netmask" >> $iface.conf + echo "gateway=$gateway" >> $iface.conf + + rm $iface.noconf +} + +init_tmpdir TMP + +cd $TMP +for i in $(detect_interfaces); do + touch $i.noconf +done + + +while ls *.noconf > /dev/null 2>&1 ; do + echon "Available interfaces are:" + for i in *.noconf; do + echon " `basename $i .noconf`" + done + echo "." + + firstif=`get_first_unconfigured` + echon "Which one do you want to initialize? (or 'done') [$firstif] " + default_read iface "$firstif" + + [ "$iface" = "done" ] && break + [ -f $iface.noconf ] || continue + config_iface $iface +done + +echo "type=loopback" > lo.conf +echo "" > interface +for i in *.conf ; do + iface=`basename $i .conf` + . ./$i + echo "" >> interfaces + echo "auto $iface" >> interfaces + echo "iface $iface inet $type" >> interfaces + [ "$type" = "static" ] || continue + echo " address $address" >> interfaces + echo " netmask $netmask" >> interfaces + [ "$gateway" ] && echo " gateway $gateway" >> interfaces +done + +while [ "$answer" != "yes" ] && [ "$answer" != "no" ] ; do + echon "Do you want to do any manual network configuration? [no] " + default_read answer no +done + +if [ "$answer" = "yes" ]; then + [ -z "$EDITOR" ] && EDITOR=nano + case $EDITOR in + nano) pkg_inst nano;; + vim) pkg_inst vim;; + esac + $EDITOR interfaces +fi + +mkdir -p $ROOT/etc/network +cp interfaces $ROOT/etc/network/ + diff --git a/setup-keymap b/setup-keymap deleted file mode 100644 index 5f53dc1..0000000 --- a/setup-keymap +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -PREFIX= -. $PREFIX/lib/libalpine.sh - -MAPDIR="$ROOT/usr/share/bkeymaps" - -if [ -f "$ROOT/etc/conf.d/keymaps" ]; then - . "$ROOT/etc/conf.d/keymaps" - variant=$(basename $KEYMAP .bmap.gz) -fi - - -show_keymaps() { - local opwd="$PWD" - cd "$ROOT/usr/share/bkeymaps" - ls --color=never - cd "$opwd" -} - -select_layout() { - while true; do - if [ -z "$layout" ]; then - layout=none - fi - echo "Available keyboard layouts:" - show_keymaps - echon "Select keyboard layout [$layout]: " - default_read layout "$layout" - if [ "$layout" = "abort" ] || [ "$layout" = "none" ] ; then - goodbye 0 - elif [ -d "$MAPDIR/$layout" ] ; then - return 0 - fi - done -} - -setup_mapfile() { - local name=$(basename $1) - local conf="$ROOT/etc/conf.d/keymaps" - mkdir -p "$ROOT/etc/keymap" - mkdir -p "$ROOT/etc/conf.d/" - if gzip -9 -c "$1" > "$ROOT/etc/keymap/$name.gz" ; then - [ -f "$conf" ] && sed -i '/^KEYMAP=/d' "$conf" - echo "KEYMAP=/etc/keymap/$name.gz" >> "$conf" - # we actually load the keymap now - zcat /etc/keymap/$name.gz | loadkmap - rc-update add keymaps boot - goodbye 0 - fi -} - -select_variant() { - while true; do - echon "Available variants: " - for i in $(ls $MAPDIR/$layout) ; do - echon "$(basename $i .bmap) " - done - echo "" - if [ ! -f "$MAPDIR/$layout/$variant.bmap" ] ; then - variant="" - fi - echon "Select variant [$variant]: " - default_read variant "$variant" - if [ "$variant" = "abort" ] || [ "$variant" = "none" ]; then - break; - fi - if [ -f "$MAPDIR/$layout/$variant.bmap" ]; then - setup_mapfile "$MAPDIR/$layout/$variant.bmap" - fi - done -} - -goodbye() { - if [ $was_installed -ne 0 ]; then - pkg_deinst bkeymaps - fi - exit $1 -} - -apk_info -e bkeymaps -was_installed=$? - -pkg_inst bkeymaps - -deflayout="$1" -while true; do - - if [ -n "$deflayout" ]; then - layout="$deflayout" - unset deflayout - else - select_layout - fi - - # if there is only one variant, just pick it - count=$(ls $MAPDIR/$layout | wc -l) - if [ $count -eq 1 ]; then - setup_mapfile "$MAPDIR/$layout/$(ls $MAPDIR/$layout)" - continue - fi - - select_variant -done diff --git a/setup-keymap.in b/setup-keymap.in new file mode 100644 index 0000000..5f53dc1 --- /dev/null +++ b/setup-keymap.in @@ -0,0 +1,104 @@ +#!/bin/sh + +PREFIX= +. $PREFIX/lib/libalpine.sh + +MAPDIR="$ROOT/usr/share/bkeymaps" + +if [ -f "$ROOT/etc/conf.d/keymaps" ]; then + . "$ROOT/etc/conf.d/keymaps" + variant=$(basename $KEYMAP .bmap.gz) +fi + + +show_keymaps() { + local opwd="$PWD" + cd "$ROOT/usr/share/bkeymaps" + ls --color=never + cd "$opwd" +} + +select_layout() { + while true; do + if [ -z "$layout" ]; then + layout=none + fi + echo "Available keyboard layouts:" + show_keymaps + echon "Select keyboard layout [$layout]: " + default_read layout "$layout" + if [ "$layout" = "abort" ] || [ "$layout" = "none" ] ; then + goodbye 0 + elif [ -d "$MAPDIR/$layout" ] ; then + return 0 + fi + done +} + +setup_mapfile() { + local name=$(basename $1) + local conf="$ROOT/etc/conf.d/keymaps" + mkdir -p "$ROOT/etc/keymap" + mkdir -p "$ROOT/etc/conf.d/" + if gzip -9 -c "$1" > "$ROOT/etc/keymap/$name.gz" ; then + [ -f "$conf" ] && sed -i '/^KEYMAP=/d' "$conf" + echo "KEYMAP=/etc/keymap/$name.gz" >> "$conf" + # we actually load the keymap now + zcat /etc/keymap/$name.gz | loadkmap + rc-update add keymaps boot + goodbye 0 + fi +} + +select_variant() { + while true; do + echon "Available variants: " + for i in $(ls $MAPDIR/$layout) ; do + echon "$(basename $i .bmap) " + done + echo "" + if [ ! -f "$MAPDIR/$layout/$variant.bmap" ] ; then + variant="" + fi + echon "Select variant [$variant]: " + default_read variant "$variant" + if [ "$variant" = "abort" ] || [ "$variant" = "none" ]; then + break; + fi + if [ -f "$MAPDIR/$layout/$variant.bmap" ]; then + setup_mapfile "$MAPDIR/$layout/$variant.bmap" + fi + done +} + +goodbye() { + if [ $was_installed -ne 0 ]; then + pkg_deinst bkeymaps + fi + exit $1 +} + +apk_info -e bkeymaps +was_installed=$? + +pkg_inst bkeymaps + +deflayout="$1" +while true; do + + if [ -n "$deflayout" ]; then + layout="$deflayout" + unset deflayout + else + select_layout + fi + + # if there is only one variant, just pick it + count=$(ls $MAPDIR/$layout | wc -l) + if [ $count -eq 1 ]; then + setup_mapfile "$MAPDIR/$layout/$(ls $MAPDIR/$layout)" + continue + fi + + select_variant +done diff --git a/setup-mta b/setup-mta deleted file mode 100755 index 03af6bc..0000000 --- a/setup-mta +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh - -PREFIX= -. "$PREFIX/lib/libalpine.sh" - -conf="$ROOT/etc/ssmtp/ssmtp.conf" - -cfgval() { - awk -F= "/^$1/ {print \$2}" $conf 2>/dev/null -} - -setcfg() { - local key=$1 - local value=$2 - sed -i "s/^\\(\\#\\)*$key=.*/$key=$value/" "$conf" - if ! grep "^$key=" "$conf" >/dev/null ; then - echo "$key=$value" >> "$conf" - fi -} - -if [ -f "$conf" ] ; then - mailhub=$(cfgval mailhub) -fi -domain=$(hostname -d $hostname 2>/dev/null) -if [ -z "$mailhub" ] ;then - if [ -n "$domain" ] ; then - mailhub="smtp.$domain" - else - mailhub=smtp - fi -fi - -res= - -while [ "$res" != "221" ]; do - echon "Outgoing mail server? (e.g 'smtp.isp.com') [$mailhub] " - default_read mailhub $mailhub - echon "Test connection? (y/n) [y] " - default_read testconn "y" - case "$testconn" in - [Nn]*) break;; - esac - res=$(echo -e "quit\r\n" | nc $mailhub 25 | awk '/^221/ {print $1}') - [ "x$res" = "x221" ] && echo "Connection to $mailhub is ok." -done - -apk_add ssmtp - -setcfg mailhub $mailhub -setcfg FromLineOverride YES - diff --git a/setup-mta.in b/setup-mta.in new file mode 100755 index 0000000..03af6bc --- /dev/null +++ b/setup-mta.in @@ -0,0 +1,51 @@ +#!/bin/sh + +PREFIX= +. "$PREFIX/lib/libalpine.sh" + +conf="$ROOT/etc/ssmtp/ssmtp.conf" + +cfgval() { + awk -F= "/^$1/ {print \$2}" $conf 2>/dev/null +} + +setcfg() { + local key=$1 + local value=$2 + sed -i "s/^\\(\\#\\)*$key=.*/$key=$value/" "$conf" + if ! grep "^$key=" "$conf" >/dev/null ; then + echo "$key=$value" >> "$conf" + fi +} + +if [ -f "$conf" ] ; then + mailhub=$(cfgval mailhub) +fi +domain=$(hostname -d $hostname 2>/dev/null) +if [ -z "$mailhub" ] ;then + if [ -n "$domain" ] ; then + mailhub="smtp.$domain" + else + mailhub=smtp + fi +fi + +res= + +while [ "$res" != "221" ]; do + echon "Outgoing mail server? (e.g 'smtp.isp.com') [$mailhub] " + default_read mailhub $mailhub + echon "Test connection? (y/n) [y] " + default_read testconn "y" + case "$testconn" in + [Nn]*) break;; + esac + res=$(echo -e "quit\r\n" | nc $mailhub 25 | awk '/^221/ {print $1}') + [ "x$res" = "x221" ] && echo "Connection to $mailhub is ok." +done + +apk_add ssmtp + +setcfg mailhub $mailhub +setcfg FromLineOverride YES + diff --git a/setup-sendbug b/setup-sendbug deleted file mode 100755 index 9ce94d8..0000000 --- a/setup-sendbug +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -PREFIX= -. "$PREFIX/lib/libalpine.sh" - -conf="$ROOT/etc/sendbug/sendbug.conf" - -cfgval() { - awk -F= "/^$1/ {print \$2}" "$ROOT/etc/ssmtp/ssmtp.conf" 2>/dev/null -} - -email=$(awk -F= '/^mailfrom/ {print $2}' "$conf" 2>/dev/null) - -if [ -z "$email" ] ; then - hostname=$(cfgval hostname) - if [ -z "$hostname" ]; then - hostname=$(hostname -f 2>/dev/null || cat /etc/hostname) - fi -else - hostname=$(hostname -f 2>/dev/null || cat /etc/hostname) -fi -domain=$(hostname -d $hostname 2>/dev/null) -if [ -n "$hostname" -a -z "$email" ] ; then - email=$(whoami)@$hostname -fi - -echon "Sender email address for problem reports? [$email] " -default_read email $email - -if grep ^mailfrom "$conf" > /dev/null 2>&1; then - sed -i "s/^mailfrom.*/mailfrom=$email/" "$conf" -else - mkdir -p $(dirname "$conf") - echo "mailfrom=$email" >> "$conf" -fi - -setup-mta - -echo "" -echo "Please run 'sendbug' to submit problem reports" - diff --git a/setup-sendbug.in b/setup-sendbug.in new file mode 100755 index 0000000..9ce94d8 --- /dev/null +++ b/setup-sendbug.in @@ -0,0 +1,41 @@ +#!/bin/sh + +PREFIX= +. "$PREFIX/lib/libalpine.sh" + +conf="$ROOT/etc/sendbug/sendbug.conf" + +cfgval() { + awk -F= "/^$1/ {print \$2}" "$ROOT/etc/ssmtp/ssmtp.conf" 2>/dev/null +} + +email=$(awk -F= '/^mailfrom/ {print $2}' "$conf" 2>/dev/null) + +if [ -z "$email" ] ; then + hostname=$(cfgval hostname) + if [ -z "$hostname" ]; then + hostname=$(hostname -f 2>/dev/null || cat /etc/hostname) + fi +else + hostname=$(hostname -f 2>/dev/null || cat /etc/hostname) +fi +domain=$(hostname -d $hostname 2>/dev/null) +if [ -n "$hostname" -a -z "$email" ] ; then + email=$(whoami)@$hostname +fi + +echon "Sender email address for problem reports? [$email] " +default_read email $email + +if grep ^mailfrom "$conf" > /dev/null 2>&1; then + sed -i "s/^mailfrom.*/mailfrom=$email/" "$conf" +else + mkdir -p $(dirname "$conf") + echo "mailfrom=$email" >> "$conf" +fi + +setup-mta + +echo "" +echo "Please run 'sendbug' to submit problem reports" + diff --git a/setup-webconf b/setup-webconf deleted file mode 100644 index 6a4ca84..0000000 --- a/setup-webconf +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh - -PROGRAM=setup-acf -VERSION=0.1 - -PREFIX= -. $PREFIX/lib/libalpine.sh - -usage() { - echo "$PROGRAM [-adh] [-l address] [PACKAGE...]" - exit 0; -} - -pkgs="acf-core acf-alpine-baselayout acf-apk-tools" - -while getopts "adhl:" opt ; do - case $opt in - a) pkgs=`apk_fetch -l | grep ^acf-`;; - d) pkgs="$pkgs acf-devtools";; - h) usage;; - l) address="$OPTARG";; - *) usage;; - esac -done -shift `expr $OPTIND - 1` - -while [ $# -gt 0 ]; do - pkgs="$pkgs acf-$1" - shift -done - -# install packages -apk_add mini_httpd $pkgs || exit 1 - -# setup mini_httpd and start it -mkdir -p /var/www/localhost/ -ln -s /usr/share/acf/www/ /var/www/localhost/htdocs -lbu add /var/www/localhost/htdocs - - -SSLDIR=/etc/ssl/mini_httpd -SSLCNF=$SSLDIR/mini_httpd.cnf -KEYFILE=$SSLDIR/server.key -CRTFILE=$SSLDIR/server.crt -PEMFILE=$SSLDIR/server.pem - -if [ -f $PEMFILE ]; then - echo "$PEMFILE already exist." -else - mkdir -p $SSLDIR -cat >$SSLCNF < $KEYFILE - openssl req -new -x509 -nodes -sha1 -days 3650 -key $KEYFILE \ - -config $SSLCNF > $CRTFILE - cat $KEYFILE >> $CRTFILE - rm $KEYFILE - mv $CRTFILE $PEMFILE -fi - -cat >/etc/mini_httpd.conf <> /etc/mini_httpd.conf -fi - -cat >/etc/conf.d/mini_httpd </dev/null && /etc/init.d/mini_httpd stop -rc_add -k mini_httpd -/etc/init.d/mini_httpd start - diff --git a/setup-webconf.in b/setup-webconf.in new file mode 100644 index 0000000..9e11e99 --- /dev/null +++ b/setup-webconf.in @@ -0,0 +1,98 @@ +#!/bin/sh + +PROGRAM=setup-acf +VERSION=2.0_alpha7 + +PREFIX= +. $PREFIX/lib/libalpine.sh + +usage() { + echo "$PROGRAM [-adh] [-l address] [PACKAGE...]" + exit 0; +} + +pkgs="acf-core acf-alpine-baselayout acf-apk-tools" + +while getopts "adhl:" opt ; do + case $opt in + a) pkgs=`apk_fetch -l | grep ^acf-`;; + d) pkgs="$pkgs acf-devtools";; + h) usage;; + l) address="$OPTARG";; + *) usage;; + esac +done +shift `expr $OPTIND - 1` + +while [ $# -gt 0 ]; do + pkgs="$pkgs acf-$1" + shift +done + +# install packages +apk_add mini_httpd $pkgs || exit 1 + +# setup mini_httpd and start it +mkdir -p /var/www/localhost/ +ln -s /usr/share/acf/www/ /var/www/localhost/htdocs +lbu add /var/www/localhost/htdocs + + +SSLDIR=/etc/ssl/mini_httpd +SSLCNF=$SSLDIR/mini_httpd.cnf +KEYFILE=$SSLDIR/server.key +CRTFILE=$SSLDIR/server.crt +PEMFILE=$SSLDIR/server.pem + +if [ -f $PEMFILE ]; then + echo "$PEMFILE already exist." +else + mkdir -p $SSLDIR +cat >$SSLCNF < $KEYFILE + openssl req -new -x509 -nodes -sha1 -days 3650 -key $KEYFILE \ + -config $SSLCNF > $CRTFILE + cat $KEYFILE >> $CRTFILE + rm $KEYFILE + mv $CRTFILE $PEMFILE +fi + +cat >/etc/mini_httpd.conf <> /etc/mini_httpd.conf +fi + +cat >/etc/conf.d/mini_httpd </dev/null && /etc/init.d/mini_httpd stop +rc_add -k mini_httpd +/etc/init.d/mini_httpd start + diff --git a/update-conf b/update-conf deleted file mode 100644 index 6a8ab16..0000000 --- a/update-conf +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/sh - - -PREFIX= -. $PREFIX/lib/libalpine.sh - -# set up temp dir -init_tmpdir TMPD - -LBUCACHE="$TMPD/lbucache" - -usage() { - echo "$PROGRAM $VERSION -Usage: $PROGAM [-aihl] - - -a Select all updated files. - -h Show this help. - -i Use all new init.d scripts. - -l List updated files. -" -} - - -is_modified() { - [ -f "$LBUCACHE" ] || lbu status -a | awk '{print $2}' > "$LBUCACHE" - test -n "`( echo \"$1\" ; cat \"$LBUCACHE\" ) | sort | uniq -d`" -} - - -is_initd() { - echo "$1" | grep etc/init.d/ > /dev/null -} - -while getopts "alih" opt ; do - case "$opt" in - a) aflag="-a" ;; - i) iflag="-i" ;; - l) lflag="-l" ;; - h|*) usage;; - esac -done -shift `expr $OPTIND - 1` - -for apknew in $(find "$ROOT/etc" -name '*.apk-new') ; do - p="${apknew%.apk-new}" - f="${p#${ROOT}/}" - unset choice - - if [ "$lflag" ] ; then - - # just list the file - if [ "$aflag" ] || is_modified "$f" ; then - echo "$p" - fi - - elif [ "$aflag" ] || is_modified "$f" ; then - if [ "$iflag" ] && is_initd "$f" ; then - echo "Autoupdating $p" - mv "$apknew" "$p" - continue - fi - - diff -u "$p" "$apknew" - - # ask user what to do with the file - while [ -z "$choice" ] ; do - echo "New $p available:" - echon "Quit, Next, Show diff, Edit new, Zap new, Use new (q/n/s/e/z/u) [s]: " - default_read choice "s" "$LBUCACHE" + test -n "`( echo \"$1\" ; cat \"$LBUCACHE\" ) | sort | uniq -d`" +} + + +is_initd() { + echo "$1" | grep etc/init.d/ > /dev/null +} + +while getopts "alih" opt ; do + case "$opt" in + a) aflag="-a" ;; + i) iflag="-i" ;; + l) lflag="-l" ;; + h|*) usage;; + esac +done +shift `expr $OPTIND - 1` + +for apknew in $(find "$ROOT/etc" -name '*.apk-new') ; do + p="${apknew%.apk-new}" + f="${p#${ROOT}/}" + unset choice + + if [ "$lflag" ] ; then + + # just list the file + if [ "$aflag" ] || is_modified "$f" ; then + echo "$p" + fi + + elif [ "$aflag" ] || is_modified "$f" ; then + if [ "$iflag" ] && is_initd "$f" ; then + echo "Autoupdating $p" + mv "$apknew" "$p" + continue + fi + + diff -u "$p" "$apknew" + + # ask user what to do with the file + while [ -z "$choice" ] ; do + echo "New $p available:" + echon "Quit, Next, Show diff, Edit new, Zap new, Use new (q/n/s/e/z/u) [s]: " + default_read choice "s"