diff options
-rw-r--r-- | scripts/Makefile | 19 | ||||
-rwxr-xr-x | scripts/apk_create | 195 | ||||
-rwxr-xr-x | scripts/libutil.sh | 275 |
3 files changed, 0 insertions, 489 deletions
diff --git a/scripts/Makefile b/scripts/Makefile deleted file mode 100644 index 817205b..0000000 --- a/scripts/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# Makefile - one file to rule them all, one file to bind them -# -# Copyright (C) 2007 Timo Teräs <timo.teras@iki.fi> -# All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 3 as published -# by the Free Software Foundation. See http://www.gnu.org/ for details. - -all: - -clean: - -install:: - $(INSTALLDIR) $(DESTDIR)$(SBINDIR) - $(INSTALL) apk_create $(DESTDIR)$(SBINDIR) - $(INSTALLDIR) $(DESTDIR)/lib/apk - $(INSTALL) libutil.sh $(DESTDIR)/lib/apk - diff --git a/scripts/apk_create b/scripts/apk_create deleted file mode 100755 index 6bbb9ee..0000000 --- a/scripts/apk_create +++ /dev/null @@ -1,195 +0,0 @@ -#!/bin/sh -# -# apk_create - a utility for creating software packages. -# -# Copyright (c) 2005 Natanael Copa -# -# Distributed under GPL-2 -# - -PROGRAM=apk_create - -#load the libraries -. "${APK_LIBS:=/lib/apk}/libutil.sh" -#. "$APK_LIBS/libfetch.sh" -#. "$APK_LIBS/libindex.sh" -#. "$APK_LIBS/libdb.sh" -#. "$APK_LIBS/libpkgf.sh" - -# print usage and die -usage() { - echo "$PROGRAM $VERSION" - echo " -Usage: apk_create [hvS] [-a [+]arch] [-c [+]desc] [-i iscript] [-I piscript] - [-k dscript] [-K pdscript] [-l [+]license] [-m metadir] [-o owners] - [-p package] [-P [+]pkgs] [-s srcdir] [-u uscript] [-U puscript] - [-x excludepattern] [-X excludefile ] [-w [+]uri] pkg-filename - -Options: - -a Read package architecture from arch or use the argument itself, if - preceded with an '+'. - -c Read package description from desc or use the argument itself, if - preceded with an '+'. - -f Use fakeroot when creating the package. - -h Show help and exit. - -i Use iscript as pre-install script. - -I Use piscript as post-install script. - -k Use dscript as deinstall script. - -K Use pdscript as post-deinstall script. - -l Read package license from license or use the argument itself, if - preceded with an '+'. - -m Use all metafiles found in metadir. - -o Use file as OWNERS file. - -p Use package as source in addition to or instead of source dir. - -P Read space separated dependencies from pkgs or use the argument itself, - if preceded with an '+'. - -s Set source directory to srcdir. - -S Strip ELF files with sstrip. - -T Include files listed in includefile. - -u Use uscript as pre-update script. - -U Use puscript as post-upgrade script. - -v Turn on verbose output. - -w Read webpage URI from uri or use the argument itself. if preceded - with an '+'. - -x Exclude files matching excludepattern. - -X Exclude files listed in excludefile. - " - exit 1 -} - -# if $1 start with a '+', strip the '+' and echo the reset -# otherwise read contents from file $1 -get_arg_or_file() { - local tmp - # we can do this with awk - # but we want it more readable... - # echo "$1" | awk ' - # /^\+/ { print substr($0, 2)} - # /^[^\+]/ { readline < $0 ; print}' - if echo "$1" | grep '^+' > /dev/null; then - echo "$1" | sed 's/^\+//' - return 0 - fi - cat "$1" || die "Could not read file '$1'" -} - -#parse args -unset vflag - - -while getopts "a:c:fhi:I:k:K:l:m:o:p:P:Ss:T:u:U:vX:x:w:" opt ; do - case "$opt" in - a) ARCH=`get_arg_or_file "$OPTARG"`;; - h) usage;; - c) DESC=`get_arg_or_file "$OPTARG"`;; - i) PRE_INSTALL="$OPTARG";; - I) POST_INSTALL="$OPTARG";; - k) DSCRIPT="$OPTARG";; - K) POST_DEINSTALL="$OPTARG";; - l) LICENSE=`get_arg_or_file "$OPTARG"`;; - m) METADIR="$OPTARG";; - o) OWNERS="$OPTARG";; - p) case "$OPTARG" in - *.tar.bz) UNTAR="tar -zxf \"$OPTARG\"";; - *.tar.bz2) UNTAR="tar -jxf \"$OPTARG\"";; - *) die "Only .tar.gz and .tar.bz2 are supported";; - esac;; - P) DEPEND=`get_arg_or_file "$OPTARG"`;; - s) SRCDIR="$OPTARG";; - S) SSTRIP="-S";; - T) INCLUDE_FROM="$INCLUDE_FROM --include-from=$OPTARG";; - u) PRE_UPDATE="$OPTARG";; - U) POST_UPDATE="$OPTARG";; - v) VERBOSE="-v" ;; - x) EXCLUDE="$EXCLUDE --exclude=$OPTARG";; - X) EXCLUDE_FROM="$EXCLUDE_FROM --exclude-from=$OPTARG";; - w) WWW=`get_arg_or_file "$OPTARG"`;; - \?) usage;; - esac -done -shift `expr $OPTIND - 1` - -# if -s and -p is not specified, use current dir as default. -[ -z "$SRCDIR$UNTAR" ] && SRCDIR="." - -[ $# -ne 1 ] && usage - -which rsync > /dev/null || die "This program depends on rsync." - -if [ "`whoami`" != "root" ] ; then - SUDO=sudo -fi - -# find absolute path to package -case "$1" in - /*) PKGVF="$1";; - *) PKGVF="$PWD/$1";; -esac - -PV="`basename \"$PKGVF\" .apk`" -echo "$PV" | grep -- '-[0-9].*' > /dev/null || die "Package name $PKGVF does not have any version." -P="`echo $PV | sed 's/-[0-9].*//'`" -V="`echo $PV | sed 's/^'$P'-//'`" - -# clean temp dir -tmp="$APK_TMPDIR/$PV" -rm -rf "$tmp" - -# copy files -if [ "$UNTAR" ] ; then - $UNTAR $INCLUDE_FROM $EXCLUDE $EXCLUDE_FROM -C "$tmp" || \ - die "Failed to unpack" -fi - -if [ "$SRCDIR" ] ; then - rsync -ra $INCLUDE_FROM $EXCLUDE $EXCLUDE_FROM "$SRCDIR/." "$tmp" ||\ - die "Failed to copy files from '$SRCDIR/.' to '$tmp'". -fi - -# run sstrip -[ "$SSTRIP" ] && find "$tmp" -type f \ - | xargs -n1 file \ - | grep ELF \ - | grep -v relocatable \ - | cut -d : -f 1 \ - | while read f ; do - $SUDO sstrip "$f" - done - -# create meta data -dbdir=`beautify_path "$tmp/$APK_DBDIR"` -db="$dbdir/$PV" -mkdir -p "$db" - -if [ "$METADIR" ] ; then - cp $METADIR/* "$db/" || die "Failed to copy files from '$METADIR'" -fi -[ "$ARCH" ] && echo "$ARCH" > "$db/ARCH" -[ "$DEPEND" ] && echo "$DEPEND" > "$db/DEPEND" -[ "$DESC" ] && echo "$DESC" > "$db/DESC" -[ "$LICENSE" ] && echo "$LICENSE" > "$db/LICENSE" -[ "$WWW" ] && echo "$WWW" > "$db/WWW" - -[ "$PRE_INSTALL" ] && cp -a "$PRE_INSTALL" "$db/pre-install" -[ "$POST_INSTALL" ] && cp -a "$POST_INSTALL" "$db/post-install" -[ "$DSCRIPT" ] && cp -a "$DSCRIPT" "$db/pre-deinstall" -[ "$POST_DEINSTALL" ] && cp -a "$POST_DEINSTALL" "$db/post-deinstall" -[ "$PRE_UPDATE" ] && cp -a "$PRE_UPDATE" "$db/pre-update" -[ "$POST_UPDATE" ] && cp -a "$POST_UPDATE" "$db/post-update" -[ "$OWNERS" ] && cp -a "$OWNERS" "$db/OWNERS" - -# check if var/db/apk contains more than it should -[ `ls "$dbdir" | wc -l` -gt 1 ] && die "$APK_DBDIR should only contain the directory $PV." - -# check if arch, desc, license and www info is there -[ -f "$db/ARCH" ] || die "Architecture not set. Use -a." -[ -f "$db/DESC" ] || die "Description not set. Use -c." -[ -f "$db/LICENSE" ] || die "License not set. Use -l." -[ -f "$db/WWW" ] || eecho "Warning: Homepage not set (use -w)." - -# now, lets create the package -cd "$tmp" -tar --owner=root --group=root $VERBOSE -zcf "$PKGVF" * - -# cleanup -rm -rf "$tmp" diff --git a/scripts/libutil.sh b/scripts/libutil.sh deleted file mode 100755 index 229b275..0000000 --- a/scripts/libutil.sh +++ /dev/null @@ -1,275 +0,0 @@ -#!/bin/sh - -# libutil.sh - Utility functions -# -# Copyright(c) 2005 Natanael Copa -# -# Distributed under GPL-2 -# - -VERSION=0.13.1 - -# echo to stderr -eecho() { - echo $* >&2 -} - -# echo to stderr and die -die() { - echo -n "$PROGRAM: " >&2 - eecho $* - exit 1 -} - -die_unless_force() { - echo "$PROGRAM: $*" >&2 - [ -z "$FORCE" ] && exit 1 -} - -# remove double / and ./ in pathnames -beautify_path() { - echo "$1" | sed 's:/^[^\.]\./::g; s:/\{2,\}:/:g; s:/\./:/:g' -} - -# check if parameter is an uri or not -is_uri() { - echo "$1" | grep "^[a-z][a-z0-9+]*:/" >/dev/null -} - -# check if parameter is an apk package (contains a / or .apk at the end) -is_apk() { - #echo "$1" | grep '/' >/dev/null && return 0 - [ -z "${1%%*/*}" ] && return 0 - - #echo "$1" | grep ".apk$" >/dev/null - [ -z "${1%%*.apk}" ] -} - -# check if path start with a '/' -is_absolute_path() { - test -z "${1##/*}" -} - -# if path dont start with '/' then append $PWD -get_absolute_path() { - if is_absolute_path "$1" ; then - echo "$1" - else - beautify_path "$PWD/$1" - fi -} - -# check if parameter has version number (i.e. if it is an pkgv or pkg) -has_version() { - echo "$1" | grep -- '-[0-9].*' >/dev/null -} - -# check if parameter has some kind of wildcard -has_wildcard() { - echo "$1" | grep "[\*\?\[]" >/dev/null -} - -# get the scheme for an uri (echo everything before the first ':') -get_uri_scheme() { - echo "$1" | cut -d : -f 1 -} - -# remove version number from package name -rm_ver() { - echo "$1" | sed 's/\(.*\)-[0-9].*/\1/' -} - -# get version number from package name or file -get_ver() { - basename "$1" .apk | sed 's/.*-\([0-9].*\)/\1/' -} - -# initialize a temp directory -# $1 contains the variable name for the directory -# the directory will automatically be deleted upon exit -init_tmpdir() { - local omask=`umask` - local __tmpd="$APK_TMPDIR/$PROGRAM-${$}-`date +%s`" - umask 077 || die "umask" - mkdir "$__tmpd" || exit 1 - trap "rm -fr \"$__tmpd\"; exit" 0 - umask $omask - eval "$1=\"$__tmpd\"" -} - -# remove files and empty dirs in specified list. -# also remove APK_LBUFILES from default.tdb -# environment: -# ROOT: all files are relative this path -# VERBOSE: echo filenames to stdout -# DRYRUN: don't delete anything, just simulate -my_rm() { - rm "$1" 2>/dev/null || busybox rm "$1" -} - -list_uninstall() { - local f p - local root=${ROOT:-"/"} - sort -r "$1" | while read f ; do - p="`beautify_path \"$root/$f\"`" - if [ "$DRYRUN" ] ; then - [ "$VERBOSE" ] && echo "$p" - else - if [ -d "$p" ] ; then - # try to remove dir, but ignore errors. It might - if rmdir "$p" 2>/dev/null ; then - [ "$VERBOSE" ] && echo "$p" - [ "$2" ] && echo "$f" >> "$2" - fi - else - my_rm "$p" && [ "$VERBOSE" ] && echo "$p" - [ "$2" ] && echo "$f" >> "$2" - fi - fi - done - return 0 -} - -# list all lines that occur in first list but not second -# the files cannot contain duplicate lines. -list_subtract() { - ( - # first we find all uniq lines - cat "$1" "$2" | sort | uniq -u - - # then we combine uniq lines with first file ... - cat "$1" - - # ...and find all duplicates. Those only exist in first file - ) | sort | uniq -d -} - -# insert an element first in APK_PATH if its not already there -insert_apk_path() { - if [ "$1" != "`echo "$APK_PATH" | cut -d\; -f1`" ] ; then - [ "$APK_PATH" ] && APK_PATH=";$APK_PATH" - APK_PATH="$1$APK_PATH" - fi -} - -lbu_filter() { - # Ok... I give up. shell is too slow. lets do it in awk. - awk 'BEGIN { - APK_LBUDIRS="'"$APK_LBUDIRS"'"; - numdirs = split(APK_LBUDIRS, lbudir, ":"); - #precalc lengths to save a few cpu cycles in loop - for (i = 1; i <= numdirs; i++) - len[i] = length(lbudir[i]); - } - - # main loop - { - for (i = 1; i <= numdirs; i++) { - if (index($0, lbudir[i]) == 1 && (len[i] == length() || substr($0, len[i] + 1, 1) == "/")) { - print $0; - } - } - }' -} - -is_lbu_file() { - # just run test - [ "$(echo "$1" | lbu_filter)" ] -} - -# assign a value to a global var, either from environment or -# from configuraion file -# usage: get_var VARIBALE_NAME DEFAULT_VALUE -get_var() { - local var - # first we check if the envvar is set - eval "var=\$$1" - if [ "$var" ] ; then - echo "$var" - elif [ -f ${APKTOOLS_CONF:="$ROOT/etc/apk.conf"} ] ; then - # then we check the conf file - var=`awk -F = '/^'$1'=/ { print $2 }' "$APKTOOLS_CONF"` - if [ "$var" ] ; then - echo "$var" - else - # else we use the default - echo "$2" - fi - else - # no conf file found use default - echo "$2" - fi -} - -########################################################## -# last_pkgf -# find the latest package in a list, return 1 if not found -last_pkgf() { - local pkgf last status - while read pkgf ; do - apk_version -q -t "$pkgf" "$last" - [ $? -eq 2 ] && last="$pkgf" - done - [ -z "$last" ] && return 1 - echo "$last" -} - -########################################################### -# dump global variables -dump_env() { - echo "ROOT=$ROOT" - echo "APKTOOLS_CONF=$APKTOOLS_CONF" - echo "APK_PATH=$APK_PATH" - echo "APK_DBDIR=$APK_DBDIR" - echo "APK_TMPDIR=$APK_TMPDIR" - echo "APK_FETCH=$APK_FETCH" - echo "APK_DATA=$APK_DATA" - echo "APK_DATALEVEL=$APK_DATALEVEL" - echo "APK_LIBS=$APK_LIBS" - echo "PACKAGES=$PACKAGES" - - echo "APKDB=$APKDB" - echo "APK_NOCOMPRESS=$APK_NOCOMPRESS" - echo "REP_DIR=$REP_DIR" - echo "REP_SCHEME=$REP_SCHEME" - echo "CACHED_INDEX=$CACHED_INDEX" -} - -############################################################################# -# init_globals sets up the global variables - -APK_PREFIX_IN_PKG="`get_var APK_PREFIX_IN_PKG ''`" - -ROOT="`get_var ROOT /`" -echo "$ROOT" | grep -v "^/" > /dev/null && ROOT="$PWD/$ROOT" - -APKTOOLS_CONF="`get_var APKTOOLS_CONF \"$(beautify_path /etc/apk/apk.conf)\"`" -APK_PATH=`get_var APK_PATH ""` -APK_DBDIR="`get_var APK_DBDIR \"$(beautify_path \"$ROOT/var/db/apk\")\"`" -APK_DBDIR_IN_PKG="`get_var APK_DBDIR_IN_PKG ${APK_PREFIX_IN_PKG}var/db/apk`" -APK_TMPDIR="`get_var \"APK_TMPDIR\" /tmp`" -APK_ADD_TMP="`get_var \"APK_ADD_TMP\" \"$ROOT/usr/tmp\"`" -APK_DATA="`get_var APK_DATA \"$(beautify_path \"$ROOT/var/lib/apk\")\"`" -APK_KEEPCACHE="`get_var APK_KEEPCACHE no`" -APK_LIBS="`get_var APK_LIBS /lib/apk`" -PACKAGES="`get_var PACKAGES \"$(beautify_path \"$ROOT/var/cache/packages\")\"`" - -APKDB="`beautify_path \"$APK_DBDIR\"`" -APK_NOCOMPRESS=`get_var APK_NOCOMPRESS ""` - -INDEX="INDEX.md5.gz" -CACHED_INDEX="$APK_DATA/$INDEX" - -APK_SUM=`get_var APK_SUM md5` -APK_MKSUM=`get_var APK_MKSUM "${APK_SUM}sum"` -APK_CHKSUM=`get_var APK_CHKSUM "${APK_SUM}sum -c"` - -APK_DEFAULT_TDB=`get_var APK_DEFAULT_TDB "$APK_DATA/default.tdb"` -SFIC=`which sfic 2>/dev/null` -APK_GZSIGN_CERT=`get_var APK_GZSIGN_KEY /etc/apk/apk.crt` - -# confdirs are a : spearate list of dirs relative $ROOT that are to be -# considered for local backups. -# for example: APK_LBUDIRS="etc:usr/local/etc" -APK_LBUDIRS=`get_var APK_LBUDIRS 'etc'` - |