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.
		
		
		
		
		
			
		
			
				
					
					
						
							175 lines
						
					
					
						
							6.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							175 lines
						
					
					
						
							6.6 KiB
						
					
					
				| #!/bin/sh | |
| set -eu | |
| 
 | |
| # 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 | |
| wrapper_pkgtools_dir="$PWD"  # Where the packages should be stored | |
| wrapper_pkgtools_compression='txz'  # What to compress the package with | |
| wrapper_pkgtools_build='astro'  # What to use as "generic" build number | |
| 
 | |
| # Wrapper functions | |
| _astronaut_wrapper_pre() { | |
|     # Make sure to remove the contents of the install directory before building | |
|     _astronaut_nuke_install=true | |
| 
 | |
|     # Define an option to strip the package | |
|     define_option 'strip: Strip the resulting binaries' | |
| } | |
| 
 | |
| _astronaut_wrapper_post() { | |
|     # Gzip man and info pages | |
|     if [ -d "$dir_install/$dir_prefix/$dir_man" ]; then | |
|         find "$dir_install/$dir_prefix/$dir_man" -type f -exec gzip -9 '{}' \; | |
|         for i in $(find "$dir_install/$dir_prefix/$dir_man" -type l); do ln -s "$(readlink "$i").gz" "$i.gz"; rm "$i"; done | |
|     fi | |
|     if [ -d "$dir_install/$dir_prefix/$dir_info" ]; then | |
|         rm -f "$dir_install/$dir_prefix/$dir_info/dir" | |
|         find "$dir_install/$dir_prefix/$dir_info" -type f -name '*.info' -exec gzip -9 '{}' \; | |
|     fi | |
| 
 | |
|     # Strip binaries | |
|     if option strip; then | |
|         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 | |
|     fi | |
| 
 | |
|     # 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' "$name_sat" | wc -c)s)|-----handy-ruler------------------------------------------------------| | |
| #$name_sat: $name_sat (Generated with astronautpkg) | |
| #$name_sat: | |
| #$name_sat: | |
| #$name_sat: | |
| #$name_sat: | |
| #$name_sat: | |
| #$name_sat: | |
| #$name_sat: | |
| #$name_sat: | |
| #$name_sat: | |
| #$name_sat: | |
| #EOF | |
| 
 | |
|     # Move configuration files to .new and install them for proper compliance. | |
|     if [ -d "$dir_install/$dir_prefix/$dir_sysconf" ]; 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_sysconf" -type f -printf '%P\n' | while IFS= read file; do | |
|             mv "$dir_install/$dir_prefix/$dir_sysconf/$file" "$dir_install/$dir_prefix/$dir_sysconf/$file.new" | |
|             echo "config '$dir_prefix/$dir_sysconf/$file.new'" >> "$dir_install/install/doinst.sh" | |
|         done | |
|         echo >> "$dir_install/install/doinst.sh" | |
|     fi | |
| 
 | |
|     # Update desktop database if new files were added | |
|     if [ -d "$dir_install/$dir_prefix/$dir_data/applications" ]; then | |
|         mkdir -p "$dir_install/install" | |
| cat >> "$dir_install/install/doinst.sh" << EOF | |
| if [ -x '/$dir_prefix/$dir_bin/update-desktop-database' ]; then | |
|   '/$dir_prefix/$dir_bin/update-desktop-database' -q '$dir_prefix/$dir_data/applications' >/dev/null 2>&1 | |
| fi | |
|  | |
| EOF | |
|     fi | |
| 
 | |
|     # Update mime database if new files were added | |
|     if [ -d "$dir_install/$dir_prefix/$dir_data/mime" ]; then | |
|         mkdir -p "$dir_install/install" | |
| cat >> "$dir_install/install/doinst.sh" << EOF | |
| if [ -x '/$dir_prefix/$dir_bin/update-mime-database' ]; then | |
|   '/$dir_prefix/$dir_bin/update-mime-database' '$dir_prefix/$dir_data/mime' >/dev/null 2>&1 | |
| fi | |
|  | |
| EOF | |
|     fi | |
| 
 | |
|     # Update icon cache if new files were added | |
|     if [ -d "$dir_install/$dir_prefix/$dir_data/icons/hicolor" ]; then | |
|         mkdir -p "$dir_install/install" | |
| cat >> "$dir_install/install/doinst.sh" << EOF | |
| if [ -e '$dir_prefix/$dir_data/icons/hicolor/icon-theme.cache' ]; then | |
|   if [ -x '/$dir_prefix/$dir_bin/gtk-update-icon-cache' ]; then | |
|     '/$dir_prefix/$dir_bin/gtk-update-icon-cache' -f '$dir_prefix/$dir_data/icons/hicolor' >/dev/null 2>&1 | |
|   fi | |
| fi | |
|  | |
| EOF | |
|     fi | |
| 
 | |
|     # Compile schemas if new files were added | |
|     if [ -d "$dir_install/$dir_prefix/$dir_data/glib-2.0/schemas" ]; then | |
|         mkdir -p "$dir_install/install" | |
| cat >> "$dir_install/install/doinst.sh" << EOF | |
| if [ -e '$dir_prefix/$dir_data/glib-2.0/schemas' ]; then | |
|   if [ -x '/$dir_prefix/$dir_bin/glib-compile-schemas' ]; then | |
|     '/$dir_prefix/$dir_bin/glib-compile-schemas' '$dir_prefix/$dir_data/glib-2.0/schemas' >/dev/null 2>&1 | |
|   fi | |
| fi | |
|  | |
| EOF | |
|     fi | |
| 
 | |
|     # Query gio modules if new files were added | |
|     if [ -d "$dir_install/$dir_prefix/$dir_lib/gio/modules" ]; then | |
|         mkdir -p "$dir_install/install" | |
| cat >> "$dir_install/install/doinst.sh" << EOF | |
| chroot . '/$dir_prefix/$dir_bin/gio-querymodules' '$dir_prefix/$dir_lib/gio/modules/' 1> /dev/null 2> /dev/null | |
|  | |
| EOF | |
|     fi | |
| 
 | |
|     # Install new info files if they were added | |
|     if [ -d "$dir_install/$dir_prefix/$dir_info" ]; then | |
|         mkdir -p "$dir_install/install" | |
|         echo "if [ -x /$dir_prefix/$dir_bin/install-info ]; then" >> "$dir_install/install/doinst.sh" | |
|         find "$dir_install/$dir_prefix/$dir_info" -type f -name '*.info.gz' -printf '%P\0' | while read -d '' -r file; do | |
|             echo "  chroot . '/$dir_prefix/$dir_bin/install-info' --info-dir='/$dir_prefix/$dir_info' '/$file' 2> /dev/null" >> "$dir_install/install/doinst.sh" | |
|         done | |
|         echo 'fi' >> "$dir_install/install/doinst.sh" | |
|         echo >> "$dir_install/install/doinst.sh" | |
|     fi | |
| 
 | |
|     # Create the package | |
|     cd "$dir_install" | |
|     mkdir -p "$wrapper_pkgtools_dir" | |
|     PATH="$PATH:/sbin" $_astronaut_wrapper_fakeroot makepkg -l y -c n "$wrapper_pkgtools_dir/$name_sat-$(echo "$version" | tr - _)-$(uname -m)-$wrapper_pkgtools_build.$wrapper_pkgtools_compression" | |
| } | |
| 
 | |
| . "$_astronaut"
 | |
| 
 |