You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							96 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							96 lines
						
					
					
						
							3.6 KiB
						
					
					
				
								#!/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"
							 | 
						|
								
							 |