#!/bin/sh -e # A hacky script to generate .t?z files using satellites. # It's a fairly simple wrapper to astronaut, that generates pkgtools packages. # This may also serve as an example on how you can wrap astronaut to package in any format. # Check whether we'll use fakeroot or not _astronaut_wrapper_fakeroot="$(command -v fakeroot || true)" [ "$_astronaut_wrapper_fakeroot" ] && _astronaut_wrapper_fakeroot='fakeroot' if [ ! "$_astronaut_wrapper_fakeroot" -a "$(id -u)" != "0" ]; then echo 'This script has to be run as root, or you need fakeroot installed.' 1>&2 exit 1 fi # Find astronaut _astronaut="$(dirname "$0")/astronaut" [ ! -f "$_astronaut" ] && _astronaut='astronaut' # Configuration dir_wrapper_pkgtools="$PWD" # Where the packages should be stored # Wrapper functions _astronaut_wrapper_pre() { # Make sure to remove the contents of the install directory before building _nuke_dir_install=true } _astronaut_wrapper_post() { # Gzip man and info pages if [ -d "$dir_install/$dir_prefix/$dir_mandir" ]; then find "$dir_install/$dir_prefix/$dir_mandir" -type f -exec gzip -9 {} \; for i in $(find "$dir_install/$dir_prefix/$dir_mandir" -type l); do ln -s "$(readlink "$i").gz" "$i.gz"; rm "$i"; done fi if [ -d "$dir_install/$dir_prefix/$dir_infodir" ]; then rm -f "$dir_install/$dir_prefix/$dir_infodir/dir" gzip -9 -r "$dir_install/$dir_prefix/$dir_infodir" fi # Strip binaries find "$dir_install" | xargs file | grep -e "executable" -e "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null | true # Generate slack-desc for proper compliance, even if it's completely redundant #mkdir -p "$dir_install/install" #cat > "$dir_install/install/slack-desc" << EOF ## HOW TO EDIT THIS FILE: ## The "handy ruler" below makes it easier to edit a package description. Line ## up the first '|' above the ':' following the base package name, and the '|' ## on the right side marks the last column you can put a character in. You must ## make exactly 11 lines for the formatting to be correct. It's also ## customary to leave one space after the ':'. #$(printf %$(printf '%s' "$_satname" | wc -c)s)|-----handy-ruler------------------------------------------------------| #$_satname: $_satname (Generated with astronautpkg) #$_satname: #$_satname: #$_satname: #$_satname: #$_satname: #$_satname: #$_satname: #$_satname: #$_satname: #$_satname: #EOF # Move configuration files to .new and install them for proper compliance. if [ -d "$dir_install/etc" ]; then mkdir -p "$dir_install/install" cat > "$dir_install/install/doinst.sh" << EOF config() { NEW="\$1" OLD="\$(dirname \$NEW)/\$(basename \$NEW .new)" # If there's no config file by that name, mv it over: if [ ! -r \$OLD ]; then mv \$NEW \$OLD elif [ "\$(cat \$OLD | md5sum)" = "\$(cat \$NEW | md5sum)" ]; then # toss the redundant copy rm \$NEW fi # Otherwise, we leave the .new copy for the admin to consider... } EOF find "$dir_install/$dir_prefix/$dir_sysconfdir" -type f -printf '%P\n' | while IFS= read file; do mv "$dir_install/$dir_prefix/$dir_sysconfdir/$file" "$dir_install/$dir_prefix/$dir_sysconfdir/$file.new" echo "config '$dir_prefix/$dir_sysconfdir/$file.new'" >> "$dir_install/install/doinst.sh" done fi # Create the package cd "$dir_install" mkdir -p "$dir_wrapper_pkgtools" PATH="$PATH:/sbin" $_astronaut_wrapper_fakeroot makepkg -l y -c n "$dir_wrapper_pkgtools/$_satname-$(echo "$version" | sed -e 's/-/_/g')-$(uname -m)-astro.txz" } . "$_astronaut"