#!/bin/sh # # Make the mount point to mount the original dvd iso # mkdir /mnt/temp # Make the directory where the original files will be copied to from DVD ISO (including its empty updates directory) # mkdir /mnt/hdb1/opensuse/suse/iso/10.1 # Mount the original ISO # mount -t iso9660 -o loop /mnt/hdb1/opensuse/GM/SUSE-10.1-0-DVD.iso /mnt/temp # Copy the data to the new directory # cp -af /mnt/temp/* /mnt/hdb1/opensuse/suse/iso/10.1 # rsync the updates to /mnt/hdb1/opensuse/suse/update/10.1 # susemake.sh 1 # Update the files in the iso based directory with those brought down via rsync # susemake.sh 2 # Make dvd iso # susemake.sh 3 set +x case $1 in 1) ########################################################################################### # THIS SECTION SYNCS A LOCAL COPY OF I386 UPDATES WITH REMOTE SERVER USING RSYNC # ########################################################################################### # No trailing slashes #RemoteServer="rsync://gd.tuwien.ac.at/opsys/linux/suse.com/suse/update/10.1" #RemoteServer="rsync://ftp.belnet.be/mirrors/ftp.suse.com/suse/update/10.1" #RemoteServer="rsync://ftp.gwdg.de/pub/suse/update/10.1" RemoteServer="rsync://ftp-1.gwdg.de/pub/suse/update/10.1" LocalServer="/mnt/hdb1/opensuse/suse/update/10.1" if [ ! -d $LocalServer ]; then echo "$LocalServer does not exist." exit 1 echo fi RemoteLocation=/repodata/ LocalLocation=/repodata/ rsync -aurv --progress --delete --ignore-errors --force --exclude=*.patch.rpm --exclude=*.delta.rpm --delete-excluded $RemoteServer$RemoteLocation $LocalServer$LocalLocation RemoteLocation=/rpm/ LocalLocation=/rpm/ rsync -aurv --progress --delete --ignore-errors --force --exclude=ppc --exclude=ppc64 --exclude=src --exclude=x86_64 --exclude=*.patch.rpm --exclude=*.delta.rpm --delete-excluded $RemoteServer$RemoteLocation $LocalServer$LocalLocation RemoteLocation=/scripts/ LocalLocation=/scripts/ rsync -aurv --progress --delete --ignore-errors --force --exclude=*.patch.rpm --exclude=*.delta.rpm --delete-excluded $RemoteServer$RemoteLocation $LocalServer$LocalLocation echo echo "Rsync update complete" ;; 2) ########################################################################################### # THIS SECTION REPLACES OLDER FILES WITH UPDATED ONES # ########################################################################################### # No trailing slashes Old="/mnt/hdb1/opensuse/suse/iso/10.1/suse" New="/mnt/hdb1/opensuse/suse/update/10.1/rpm" Rem="/mnt/hdb1/opensuse/suse/removed" if [ ! -d $Old ]; then echo "$Old does not exist." exit 1 echo fi if [ ! -d $New ]; then echo "$New does not exist." exit 1 echo fi if [ ! -d $Rem ]; then echo "$Rem does not exist." exit 1 echo fi Rem2=$Rem/`date +%Y%m%d%H%M%S` mkdir $Rem2 cd $New for d in *; do if [ -d $d ]; then cd "$New/$d" find *.rpm ! -name "*$d.*" | while read a; do aa=${a%.rpm} echo $aa | while read aaa; do cd "$Old/$d" find *.rpm -name "$aaa-[0-9]*$d.rpm" | while read bb; do cp $bb $Rem2 rm $bb done done done fi cd $New done echo echo "Removed old files" cd $New for d in *; do if [ -d $d ]; then find $d/*$d.rpm | while read f; do cp $f $Old/$d/; done fi done echo echo "Copied new files" cd $New for d in *; do if [ -d $d ]; then find $d/*$d.rpm | while read f; do if [ ! -f $Old/$f ]; then echo $f fi done fi done echo echo "Missing files above" ;; 3) ########################################################################################### # THIS SECTION CREATES THE DVD ISO OF LOCAL SUSE TREE # ########################################################################################### # No trailing slashes Version="060626" BaseDir="/mnt/hdb1/opensuse/suse/iso/10.1" OutputDir="/mnt/hdb1/opensuse" OutputDVD="SUSE-Linux-10.1.$Version-GM-DVD-i386.iso" if [ ! -d $BaseDir ]; then echo "$BaseDir does not exist." exit 1 echo fi if [ ! -d $OutputDir ]; then echo "$OutputDir does not exist." exit 1 echo fi LocalKey=`gpg --list-secret-keys $GpgKey|grep "^sec"|sed -e 's/.*\///;s/ .*//g;'|head -n 1` if [ "$LocalKey" == "" ]; then echo "You ${bold}don't${off} seem to have a secret gpg key or the key ${bold}$GpgKey${off} you gave did not exist. Lets now try to make one for you. Just follow instructions. Use defaults, exept for the passphrase. Just press ${bold}ENTER${off} twice there. The last that is added will be used. " gpg -q --gen-key LocalKey=`gpg --list-secret-keys|grep "^sec"|sed -e 's/.*\///;s/ .*//g;'|tail -n 1` fi KeyLocal=`gpg --list-secret-keys $GpgKey|grep -A 1 $LocalKey|grep "^uid"|awk -Fuid '{print $NF}'` echo "" echo "The following key is being used. If you are asked to enter a passphrase," echo "please enter the passphrase for that key." echo "${bold}$KeyLocal${off}" shopt -s nullglob for Initrd in $BaseDir/boot/*/loader/initrd $BaseDir/suseboot/initrd*; do echo "" echo "Initrd is $Initrd" if [ -f $Initrd ]; then gunzip < $Initrd > $Initrd.uncomp gpg --export -u 0x${LocalKey} > ${LocalKey}.gpg echo "${LocalKey}.gpg"|cpio -o -H newc -A -F $Initrd.uncomp gzip --best < $Initrd.uncomp > $Initrd rm $Initrd.uncomp ${LocalKey}.gpg fi done for d in $BaseDir/suse/*; do if [ -d $d ]; then cd $d if [ -f MD5SUMS ]; then rm MD5SUMS fi find * -type f | while read ff; do md5sum $ff >> MD5SUMS 2>&1; done fi done Media1="$BaseDir/media.1" MediaText="Custom DVD" MediaDate= date +%Y%m%d%H%M%S mv $Media1 $Media1.bak rm $BaseDir/media.? -rf mv $Media1.bak $Media1 cat > $Media1/media < $Media1/info.txt < $Media1/directory.yast cd $BaseDir/suse create_package_descr -x setup/descr/EXTRA_PROV -l english -l spanish -l french -l german -l czech -l hungarian -l italian -C cd $BaseDir/suse/setup/descr ls > directory.yast cd $BaseDir rm INDEX.gz ls-lR.gz ls -lR > ls-lR gzip ls-lR find . > INDEX gzip INDEX #Remove keys in content grep -v ^META $BaseDir/content > $BaseDir/content.bak mv $BaseDir/content.bak $BaseDir/content grep -v ^KEY $BaseDir/content > $BaseDir/content.bak mv $BaseDir/content.bak $BaseDir/content #Set the key gpg --export -a $LocalKey > $BaseDir/gpg-pubkey-${LocalKey}.asc # Sign files in /suse/setup/descr/ for File in `ls $BaseDir/suse/setup/descr/` do echo "META SHA1 $(cd $BaseDir/suse/setup/descr/ && sha1sum ${File})" >> $BaseDir/content done #Sign *.asc files for FILE in `ls -1 $BaseDir/|grep ^gpg-pubkey` do echo "KEY SHA1 $(cd $BaseDir && sha1sum ${File})" >> $BaseDir/content done rm $BaseDir/content.asc gpg --detach-sign -u $LocalKey -a $BaseDir/content gpg --export -a -u $LocalKey > $BaseDir/content.key rm $BaseDir/media.1/products.asc gpg --detach-sign -u $LocalKey -a $BaseDir/media.1/products gpg --export -a -u $LocalKey > $BaseDir/media.1/products.key cd $BaseDir mkisofs -v -V SUSE10.1GM -r -J -l -L -P "OpenSuSE Linux 10.1" \ -b "boot/i386/loader/isolinux.bin" \ -c "boot/i386/loader/boot.cat" \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -graft-points -o "$OutputDir/$OutputDVD" \ $BaseDir echo echo "$OutputDir/$OutputDVD" ;; *) echo "Usage: $0 1/2/3 (1=rsync, 2=replace files, 3=make dvd iso)" 1>&2 exit 1 ;; esac echo exit 0