diff options
-rw-r--r-- | system/sash/README | 22 | ||||
-rw-r--r-- | system/sash/doinst.sh | 7 | ||||
-rw-r--r-- | system/sash/sash-3.7-CFLAGS_i486.patch | 12 | ||||
-rw-r--r-- | system/sash/sash-3.7-CFLAGS_i686.patch | 12 | ||||
-rw-r--r-- | system/sash/sash-3.7-DESTDIR.patch | 13 | ||||
-rw-r--r-- | system/sash/sash-3.7-cmd_chattr.c.patch | 12 | ||||
-rw-r--r-- | system/sash/sash-plus-patches-3.7 | 342 | ||||
-rw-r--r-- | system/sash/sash.SlackBuild | 75 | ||||
-rw-r--r-- | system/sash/sash.info | 8 | ||||
-rw-r--r-- | system/sash/slack-desc | 19 |
10 files changed, 522 insertions, 0 deletions
diff --git a/system/sash/README b/system/sash/README new file mode 100644 index 0000000000000..27c4867a3546c --- /dev/null +++ b/system/sash/README @@ -0,0 +1,22 @@ +SASH - a stand-alone shell with many built-in commands + +The sash program is a stand-alone shell which is useful for recovering +from certain types of system failures. In particular, it was created +in order to cope with the problem of missing shared libraries or important +executables. + +Sash can execute external programs, as in any shell. There are no +restrictions on these commands, as the standard shell is used to execute +them if there are any non-wildcard meta-characters in the command. +More importantly, however, is that many of the standard system commands +are built-in to sash. + +This script applies the 'sash-plus-patches' command collection, which +adds the following commands: 'chroot' 'pivot_root' and 'losetup'. + +These functions actually provide interfaces to the respective Linux system +calls. They are specificly useful when sash is used as a shell in "initial +ramdisk" (initrd) environments. + +In addition, a simple shell variable expansion support has been added, e.g. +the variable "$(VAR)" is replaced by the content of the variable "VAR". diff --git a/system/sash/doinst.sh b/system/sash/doinst.sh new file mode 100644 index 0000000000000..e5dccd90cc022 --- /dev/null +++ b/system/sash/doinst.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# Add sash to the shells if not there +if ! grep -q "/sash$" etc/shells ; then + echo "/bin/sash" >> etc/shells +fi + diff --git a/system/sash/sash-3.7-CFLAGS_i486.patch b/system/sash/sash-3.7-CFLAGS_i486.patch new file mode 100644 index 0000000000000..2d4b14ee3566f --- /dev/null +++ b/system/sash/sash-3.7-CFLAGS_i486.patch @@ -0,0 +1,12 @@ +diff -Nur sash-3.7.orig/Makefile sash-3.7/Makefile +--- sash-3.7.orig/Makefile 2002-07-21 18:24:47.000000000 -0500 ++++ sash-3.7/Makefile 2007-08-22 15:56:15.225837097 -0500 +@@ -14,7 +14,7 @@ + MOUNT_TYPE = '"ext3"' + + +-CFLAGS = -O3 -Wall -Wmissing-prototypes \ ++CFLAGS = -O2 -march=i486 -mtune=i686 -Wall -Wmissing-prototypes \ + -DHAVE_GZIP=$(HAVE_GZIP) \ + -DHAVE_LINUX_ATTR=$(HAVE_LINUX_ATTR) \ + -DHAVE_LINUX_MOUNT=$(HAVE_LINUX_MOUNT) \ diff --git a/system/sash/sash-3.7-CFLAGS_i686.patch b/system/sash/sash-3.7-CFLAGS_i686.patch new file mode 100644 index 0000000000000..423718f372fed --- /dev/null +++ b/system/sash/sash-3.7-CFLAGS_i686.patch @@ -0,0 +1,12 @@ +diff -Nur sash-3.7.orig/Makefile sash-3.7/Makefile +--- sash-3.7.orig/Makefile 2002-07-21 18:24:47.000000000 -0500 ++++ sash-3.7/Makefile 2007-08-22 15:56:15.225837097 -0500 +@@ -14,7 +14,7 @@ + MOUNT_TYPE = '"ext3"' + + +-CFLAGS = -O3 -Wall -Wmissing-prototypes \ ++CFLAGS = -O2 -march=i686 -mtune=i686 -Wall -Wmissing-prototypes \ + -DHAVE_GZIP=$(HAVE_GZIP) \ + -DHAVE_LINUX_ATTR=$(HAVE_LINUX_ATTR) \ + -DHAVE_LINUX_MOUNT=$(HAVE_LINUX_MOUNT) \ diff --git a/system/sash/sash-3.7-DESTDIR.patch b/system/sash/sash-3.7-DESTDIR.patch new file mode 100644 index 0000000000000..ff9b438f2088e --- /dev/null +++ b/system/sash/sash-3.7-DESTDIR.patch @@ -0,0 +1,13 @@ +diff -Nur sash-3.7.orig/Makefile sash-3.7/Makefile +--- sash-3.7.orig/Makefile 2002-07-21 18:24:47.000000000 -0500 ++++ sash-3.7/Makefile 2007-08-22 15:53:41.717089132 -0500 +@@ -40,7 +40,7 @@ + rm -f $(OBJS) sash + + install: sash +- cp sash $(BINDIR)/sash +- cp sash.1 $(MANDIR)/sash.1 ++ cp sash $(DESTDIR)/$(BINDIR)/sash ++ cp sash.1 $(DESTDIR)/$(MANDIR)/sash.1 + + $(OBJS): sash.h diff --git a/system/sash/sash-3.7-cmd_chattr.c.patch b/system/sash/sash-3.7-cmd_chattr.c.patch new file mode 100644 index 0000000000000..11ee509338139 --- /dev/null +++ b/system/sash/sash-3.7-cmd_chattr.c.patch @@ -0,0 +1,12 @@ +diff -Nur sash-3.7.orig/cmd_chattr.c sash-3.7/cmd_chattr.c +--- sash-3.7.orig/cmd_chattr.c 2002-03-08 01:21:03.000000000 -0600 ++++ sash-3.7/cmd_chattr.c 2007-08-22 15:58:52.234784527 -0500 +@@ -12,7 +12,7 @@ + + #include <sys/ioctl.h> + #include <sys/types.h> +-#include <linux/ext2_fs.h> ++#include <ext2fs/ext2_fs.h> + + #include "sash.h" + diff --git a/system/sash/sash-plus-patches-3.7 b/system/sash/sash-plus-patches-3.7 new file mode 100644 index 0000000000000..77d17df90cc70 --- /dev/null +++ b/system/sash/sash-plus-patches-3.7 @@ -0,0 +1,342 @@ +diff --unified --recursive --new-file sash-3.7/Makefile sash-3.7-fb/Makefile +--- sash-3.7/Makefile 2002-07-22 01:24:47.000000000 +0200 ++++ sash-3.7-fb/Makefile 2004-07-04 10:45:45.000000000 +0200 +@@ -3,12 +3,18 @@ + # + # The HAVE_GZIP definition adds the -gzip and -gunzip commands. + # The HAVE_LINUX_ATTR definition adds the -chattr and -lsattr commands. ++# The HAVE_LINUX_CHROOT definition adds the -chroot command. ++# The HAVE_LINUX_PIVOT definition adds the -pivot_root command. ++# The HAVE_LINUX_LOSETUP definition adds the -losetup command. + # The HAVE_LINUX_MOUNT definition makes -mount and -umount work on Linux. + # The HAVE_BSD_MOUNT definition makes -mount and -umount work on BSD. + # The MOUNT_TYPE definition sets the default file system type for -mount. + # + HAVE_GZIP = 1 + HAVE_LINUX_ATTR = 1 ++HAVE_LINUX_CHROOT = 1 ++HAVE_LINUX_LOSETUP = 1 ++HAVE_LINUX_PIVOT = 1 + HAVE_LINUX_MOUNT = 1 + HAVE_BSD_MOUNT = 0 + MOUNT_TYPE = '"ext3"' +@@ -17,6 +23,9 @@ + CFLAGS = -O3 -Wall -Wmissing-prototypes \ + -DHAVE_GZIP=$(HAVE_GZIP) \ + -DHAVE_LINUX_ATTR=$(HAVE_LINUX_ATTR) \ ++ -DHAVE_LINUX_CHROOT=$(HAVE_LINUX_CHROOT) \ ++ -DHAVE_LINUX_LOSETUP=$(HAVE_LINUX_LOSETUP) \ ++ -DHAVE_LINUX_PIVOT=$(HAVE_LINUX_PIVOT) \ + -DHAVE_LINUX_MOUNT=$(HAVE_LINUX_MOUNT) \ + -DHAVE_BSD_MOUNT=$(HAVE_BSD_MOUNT) \ + -DMOUNT_TYPE=$(MOUNT_TYPE) +diff --unified --recursive --new-file sash-3.7/cmds.c sash-3.7-fb/cmds.c +--- sash-3.7/cmds.c 2002-07-22 00:28:19.000000000 +0200 ++++ sash-3.7-fb/cmds.c 2004-07-04 10:45:45.000000000 +0200 +@@ -21,6 +21,16 @@ + #include <linux/fs.h> + #endif + ++/* Need to tell loop.h what the actual dev_t type is. */ ++#undef dev_t ++#if defined(__alpha) || (defined(__sparc__) && defined(__arch64__)) ++#define dev_t unsigned int ++#else ++#define dev_t unsigned short ++#endif ++#include <linux/loop.h> ++#undef dev_t ++#define dev_t dev_t + + void + do_echo(int argc, const char ** argv) +@@ -147,6 +157,28 @@ + } + + ++#if HAVE_LINUX_PIVOT ++ ++void ++do_pivot_root(int argc, const char ** argv) ++{ ++ if (pivot_root(argv[1], argv[2]) < 0) ++ perror(""); ++} ++ ++#endif ++ ++#if HAVE_LINUX_CHROOT ++ ++void ++do_chroot(int argc, const char ** argv) ++{ ++ if (chroot(argv[1]) < 0) ++ perror(""); ++} ++ ++#endif ++ + void + do_rmdir(int argc, const char ** argv) + { +@@ -1253,4 +1285,62 @@ + printf("Program \"%s\" not found in PATH\n", program); + } + ++#if HAVE_LINUX_LOSETUP ++ ++void ++do_losetup(int argc, const char ** argv) ++{ ++ int loopfd; ++ int targfd; ++ struct loop_info loopInfo; ++ ++ if (!strcmp(argv[1], "-d")) { ++ loopfd = open(argv[2], O_RDWR); ++ if (loopfd < 0) { ++ fprintf(stderr, "Error opening %s: %s\n", argv[2], ++ strerror(errno)); ++ return; ++ } ++ ++ if (ioctl(loopfd, LOOP_CLR_FD, 0)) { ++ fprintf(stderr, "Error unassociating device: %s\n", ++ strerror(errno)); ++ return; ++ } ++ } ++ ++ loopfd = open(argv[1], O_RDWR); ++ if (loopfd < 0) { ++ fprintf(stderr, "Error opening %s: %s\n", argv[1], ++ strerror(errno)); ++ return; ++ } ++ ++ targfd = open(argv[2], O_RDWR); ++ if (targfd < 0) { ++ fprintf(stderr, "Error opening %s: %s\n", argv[2], ++ strerror(errno)); ++ return; ++ } ++ ++ if (ioctl(loopfd, LOOP_SET_FD, targfd)) { ++ fprintf(stderr, "Error setting up loopback device: %s\n", ++ strerror(errno)); ++ return; ++ } ++ ++ memset(&loopInfo, 0, sizeof(loopInfo)); ++ strcpy(loopInfo.lo_name, argv[2]); ++ ++ if (ioctl(loopfd, LOOP_SET_STATUS, &loopInfo)) { ++ fprintf(stderr, "Error setting up loopback device: %s\n", ++ strerror(errno)); ++ return; ++ } ++ ++ return; ++} ++ ++#endif ++ + /* END CODE */ +diff --unified --recursive --new-file sash-3.7/sash.1 sash-3.7-fb/sash.1 +--- sash-3.7/sash.1 2004-01-14 06:04:50.000000000 +0100 ++++ sash-3.7-fb/sash.1 2004-07-04 10:45:45.000000000 +0200 +@@ -22,11 +22,11 @@ + These built-in commands are: + .PP + .nf +- -ar, -chattr, -chgrp, -chmod, -chown, -cmp, -cp, +- -dd, -echo, -ed, -grep, -file, -find, -gunzip, +- -gzip, -kill, -ln, -ls, -lsattr, -mkdir, -mknod, +- -more, -mount, -mv, -printenv, -pwd, -rm, -rmdir, +- -sum, -sync, -tar, -touch, -umount, -where ++ -ar, -chattr, -chgrp, -chmod, -chown, -chroot, -cmp, ++ -cp, -dd, -echo, -ed, -grep, -file, -find, -gunzip, ++ -gzip, -kill, -losetup, -ln, -ls, -lsattr, -mkdir, ++ -mknod, -more, -mount, -mv, -pivot_root, -printenv, -pwd, ++ -rm, -rmdir, -sum, -sync, -tar, -touch, -umount, -where + .fi + .PP + These commands are generally similar to the standard programs with similar +@@ -138,6 +138,13 @@ + can + either be a user name, or a decimal value. + .TP ++.B -chroot path ++Changes the root directory to that specified in ++.I path. ++This directory ++will be used for path names beginning with /. The root directory is ++inherited by all children of the current process. ++.TP + .B -cmp fileName1 fileName2 + Determines whether or not the specified file names have identical data. + This says that the files are links to each other, are different sizes, +@@ -312,6 +319,20 @@ + QUIT, KILL, TERM, STOP, CONT, USR1 or USR2. + If no signal is specified then SIGTERM is used. + .TP ++.B -losetup [-d] loopDev [file] ++Associates loopback devices with files on the system. If ++.I -d ++is not given, ++the loopback device ++.I loopDev ++is associated with ++.I file. ++If ++.I -d ++is given, ++.I loopDev ++is unassociated with the file it's currently configured for. ++.TP + .B -ln [-s] srcName ... destName + Links one or more files from the + .I srcName +@@ -388,6 +409,13 @@ + this fails because of the files being on different filesystems, + then copies and deletes are done instead. + .TP ++.B -pivot_root newRoot putOld ++Moves the root file system of the current process to the directory ++.I putOld ++and makes ++.I newRoot ++the new root file system of the current process. ++.TP + .B -printenv [name] + If + .I name +diff --unified --recursive --new-file sash-3.7/sash.c sash-3.7-fb/sash.c +--- sash-3.7/sash.c 2004-01-14 06:08:03.000000000 +0100 ++++ sash-3.7-fb/sash.c 2004-07-04 10:45:45.000000000 +0200 +@@ -15,7 +15,7 @@ + #include "sash.h" + + +-static const char * const version = "3.7"; ++static const char * const version = "3.7-fb"; + + + /* +@@ -107,6 +107,14 @@ + "srcName ... destName" + }, + ++#ifdef HAVE_LINUX_CHROOT ++ { ++ "-chroot", do_chroot, 2, 2, ++ "change root file system", ++ "new_root_dir" ++ }, ++#endif ++ + { + "-dd", do_dd, 3, INFINITE_ARGS, + "Copy data between two files", +@@ -181,6 +189,14 @@ + "[-sig] pid ..." + }, + ++#ifdef HAVE_LINUX_LOSETUP ++ { ++ "-losetup", do_losetup, 3, 3, ++ "Associate a loopback device with a file", ++ "[-d] device\n -losetup device filename" ++ }, ++#endif ++ + { + "-ln", do_ln, 3, INFINITE_ARGS, + "Link one fileName to another", +@@ -237,6 +253,14 @@ + "srcName ... destName" + }, + ++#ifdef HAVE_LINUX_PIVOT ++ { ++ "-pivot_root", do_pivot_root, 3, 3, ++ "pivot the root file system", ++ "new_dir old_dir" ++ }, ++#endif ++ + { + "-printenv", do_printenv, 1, 2, + "Print environment variables", +@@ -383,6 +407,7 @@ + static void showPrompt(void); + static void usage(void); + static Alias * findAlias(const char * name); ++static void expandVariable(char * name); + + + /* +@@ -702,6 +727,11 @@ + } + + /* ++ * Expand simple environment variables ++ */ ++ while (strstr(cmd, "$(")) expandVariable((char *)cmd); ++ ++ /* + * Now look for the command in the builtin table, and execute + * the command if found. + */ +@@ -1275,4 +1305,29 @@ + exit(1); + } + ++/* ++ * Expand one environment variable: Syntax $(VAR) ++ */ ++static void ++expandVariable(char * cmd) ++{ ++ char tmp[CMD_LEN]; ++ char *cp; ++ char *ep; ++ ++ strcpy(tmp, cmd); ++ cp = strstr(tmp, "$("); ++ if (cp) { ++ *cp++ = '\0'; ++ strcpy(cmd, tmp); ++ ep = ++cp; ++ while (*ep && (*ep != ')')) ep++; ++ if (*ep == ')') *ep++ = '\0'; ++ cp = getenv(cp); ++ if (cp) strcat(cmd, cp); ++ strcat(cmd, ep); ++ } ++ return; ++} ++ + /* END CODE */ +diff --unified --recursive --new-file sash-3.7/sash.h sash-3.7-fb/sash.h +--- sash-3.7/sash.h 2002-07-22 00:05:17.000000000 +0200 ++++ sash-3.7-fb/sash.h 2004-07-04 10:45:45.000000000 +0200 +@@ -110,6 +110,18 @@ + extern void do_chattr(int argc, const char ** argv); + #endif + ++#if HAVE_LINUX_CHROOT ++extern void do_chroot(int argc, const char ** argv); ++#endif ++ ++#if HAVE_LINUX_LOSETUP ++extern void do_losetup(int argc, const char ** argv); ++#endif ++ ++#if HAVE_LINUX_PIVOT ++extern void do_pivot_root(int argc, const char ** argv); ++extern int pivot_root(const char *new_root, const char *put_old); ++#endif + + /* + * Global utility routines. diff --git a/system/sash/sash.SlackBuild b/system/sash/sash.SlackBuild new file mode 100644 index 0000000000000..64acbb690d60f --- /dev/null +++ b/system/sash/sash.SlackBuild @@ -0,0 +1,75 @@ +#!/bin/sh + +# Slackware build script for the stand alone shell (sash) + +# Written by Menno E. Duursma <druiloor@zonnet.nl> +# Modified by Robby Workman of the SlackBuilds.org project + +# Exit on most errors +set -e + +PRGNAM=sash +VERSION=3.7 +ARCH=${ARCH:-i486} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar -xzvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +chmod -R u+w,go+r-w,a-s . + +# The 'sash-plus-patches' patch adds support for _very_ usefull features +# like env var expention and the 'chroot' command: +# http://www.baiti.net/sash/ +patch -p1 --verbose < $CWD/sash-plus-patches-3.7 + +# Apply the appropriate CFLAGS to the Makefile +if [ "$ARCH" = "i486" ]; then + patch -p1 --verbose < $CWD/sash-3.7-CFLAGS_i486.patch +elif [ "$ARCH" = "i686" ]; then + patch -p1 --verbose < $CWD/sash-3.7-CFLAGS_i686.patch +fi + +# Let's make this thing support DESTDIR +patch -p1 --verbose < $CWD/sash-3.7-DESTDIR.patch + +# Fix an include line in cmd_chattr.c +patch -p1 --verbose < $CWD/sash-3.7-cmd_chattr.c.patch + +# Create target dirs +mkdir -p $PKG/bin +mkdir -p $PKG/usr/man/man1 + +# Compile the application and install it into the $PKG directory +make +make install DESTDIR=$PKG + +( cd $PKG + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) + +( cd $PKG/usr/man + find . -type f -exec gzip -9 {} \; + for i in $(find . -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done +) + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a CHANGES README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.tgz diff --git a/system/sash/sash.info b/system/sash/sash.info new file mode 100644 index 0000000000000..92927e796e8da --- /dev/null +++ b/system/sash/sash.info @@ -0,0 +1,8 @@ +PRGNAM="sash" +VERSION="3.7" +HOMEPAGE="http://members.canb.auug.org.au/~dbell/programs/" +DOWNLOAD="http://members.canb.auug.org.au/~dbell/programs/sash-3.7.tar.gz" +MD5SUM="ee7c7ed5aad76599974d016a6f201ef4" +MAINTAINER="Menno E. Duursma" +EMAIL="druiloor@zonnet.nl" +APPROVED="rworkman" diff --git a/system/sash/slack-desc b/system/sash/slack-desc new file mode 100644 index 0000000000000..f379e97bc4ff3 --- /dev/null +++ b/system/sash/slack-desc @@ -0,0 +1,19 @@ +# 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 ':'. + + |-----handy-ruler------------------------------------------------------| +sash: sash (Stand Alone SHell) +sash: +sash: stand-alone shell is primarly useful for recovering from +sash: (certain types of) system failures. However (and more +sash: importantly), it can execute external programs, as a lot +sash: of standard system commands are built into it. +sash: +sash: SASH was written by David Bell +sash: +sash: +sash: |