system/sash: Added to 12.0 repository

This commit is contained in:
Menno E. Duursma 2010-05-11 20:02:07 +02:00 committed by Robby Workman
parent 0b8cef7f93
commit 081ad402b4
10 changed files with 522 additions and 0 deletions

22
system/sash/README Normal file
View File

@ -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".

7
system/sash/doinst.sh Normal file
View File

@ -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

View File

@ -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) \

View File

@ -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) \

View File

@ -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

View File

@ -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"

View File

@ -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.

View File

@ -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

8
system/sash/sash.info Normal file
View File

@ -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"

19
system/sash/slack-desc Normal file
View File

@ -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: