No subject

Ruslan Zaripov gryzor at mail.ru
Mon Sep 5 10:07:30 PDT 2005


On Mon, 05 Sep 2005 19:23:00 +0400,
Simon 'corecode' Schubert <corecode at xxxxxxxxxxxx> wrote:
Nobody said anything about adding stuff to base.  I think a package  
manager even should be implemented as a self-bootstrapping package.  
Otherwise it's really hard to update the package manager itself on  
release branches etc.
Interix have such approach.
1.3Mb, it's self-installing shell script
pkg_add, pkg_update, pkg_info, pkg_delete, pkg_create and pkg_sign  
utilities

ftp://warehousepage:QjH7cVLa@xxxxxxxxxxxxxxxxxxxxxx/pkgs/3.5/pkg-current-bin35.sh

There is first 5 lines, copyright & disclaimer :)
#!/bin/ksh
# Self-extracting, self-modifying, self-installing shell script patch
# (c) Copyright 2003-2005, Rodney Ruddock. All Rights Reserved.
# You may redistribute this freely provided that you understand that
# this software come AS IS and without any warranty.
Rest of script in attach, without binary part (pkg-2.4.3-bin35.tar.gz)#!/bin/ksh
# Self-extracting, self-modifying, self-installing shell script patch
# (c) Copyright 2003-2005, Rodney Ruddock. All Rights Reserved.
# You may redistribute this freely provided that you understand that
# this software come AS IS and without any warranty.
#
# Flip this file to make sure it wasn't in Win32 format (for uuencode)
mv $0 $0.xxx
cp $0.xxx $0
flip -u $0
ed $0 << EOF > /dev/null 2>&1
7,16d
wq
EOF
sh $0
exit
#
REL=`/bin/uname -r`
MACH=`/bin/uname -m`
ver="2.4.3"
rm -rf $0.xxx
echo ""
echo " /Tools bootstrap installation of the 'pkg' installer."
echo ""
echo " WARNING: "
echo "         This is a software installation. "
echo ""
echo " WHEN INSTALLING THIS SOFTWARE YOU MUST BE: "
echo "     + the Local Administrator, or "
echo "     + a member of the Administrators group. "
echo ""
echo " This installs the 'pkg' installer for Interix ${REL} (${MACH}), version ${ver}. "
echo " This also installs a newer version of 'ftp, 'pax' & 'tar' in '/bin'. "
echo " Updated versions of 'ls' and 'gzip' are also installed."
echo " This installation as a shell script is a bootstraping technique. "
echo " For help refer to http://www.interopsystems.com/tools/ "
echo ""

ADMINTEST=`/bin/id | /bin/egrep "197108|1049076|131616"`

if [ "$ADMINTEST" == "" ] ; then
	echo " *** ALERT *** "
	echo " It has been detected that you are _not_ using the Administrator "
	echo " account or an account in the Administrators group. "
	echo ""
	echo " This installation will now stop for your safety. "
	echo " Please read all information above. "
	echo " For help refer to http://www.interopsystems.com/tools/ "
	echo ""
	echo ""
	exit 0
fi

if [ -f /usr/local/bin/pkg_add ] ; then
	echo " *** ALERT *** "
	echo " It has been detected that you already have a version of "
	echo " 'pkg' installed. You cannot (and should not) update 'pkg' "
	echo " with this script. "
	echo ""
	echo " You should use 'pkg_add' for the update. "
	echo " Do: 'pkg_add ftp://ftp.interopsystems.com/pkgs/3.5/pkg-current-bin.tgz' "
	echo " at a shell (ksh or csh or bash) prompt. "
	echo " For help refer to http://www.interopsystems.com/tools/ and "
	echo " post a question in the /Tools Forum. "
	echo ""
	echo ""
	exit 0
fi

echo " Press Enter to continue or ^C to cancel. "
echo ""
read something

echo $0 | /bin/grep "^/" > /dev/null 2>&1
if [ $? = 0 ] ; then
	THISFILE="$0"
else
	THISFILE="`pwd`/$0"
fi

OFFSET=`awk '/^__UU_GZ_PATCH_BELOW__/ { print NR + 1; exit 0; }' $0`
THISDIR="`pwd`"

echo " Now in directory " `pwd` " extracting the file "
echo " Please wait...   "
echo ""

cd /tmp
/bin/tail +$OFFSET "$THISFILE" | uudecode 
/bin/rm -f pkg-${ver}-bin35.tar
/usr/contrib/bin/gunzip pkg-${ver}-bin35.tar.gz

if [ ! -e pkg-${ver}-bin35.tar ] ; then
	echo "Archive file not extracted/decompressed correctedly."
	echo "This is an error. Exiting early. Software not installed."
	exit 1
fi

# The catch-22 avoider
/bin/cp -f /bin/tar /tmp/tar

if [ ! -s /bin/tar.orig ] ; then
	/bin/cp /bin/tar /bin/tar.orig
fi

# These 'cp's simulate an install happening and what would have been done
# so that updates and uninstalls will happen cleanly.
if [ -s /bin/tar ] ; then
	/bin/cp /bin/tar /bin/tar-0
fi

if [ -s /bin/ftp ] ; then
	/bin/cp /bin/ftp /bin/ftp-0
fi

if [ -s /bin/pax ] ; then
	/bin/cp /bin/pax /bin/pax-0
fi

if [ -s /usr/share/man/cat1/ftp.1 ] ; then
	/bin/cp /usr/share/man/cat1/ftp.1 /usr/share/man/cat1/ftp.1-0
fi

if [ -s /usr/share/man/cat1/pax.1 ] ; then
	/bin/cp /usr/share/man/cat1/tar.1 /usr/share/man/cat1/tar.1-0
fi

if [ -s /usr/share/man/cat1/pax.1 ] ; then
	/bin/cp /usr/share/man/cat1/pax.1 /usr/share/man/cat1/pax.1-0
fi

# umask adjusted here with purpose for 'tar' running
umask 2
/tmp/tar xvpf pkg-${ver}-bin35.tar

if [ ! -e /usr/local/share/terminfo ]; then
	/bin/mkdir -p /usr/local/share
	/bin/ln -s /usr/share/terminfo /usr/local/share/terminfo
fi

/bin/rm -f pkg-${ver}-bin35.tar
/bin/rm -f pkg-${ver}-bin35.tar.uu
cd "${THISDIR}"

# This adds the two "env_*" packages that are part of this bootstrap.
/bin/cat >> /etc/csh.lcl << EOF 2> /dev/null

# pkg_add :: MANPATH local extend for installed software
setenv MANPATH "/usr/local/man:\${MANPATH}"


# pkg_add :: PATH local extend for installed software
setenv PATH "/usr/local/bin:\${PATH}"

EOF

/bin/cat >> /etc/profile.lcl << EOF 2> /dev/null

# pkg_add :: MANPATH local extend for installed software
export MANPATH="/usr/local/man:\${MANPATH}"


# pkg_add :: PATH local extend for installed software
export PATH="/usr/local/bin:\${PATH}"

EOF

/bin/cat >> /etc/zshenv.lcl << EOF 2> /dev/null

# pkg_add :: MANPATH local extend for installed software
export MANPATH="/usr/local/man:\${MANPATH}"


# pkg_add :: PATH local extend for installed software
export PATH="/usr/local/bin:\${PATH}"

EOF

echo ""
echo " Installation of software completed. "
echo ""
echo " Installer database information has been added so that this software "
echo " can be updated with the 'pkg' installer itself. "
echo ""
echo " It is recommended that you close this shell and start a fresh"
echo " shell so that the new setting may take effect."
echo ""
echo " An update for this bootstrap of the installer may be available now."
echo " It is recommended that you update to the most recent version."
printf " Would you like to update now? (y/n)[y] "

read something

if [ "${something}" != "n" ]; then
	echo " Using 'pkg_add' to get the update of 'pkg' (the installer)."
	echo " This will take a couple of minutes...  "
	/usr/local/bin/pkg_add ftp://ftp.interopsystems.com/pkgs/${REL}-${MACH}/pkg-current-bin.tgz
	echo " Finished getting the update for 'pkg'. "
fi
echo ""
echo " Done. "
echo ""

exit 0

__UU_GZ_PATCH_BELOW__
begin 664 pkg-2.4.3-bin35.tar.gz
end




More information about the Kernel mailing list