[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [debian-knoppix] Klaus's latest build scripts



On Tue, Apr 15, 2003 at 08:56:09AM -0500, ppp@freeshell.org wrote:
> Would it be possible to get a copy of the latest build
> scripts that Mr. Knopper uses to build Knoppix? I have
> a copy of Knoppix.clean and Knoppix.mkcompress that I 
> believe originated from Klaus and are probably a 
> year old by now. I'm also interested in getting a 
> copy of the latest sort file that is fed into mkisofs
> (I realize that this changes somewhat from build to 
> build, but it would be a good start and an improvement
> over not sorting at all). 
> 
> Peter.
> _______________________________________________
> debian-knoppix mailing list
> debian-knoppix@linuxtag.org
> http://mailman.linuxtag.org/mailman/listinfo/debian-knoppix

Attached.

WARNING: THESE SCRIPTS WILL DESTROY YOUR ENTIRE SYSTEM, MAKE YOUR
HARDDISK UNREADABLE, YOUR TV WILL EXPLODE, YOU WILL HAVE 7 YEARS OF BAD
LUCK, YOUR GIRLFRIEND WILL LEAVE YOU, AND THE WORLD AS WE KNOW IT
WILL COME TO A SUDDEN END. YOU HAVE BEEN WARNED. ;-)

Seriously, please don't run these scripts without reading them
carefully, understanding what they do and modifying them accordingly.

Regards
-Klaus Knopper
#!/bin/bash
# Knoppix.checklibs (C) 2003 Klaus Knopper
# Checks for missing libraries in binary files

DIRS="/bin /sbin /usr/bin /usr/sbin /usr/X11R6/bin /usr/games /usr/local/bin /usr/local/sbin /lib /usr/lib"

for d in $DIRS; do
ldd $d/* 2>&1 | while read line; do
case "$line" in
*:) CURRENT="${line%\:*}";;
*not\ found*) echo "ERROR: $CURRENT: $line";;
esac
done
done
#!/bin/bash
# Restore initial system state, clean all temporary files

umask 022

# echo "Updating package lists..."
# pump; sleep 2
# perl -pi -e 's/^deb/#deb/g' /etc/apt/sources.list
# apt-get update >/dev/null 2>&1
# perl -pi -e 's/^#deb/deb/g' /etc/apt/sources.list


/etc/init.d/autofs stop
[ -x /etc/init.d/knoppix-terminalserver ] && /etc/init.d/knoppix-terminalserver deconfigure

# remove only "temporary" or saved files in the given directories
nuke(){
for i in `find "$@" -name \*.gz -o -name \*.bz2 -o -name \*.0 -o -name \*.0.log -o -name browse.dat -o -name \*.\*pk 2>/dev/null`; do
rm -f "$i"
done
}

# set all files in the given directories to a length of zero
zero(){
for i in `find "$@" -type f -size +0 -not -name \*.ini 2>/dev/null`; do
:> "$i"
done
}

rmdir /mnt/cdrom?* /mnt/hd?* /mnt/sd?* 2>/dev/null
rm -f /etc/ifstate /etc/X11/XF86Config /etc/X11/XF86Config-4 \
      /etc/XF86Config /etc/XF86Config-4 /etc/sysconfig/* \
      /etc/ssh/*key* \
      /etc/samba/*.SID /var/lib/samba/* /var/cache/samba/* /etc/samba/*.tdb \
      /dev/mouse* /dev/cdrom* /dev/cdwriter* \
      /var/run/*/* /var/run/* /var/log/ksymoops/* /var/lock/*/* /var/lock/* \
      /var/state/*/* /var/state/* /var/log/nessus/* /var/lib/nessus/* \
      /halt /reboot /ash.static /etc/dhcpc/*.info /etc/dhcpc/resolv* \
      /etc/resolv.conf /etc/*passwd- /etc/*shadow- /etc/*group- 2>/dev/null
mkdir -p /etc/sysconfig/network-scripts /etc/sysconfig/provider
cat >/etc/dhcpc/resolv.conf <<EOT
# insert nameservers here
# nameserver 127.0.0.1
EOT
chmod 644 /etc/dhcpc/resolv.conf
ln -s /etc/dhcpc/resolv.conf /etc/
rm -rf /tmp/* /var/tmp/* /var/backups/* /root/.??* /.??* /home/root/.??* \
	/home/*/.ssh /home/*/.bash_history \
       /home/knoppix/* /home/knoppix/.??* /var/lib/texmf/ls-R \
       /var/spool/texmf/ls-R /var/run/screen/* /var/spool/squid/* \
       /usr/share/applnk/System/Nessus.desktop
nuke /var/log /var/cache /var/spool/texmf 
zero /var/local /var/log /var/spool /var/mail \
     /var/lib/games /var/cache/man /var/lib/wine \
     /var/lib/nfs /var/lib/xkb

for i in `find /usr/*/man -name \*.\[0-9ln\]` ; do
[ -f "$i".gz -o -f "$i".bz2 ] && rm -f "$i"
done

# delete old dowloaded packages
apt-get clean

# Strip X11 Libs
strip --strip-unneeded `find /usr/X11R6/lib/modules -name \*.so -o -name \*.o`

# Recreate empty utmp and wtmp
:>/var/run/utmp
:>/var/run/wtmp
# regenerate module dependencies and ls.so.cache
echo -n "Updating ld.so.cache..."
ldconfig
echo "	Done."
echo -n "Updating modules.dep..."
depmod -a 2>/dev/null
echo "	Done."
echo -n "Updating texhash..."
mktexlsr
echo "	Done."
echo -n "Updating mandb..."
mandb -c
man doesnotexist >/dev/null 2>&1
echo "	Done."
echo -n "Updating menus..."
/usr/sbin/mkmenusfromkde
echo "	Done."
echo -n "Updating locate-database..."
updatedb --prunepaths="/KNOPPIX.build /mnt/hd /mnt/cdrom /tmp /usr/tmp /var/tmp"
update-dlocatedb
echo "	Done."

echo -n "Fixing permissions in /dev/..."
chown root.root /dev/ttyp*
chmod 666 /dev/ttyp* /dev/sg* /dev/audio* /dev/dsp* /dev/mixer* /dev/sequencer*
echo "  Done".

echo -n "Fixing permissions in /etc/ppp/..."
chown root.dip /etc/ppp/*secrets /etc/ppp/ppp_* /etc/ppp/peers/*provider /etc/ppp/peers /etc/ppp /etc/chatscripts /etc/chatscripts/*
chmod g+rwX    /etc/ppp/*secrets /etc/ppp/ppp_* /etc/ppp/peers/*provider /etc/ppp/peers /etc/ppp /etc/chatscripts /etc/chatscripts/* 
echo "  Done".

echo -n "Removing unused architecture Kernel sources: "
for i in `ls -1 /usr/src/linux/arch/ | grep -v i386`; do
	echo -n "$i "; rm -rf /usr/src/linux/arch/"$i" /usr/src/linux/include/asm-"$i"
done
echo "	Done."

# Remove obsolete bluetooth module
rm -f /lib/modules/*/kernel/drivers/usb/bluetooth.o

echo -n "Creating auto.mnt..."
cat >/etc/auto.mnt <<EOT
# Knoppix automounter file for Directory /mnt/auto
# umask=000 only works for msdos/vfat floppies, but otherwise the floppy is read-only.
floppy	-fstype=auto,user,exec,umask=000	:/dev/fd0
cdrom	-fstype=auto,user,exec,ro	:/dev/cdrom
# The following entries (if any) are auto-generated by knoppix-autoconfig
EOT
echo "  Done".
# echo "Setting OpenOffice Link to default EN"
# rm -f /etc/alternatives/soffice.resource ; ln -sf /opt/openoffice/program/resource-en /etc/alternatives/soffice.resource
# rm -f /etc/alternatives/soffice.help ; ln -sf /opt/openoffice/help/help-en /etc/alternatives/soffice.help
echo -n "Zeoring available Package lists ..."
for i in $(find /var/lib/apt/lists -type f \( -name \*Packages -o -name \*Sources \) 2>/dev/null); do  :>"$i"; done
dpkg --clear-avail
rm -f /var/cache/apt/*.bin
apt-cache gencaches
echo "Done."
#!/bin/sh
find /usr /bin /lib /etc | xargs -n 20 dpkg -S | egrep -e '(not found|nicht gefunden)'
#!/bin/bash

DEST="$1"

[ -z "$DEST" -o ! -d "$DEST" ] && { echo "Usage: $0 DESTINATIONDIR" >&2 ; exit 1; }
[ ! -x /usr/bin/create_compressed_fs ] && { echo "Need /usr/bin/create_compressed_fs." ; exit 1; }

# Compression blocksize (must be multiple of 512)
# All block headers must fit into a kmalloc segment (ca. 130000 bytes)
BLOCKSIZE=65536
# BLOCKSIZE=53248
# BLOCKSIZE=102400

echo -n "Update Bootfloppy file(s)? "
read answer
if [ "$answer" = "y" ]; then
cp -uv /KNOPPIX.build/Knoppix.System/bootdisk/Knoppix/boot-*.img "$DEST"/KNOPPIX/
( cd "$DEST"/KNOPPIX && ln -f -v boot-de.img boot.img ) || exit 1
fi

[ ! -f "$DEST"/KNOPPIX/boot.img ] && { echo "Missing required file $DEST/KNOPPIX/boot.img" >&2 ; exit 1; }

echo -n "Recreate KNOPPIX compressed FS? "
read answer
if [ "$answer" = "y" ]
then
rm -f "$DEST"/KNOPPIX/KNOPPIX

# Remove files that need to be autogenerated from source dir!
echo -n "Sweep/Clean system before remastering? "
read answer
[ "$answer" = "y" ] && { . /KNOPPIX.build/Knoppix.postupgrade; . /KNOPPIX.build/Knoppix.clean; }

cat >/etc/network/interfaces <<EOT
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
# automatically added when upgrading
auto lo
iface lo inet loopback

EOT

cat >/etc/dhcpc/resolv.conf <<EOT
# Insert nameservers here
# nameserver 127.0.0.1
EOT

# Mount root read-only, so no files change while generating image
mount -o ro,remount / || { echo "Error: Cannot mount / read-only" >&2 ; exit 0; }

# Hide unwanted LOCALEs.
HIDELOCALE=""
HIDEMAN=""
MYLOCALE=$(awk -F'[="_]' '/^(LANG|LANGUAGE)=/{if(!/[$]/){x=x" "$3}}END{print x}' /etc/init.d/knoppix-autoconfig)
MYLOCALE="$MYLOCALE C en ja be da dk zh"
LOCALEDIR=/usr/share/locale
MANPAGEDIR=/usr/share/man
for LOCALE in `/bin/ls -1 $LOCALEDIR`; do
[ -d "$LOCALEDIR/$LOCALE/LC_MESSAGES" ] || continue
	FOUND=""
	for l in $MYLOCALE; do
		case "$LOCALE" in $l*) FOUND="yes" ;; esac
	done
	if [ -z "$FOUND" ]; then
		HIDELOCALE="$HIDELOCALE -m $LOCALEDIR/$LOCALE"
		[ -d "$MANPAGEDIR/$LOCALE" ] && HIDELOCALE="$HIDELOCALE -m $MANPAGEDIR/$LOCALE"
	fi
done

# -U implies: -d, -l, -L, -N, -relaxed-filenames,  -allow-lowercase,
# -allow-multidot  and  -no-iso-translate
#	-iso-level 3 -U -cache-inodes -no-bak -pad \
#	-hide-rr-moved \
#	-m /var/lib/dpkg/available\* \
SORT=""
[ -e /KNOPPIX.build/mkisofs.sort ] && SORT="-sort /KNOPPIX.build/mkisofs.sort"
# mkisofs -pad -R -l -v $SORT \
mkisofs -R -U -v $SORT \
	-no-split-symlink-components -no-split-symlink-fields \
	-V "KNOPPIX_FS" \
	-P "KNOPPER.NET" \
	-p "www.knopper.net" \
	-hide-rr-moved -cache-inodes -no-bak -pad \
	-m /proc/\* -m /tmp/\* -m /var/tmp/\* -m /home/\* -m /initrd/\* \
	-m /KNOPPIX.build -m /mnt/\*/\* -m \*.dpkg-\* \
	-m /mnt/hd/\* -m /mnt/hd\* -m /mnt/cdrom\* -m /etc/fstab\* \
	-m /etc/exports -m /etc/dhcpc/dhcpcd\* \
	-m /var/spool/mail/\* -m /var/spool/mqueue/\* \
	-m /etc/driveprm -m .ssh -m .bash_history \
	-m /etc/printcap\* -m /var/spool/cups/tmp/\* \
	-m /etc/cups/certs/\* -m /etc/cups/\*.O -m /etc/cups/ppd/\* \
	-m /etc/gpm.conf -m /etc/isapnp.\* -m /etc/minirc.dfl \
	-m /var/cache/debconf/\*-old -m /var/lib/\*/\*- \
	-m /var/lib/\*/\*old -m /var/log/XFree86.\* \
	-m /var/samba/\*.pid -m /var/lib/samba/\* -m /var/cache/samba/\* \
	-m /var/mail/\* -m /var/apt/cache/archives/lock \
	-m /var/log/ksymoops\* -m /var/spool/exim/db/\* -m /etc/\*.old \
	-m /etc/\*.save -m /etc/ssl/certs/\* -m \*.preserved \
	-m .viminfo -m .\*.swp -m lost+found \
	-m /.\?\?\* -m /root/.\?\?\* -m /etc/.\?\?\* \
        -m /boot/map -m /boot/boot.0\* \
        -m /usr/src/kernel\*.deb -m /usr/src/kernel\*.dsc -m /usr/src/kernel\*.changes -m /usr/src/kernel\*.tar.gz \
        -m /usr/src/modules/pcmcia\* \
        -m /usr/src/linux\*/arch \
        -m /usr/src/linux\*/drivers \
	-m /usr/src/linux\*/fs \
	-m /usr/src/linux\*/init \
	-m /usr/src/linux\*/mm \
	-m /usr/src/linux\*/net \
	-m /usr/src/linux\*/vmlinu\* \
	-m /usr/src/linux\*/System.map \
	-m /usr/src/linux\*/ipc \
	-m /usr/src/linux\*/stamp-\* \
	-m /usr/src/linux\*/C\* \
	-m /usr/src/linux\*/M\* \
	-m /usr/src/linux\*/R\* \
	-m /usr/src/linux\*/debian \
	-m /usr/src/linux\*/kernel \
	-m /usr/src/linux\*/kdb \
	-m /usr/src/linux\*/lib \
	-m /usr/src/linux\*/scripts \
	-m /usr/src/linux\*/conf.vars \
	-m /usr/src/linux\*/.*depend \
	-m /usr/src/linux\*/.*old \
	$HIDELOCALE / \
	| /usr/bin/create_compressed_fs - $BLOCKSIZE >"$DEST"/KNOPPIX/KNOPPIX || exit 1
#	-o "$DEST"-tmp.iso / && \
#	/usr/bin/compressloop -v -v -c 9 -b $BLOCKSIZE "$DEST"-tmp.iso "$DEST"/KNOPPIX/KNOPPIX && rm -f "$DEST"-tmp.iso || exit 1
mount -o rw,remount /
chmod 444 "$DEST"/KNOPPIX/KNOPPIX
# swapoff /dev/hdc2 2>/dev/null
fi

mkfinal(){
TARGET="$1.iso"
# Alternate boot record
#	-eltorito-alt-boot \
#	-b KNOPPIX/boot-en.img -c KNOPPIX/boot.cat \
mkisofs -pad -l -r -J -v \
	-sort /tmp/knoppix.sort \
        -V 'KNOPPIX' -A 'KNOPPIX LIVE LINUX CD' \
        -P "KNOPPER.NET" \
        -p "www.knopper.net" \
        -b KNOPPIX/boot.img -c KNOPPIX/boot.cat \
        -m "$DEST"/KNOPPIX/boot-\*.img \
        -hide-rr-moved \
        -o "$TARGET" "$DEST"
}

echo -n "Recreate KNOPPIX-DE isofile '$DEST.iso'? "
read answer
if [ "$answer" = "y" ]; then
# Make sure that the boot floppy file AND the boot catalog are at the beginning of the image.
# Some controllers seem to depend on this.
rm -f /tmp/knoppix.sort
echo "$DEST/KNOPPIX/boot.cat 100003"    >/tmp/knoppix.sort
echo "$DEST/KNOPPIX/boot.img 100002"   >>/tmp/knoppix.sort
echo "$DEST/KNOPPIX/KNOPPIX 100001"    >>/tmp/knoppix.sort
echo "$DEST/Demos/Audio/*.mp3 -100000" >>/tmp/knoppix.sort
echo "$DEST/Demos/Audio/*.ogg -100000" >>/tmp/knoppix.sort
# Make final CD Image
mkfinal "$DEST"

echo -n "Recreate KNOPPIX-EN isofile '$DEST-EN.iso'? "
read answer
if [ "$answer" = "y" ]; then
( cd "$DEST"/KNOPPIX && ln -f -v boot-en.img boot.img ) || exit 1
mkfinal "$DEST-EN"
( cd "$DEST"/KNOPPIX && ln -f -v boot-de.img boot.img ) || exit 1
fi
rm -f /tmp/knoppix.sort
fi

echo -n "BURN german CD version? "
read answer
if [ "$answer" = "y" ]; then
cdrecord -v -dao -pad -eject driveropts=burnfree dev=0,1,0 speed=12 fs=24M "$DEST.iso"
fi

# Clean up
find /var/lib/apt/lists/ -type f -exec rm -f {} \;
#!/bin/sh
find / -anewer /KNOPPIX.build/mkisofs.timestamp -not \( -type d -o -path /KNOPPIX.build\* -o -path /tmp\* -o -path /proc/\* -o -path /mnt/\* \) -printf '%p	%A@\n' | sort -rn +1 -t'	' | awk -F'	' '{print $1 "	" ++i}' > /KNOPPIX.build/mkisofs.sort

echo "/bin/mkdir	10090" >> /KNOPPIX.build/mkisofs.sort
echo "/bin/chown	10080" >> /KNOPPIX.build/mkisofs.sort
echo "/bin/cp	10070" >> /KNOPPIX.build/mkisofs.sort
echo "/bin/ln	10060" >> /KNOPPIX.build/mkisofs.sort
echo "/bin/rm	10050" >> /KNOPPIX.build/mkisofs.sort
echo "/dev/*	20000" >> /KNOPPIX.build/mkisofs.sort
echo "/etc/*	30000" >> /KNOPPIX.build/mkisofs.sort
#!/bin/sh
# Remove unwanted init scripts and KDE-autostart files

STOP=""
for i in `ls -d1 /etc/rc?.d/* | egrep -v -e '(README|knoppix|xsession)'`; do
BASE=`basename $i`
BASE=${BASE##[KS]??}
case "$STOP" in *${BASE}*) ;; *) STOP="$STOP $BASE"; ;; esac
rm -vf $i
done

for i in $STOP; do
/etc/init.d/$i stop
done


for i in `ls -d1 /usr/share/autostart/* | egrep -v -e '(panel|kdesktop|khotkeys)\.desktop'`; do
rm -vf $i
done

chmod u+s /usr/bin/cdrecord /usr/bin/cdrdao
# /usr/bin/cdparanoia

# Some GTK programs HAVE to run as root. :-/

for i in `egrep -q -l -r -e '(xcdroast|ethereal)' /usr/share/applnk/.`; do
	perl -pi -e 's|Exec=/|Exec=sudo /|g' "$i"
done

# Replace kdesu (needs password) by sudo (doesn't)
for i in `grep -q -l -r 'Exec=.*kdesu' /usr/share/applnk/.`; do
	perl -pi -e 's|Exec=.*kdesu |Exec=sudo -H |g' "$i"
done

# Remove -ncp in xboard startup file
for i in `grep -q -l -r 'Exec=.*xboard.*-ncp' /usr/share/applnk/.`; do
	perl -pi -e 's| -ncp||g' "$i"
done

# Almost everything is wrong in this menu file
rm -f /usr/lib/menu/evolution1.3

# Change Debians OpenOffice settings to default font Helmet
#for i in `find /usr/lib/openoffice -name Writer.xml`; do
# for j in Standard Heading List Caption Index; do
#  perl -pi -e 's|<'"$j"' cfg:type="string" xsi:null="true"/>|<'"$j"' cfg:type="string">Helmet</'"$j"'>|g' $i
# done
#done

for i in "alias net-pf-17 af_packet" "alias ide_cs ide-cs" "alias usbcore off" "alias autofs autofs4"; do
grep -q "$i" /etc/modutils/aliases || { echo "$i" >> /etc/modutils/aliases; update-modules; }
done

# Make acrobat the default PDF viewer, if present.
for i in `find /usr/share/applnk -iname Acrobat_Reader.desktop`; do
egrep 'MimeType=application/pdf' "$i" >/dev/null ||
echo "InitialPreference=4
MimeType=application/pdf;Application" >> "$i"
done

# Change desktop icon for Mozilla
for i in /usr/share/applnk/*/*/Mozilla_Browser.desktop; do
	perl -pi -e 's|Icon=.*$|Icon=mozilla|g' "$i"
done

#for i in "vendor 0x055d product 0x9001 module pwc"; do
#grep -q "$i" /etc/usbmgr/usbmgr.conf || echo "$i" >> /etc/usbmgr/usbmgr.conf
#done

# Euro font stuff
perl -pi -e 's/iso8859-1( |$)/iso8859-15$1/g' /etc/X11/fonts/misc/xfonts-base.alias && update-fonts-alias /usr/lib/X11/fonts/misc

Reply to: