The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Создание apt репозитория на дистрибутивном диске SuSE. (suse linux apt rpm)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: suse, linux, apt, rpm,  (найти похожие документы)
From: Алексей Барабанов <alekseybb@mail.ru.> Newsgroups: http://www.barabanov.ru/ Date: Mon, 12 Jun 2005 18:21:07 +0000 (UTC) Subject: Создание apt репозитория на дистрибутивном диске SuSE. Оригинал: http://www.barabanov.ru/arts/how-to-prepare-suse-apt-cd.html Краткое руководство по созданию apt репозитория на дистрибутивном диске SuSE. Целью является создание структур apt-индексов на дистрибутивном диске SuSE Linux. После такой перестройки диском можно пользоваться как источником обновлений через apt-клиента. Поскольку дистрибутивный диск представляет собой носитель, доступный только по чтению, то для модификации его надо буквально пересобрать заново. Для этого придется сначала скопировать содержимое диска во временную рабочую директорию на локальном диске. Произвести построение индексов пакетов. И создать имидж дистрибутивного диска заново. Такие построения потребуют резервирования рабочего пространства на локальной файловой системе. Далее предположим, что все действия производятся в отношении дистрибутивного dvd от SuSE Linux 9.1. Размер исходного диска почти 4G. Соответственно для работы понадобиться 8G суммарного свободного пространства, 4G для рабочей директории и 4G для имиджа с результатом, в том случае, если в качестве исходного диска будет использован dvd, а не его заранее скопированный имидж. Если же предполагается подобную сборку выполнять неоднократно, например, производя всякого рода попутные модификации, то предварительное копирование диска в образ сильно ускорит процесс пересборки, но потребует для своего размещения дополнительно еще 4G, т.е. уже всего 12G. Загрузка и настройка apt. 1. Загрузим пакеты apt. # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/lua-5.0.2-rb1.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/apt-libs-0.5.15cnc6-rb1.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/apt-0.5.15cnc6-rb1.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/perl-XML-LibXML-Common-0.12-rb1.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/perl-XML-NamespaceSupport-1.08-rb1.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/perl-XML-SAX-0.12-rb2.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/gdome2-0.7.4-rb1.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/perl-XML-GDOME-0.82-rb1.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/perl-XML-LibXML-1.56-rb1.i586.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/apt4rpm-0.67-0.noarch.rpm # wget ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/9.0/apt-server-0.5.15cnc6-rb1.i586.rpm Если указанным источником воспользоваться не удается, то можно поискать новый через RPM Search (http://rpm.pbone.net/). 2. Установим и настроим. Если загрузка производилась в выделенную директорию и есть уверенность, что там более нет других rpm, то установить все пакеты можно одной командой : # rpm -ivh *.rpm В противном случае устанавливать надо поочередно в порядке загрузки или указать все пакеты в одной командной строке. Поскольку скрипт пересборки использует собственный конфигурационный файл, то никакой дополнительной настройки сервера apt не потребуется. Настройка скрипта для пересборки диска. Программа (http://www.barabanov.ru/proj/rebuildsusedvd), выполняющая параметрическую пересборку дистрибутивных дисков, сложна в работе и во многом несовершенна. Энтузиасты могут разобраться самостоятельно. Здесь же для указанного конкретного дистрибутивного диска воспользуемся dryrun прогоном одной из версий этой программы, т.е. готовым компилянтом (http://www.barabanov.ru/arts/susedvd2apt). В начале скрипта расположена секция параметров. Их надо будет скорректировать согласно требованиям рабочей среды. 1. WTMP="/workingtemporaryplace/mkaptcd-12076" Переменная WTMP используется далее как имя временной директории, в которую будет скопировано содержимое дистрибутивного диска для построения индексов apt. При настройке этой переменной следует помнить, что объем размещенных данных предположительно близок к 4G, и после создания имиджа скрипт уничтожает эту директорию. 2. OSRC="/dev/sr0" Здесь надо указать устройство, соответствующее приводу dvd, в котором размещен оригинальный дистрибутивный диск. Если используется заранее скопированный образ диска, то рассматриваемую переменную надо проинициализировать примерно так : OSRC="-o loop /originaliso/s91.iso" 3. TISO="/targetiso/s91.iso" В переменной TIOS следует указать место размещения и название создаваемого образа диска с apt-репозиторием. Здесь тоже не следует забывать об объеме такого iso-имиджа, в рассматриваемом случае 4G. Прогон скрипта и пересборка dvd. Модифицированный скрипт запускается на выполнение с теми правами, которые позволяют выполнять монтирование нужных устройств и писать в рабочие директории. После копирования содержимого дистрибутивного диска и перед запуском построителя apt-репозитория скрипт возьмет паузу в работе и предложит подтвердить продолжение нажатием Enter на клавиатуре. Можно использовать такую паузу для того, чтобы произвести дополнительные действия с содержимым дистрибутивного диска. Например, можно обновить версии исходных пакетов, доложить дополнительные пакеты, или даже разместить там собственную директорию с rpm, что позволит далее, после соответствующей модификации создаваемого aptate.conf - нужно будет добавить описания для новых компонентов или дистрибуций - сделать доступными эти rpm в dvd-репозитории через apt. В последней фазе, после нажатия Enter, происходит построение индексов пакетов, найденных в корневой директории создаваемого iso, согласно конфигурации apt-репозитория, записанной в apt/aptate.conf, и, наконец, генерация полученного имиджа нового диска. Все парметры mkisofs взяты с конкретного диска SuSE Linux. Их можно модифицировать по усмотрению. Полученный в результате работы скрипта susedvd2apt имидж диска записывается на носитель и используется как обычный установочный диск, так и в качестве apt-диска. Вопросы записи полученного образа на dvd носитель не входят в перечень проблем, рассматриваемых в этом очень кратком руководстве.
Скрипт rebuildsusedvd #!/bin/sh # # Rebuild SuSE DVD, ver. 1.1.1 # # May-Dec 2004, Aleksey Barabanov <alekseybb@mail.ru.> # Jan 2005, fix relative path to directories # Mar 2005, smal fix, thnx Yashar Aslanov <yashar_2003@mail.ru.> # # todo # 1. ImageMagic++ problem ;) # # ##################################################### setup VER="ver. 1.1.1" PGM=`basename $0` DEBUG="" NOCLEAN="" NOAPTATE="" NOFRESH="" DRYRUN="" PAUSE="" BOOTABLE="" # updates dir UPDATES="" # linuxrc info file INFOFILE="" # working dir TMP="/tmp" # mount point DMNT=/mnt # devices CDDEV="/dev/sr0" NULL=/dev/null ZERO=/dev/zero # misc HOME=`pwd` # ##################################################### get options CDAPP="SuSE-Linux-DVD-9.2#0" CDVOL="SU920.001" #CDPUB="SuSE DVD remake" CDPUB="SuSE Linux AG, suse@suse.de" #CDPRE="RebuildSuSEDVD 1.1.1" CDPRE="CD-Team, http://www.suse.de/feedback" CDSYS="LINUX" CTYME=`date +"%Y%m%d%H%M%S"` usage() { cat <<EOT Rebuild SuSE DVD, $VER Usage: $PGM [options] target.iso Options: --boot Force make boot record in iso. --cdapp <application_id> ISO header application ID --cdvol <volume_id> ISO header volume ID --cdpub <publicher_id> ISO header publisher ID --cdpre <preparer_id> ISO header preparer ID --comp <compname> Use as component base name for repository. Default original. --compile Make command list insted executing. --debug Make verbose output. --dev <devname> Use devname as cd-drive device. Default /dev/sr0. --iso <filename> Use filename as original iso image. --linuxrc <infofile> Add <infofile> to loadable initrd. --mount <dirname> Use dirname as mount point. Default /mnt. --noaptate Dont create APT package index. --noclean Dont remove temporary files. --nofresh Dont recreate SuSE DVD indexes. --pause Make pause after copying before building. --source <dirname> Use dirname as root of iso repository. --tmp <dirname> Use dirname for temporary files. Default /tmp. --updates <dirlist> Made autoupdate from list of directories where placed lates packages. EOT } # OISO="" TREP="" TISO="" CNAME="original" DVER="9.2" DNAM="SUSE" while [ $# -gt 0 ] ; do case $1 in --noclean) NOCLEAN="1" ;; --noaptate) NOAPTATE="1" ;; --nofresh) NOFRESH="1" ;; --compile) DRYRUN="1" ;; --pause) PAUSE="1" ;; --debug) DEBUG="1" ;; --boot) BOOTABLE="1" ;; --iso) shift OISO=$1 ;; --source) shift TREP=$1 ;; --tmp) shift TMP=$1 ;; --mount) shift DMNT=$1 ;; --dev) shift CDDEV=$1 ;; --comp) shift CNAME=$1 ;; --updates) shift UPDATES=$1 ;; --linuxrc) shift INFOFILE=$1 ;; --cdapp) shift CDAPP=$1 ;; --cdvol) shift CDVOL=$1 ;; --cdpub) shift CDPUB=$1 ;; --cdpre) shift CDPRE=$1 ;; --*) echo -e "Bad option \"$1\"." usage exit 1 ;; -*) echo -e "Bad option \"$1\"." usage exit 1 ;; *) TISO=$1 ;; esac shift done WTMP=$TMP/$PGM-$$ OINFO=$TMP/$PGM-info-$$ ITMP=$TMP/$PGM-initrd-$$ [ -z "$TREP" ] || { WTMP="$TREP" [ -z "$OISO" ] || { echo -e "You must use ISO or Repository. Abort" usage exit 1 } } [ -n "$DEBUG" ] && [ -z "$DRYRUN" ] && { echo -en "Tmp\t\t" ; echo "==$TMP==" echo -en "ISO\t\t" ; echo "==$OISO==" echo -en "CDDEV\t\t" ; echo "==$CDDEV==" echo -en "DMNT\t\t" ; echo "==$DMNT==" echo -en "Target\t\t" ; echo "==$TISO==" echo -en "Component name\t" ; echo "==$CNAME==" echo -en "Updates\t\t" ; echo "==$UPDATES==" } [ "$TISO" == "" ] && { echo -e "Target ISO must applayed. Abort" usage exit 1 } # off nofresh if use autoupdates [ -n "$UPDATES" ] && NOFRESH="" # set noclean if use "source" [ -n "$TREP" ] && NOCLEAN="1" # ##################################################### setup environment # utilities CD=cd READ=read ERRMES="" DD=`which dd` || ERRMES=dd GREP=`which grep` || ERRMES=grep CAT=`which cat` || ERRMES=cat RM=`which rm` || ERRMES=rm MKDIR=`which mkdir` || ERRMES=mkdir ECHO=`which echo` || ERRMES=echo MOUNT=`which mount` || ERRMES=mount UMOUNT=`which umount` || ERRMES=umount KILL=`which kill` || ERRMES=kill CP=`which cp` || ERRMES=cp FIND=`which find` || ERRMES=find LN=`which ln` || ERRMES=ln AWK=`which awk` || ERRMES=awk SED=`which sed` || ERRMES=sed STAT=`which stat` || ERRMES=stat MKISO=`which mkisofs` || ERRMES=mkisofs MD5=`which md5sum` || ERRMES=md5sum LS=`which ls` || ERRMES=ls GZIP=`which gzip` || ERRMES=gzip ZCAT=`which zcat` || ERRMES=zcat FILE=`which file` || ERRMES=file MV=`which mv` || ERRMES=mv CPDESCR=`which create_package_descr` || ERRMES=create_package_descr # only for apt-disk APTATE=`which aptate` || { [ "$NOAPTATE" != "" ] && ERRMES=aptate } if [ "$ERRMES" != "" ]; then echo -e "Not found \"$ERRMES\". Abort" exit 1 fi oWTMP=$WTMP oHOME=$HOME oUPDATES=$UPDATES oFIND=$FIND oCD=$CD oCAT=$CAT oSED=$SED oAWK=$AWK oECHO=$ECHO oSTAT=$STAT [ -z "$TREP" ] && { # ##################################################### get vars from original iso # choose original source i="$CDDEV" ; [ -n "$OISO" ] && i="$OISO" # Read the entire header - actually sector 16 of the disc (2K sectors) # All character codes in the "control" region (0-31 decimal) are folded # into the character '.' - these control codes seem to upset bash's # variable sub-string functions (${var:start:length}) quite badly )-: $DD if=$i bs=1 skip=32768 count=2048 >$OINFO 2>/dev/null if [ $? -ne 0 ] ; then $RM -rf $OINFO $ECHO "Error: unable to open \"$i\". Abort" exit 1 fi data=`$CAT $OINFO |tr '[\\000-\\037]' '.*'` $RM -rf $OINFO # Define some useful functions for prettifying the output tidy_print() { # Really cheap way of folding whitespace echo $* } [ "${data:1:5}" == "CD001" ] && { CDVOL=`tidy_print ${data:40:32}` CDPUB=`tidy_print ${data:318:128}` CDPRE=`tidy_print ${data:446:128}` CDAPP=`tidy_print ${data:574:128}` CDSYS=`tidy_print ${data:8:32}` } [ -n "$DEBUG" ] && [ -z "$DRYRUN" ] && { echo -en "SysID\t\t" ; echo "==$CDSYS==" echo -en "VolNAME\t\t" ; echo "==$CDVOL==" echo -en "PublisherID\t" ; echo "==$CDPUB==" echo -en "PreparerID\t" ; echo "==$CDPRE==" echo -en "ApplicationID\t" ; echo "==$CDAPP==" } } # ##################################################### setup compiler do_cat() { T=$1 [ ! -t 0 ] && { if [ -n "$DRYRUN" ] ; then ## compile echo "cat >>$T <<EOT" cat echo EOT else ## run cat >>$T fi } } SCAT=do_cat # choose original source OSRC="$CDDEV" ; [ -n "$OISO" ] && OSRC="-o loop $OISO" # [ -n "$DRYRUN" ] && { echo -e "#!/bin/sh\n# Rebuild SuSE DVD, $VER" echo -e "# compiled at `date`\n#-----------------------" echo -e "WTMP=\"$WTMP\"" WTMP="\$WTMP" echo -e "ITMP=\"$ITMP\"" ITMP="\$ITMP" echo -e "OSRC=\"$OSRC\"" OSRC="\$OSRC" echo -e "TISO=\"$TISO\"" TISO="\$TISO" # [ -z "$UPDATES" ] || { # echo -e "UPDATES=\"$UPDATES\"" # UPDATES="\$UPDATES" # } [ -n "$INFOFILE" ] && { echo -e "INFOFILE=\"$INFOFILE\"" INFOFILE="\$INFOFILE" } echo -e "HOME=\`pwd\`" HOME="\$HOME" DD="echo $DD" LO="echo $LO" MKDIR="echo $MKDIR" MOUNT="echo $MOUNT" CP="echo $CP" CD="echo $CD" ECHO="echo -e $ECHO" CAT="echo $CAT" UMOUNT="echo $UMOUNT" MKISO="echo -e $MKISO" RM="echo $RM" AWK="echo $AWK" LN="echo $LN" APTATE="echo $APTATE" READ="echo $READ" CPDESCR="echo $CPDESCR" FIND="echo $FIND" LS="echo $LS" GZIP="echo $GZIP" MV="echo $MV" MD5="echo $MD5" } # ##################################################### some magic passes # cleaning up temporary resources cleanup() { [ -n "$NOCLEAN" ] || { $ECHO "Cleaning up." $MOUNT | $GREP "on $DMNT" >$NULL && { $ECHO "Unmount image"; $UMOUNT $DMNT; } [ -z "$TREP" ] && { ( [ -n "$DRYRUN" ] || [ -d $WTMP ] ) && $RM -rf $WTMP } ( [ -n "$DRYRUN" ] || [ -d $ITMP ] ) && $RM -rf $ITMP } } # make trap for clean after_error() { cleanup $ECHO "Abort." exit 1 } [ -n "$DRYRUN" ] || trap after_error 1 2 3 15 if [ -z "$TREP" ] ; then # ##################################################### copy cd files [ -n "$DEBUG" ] && [ -z "$DRYRUN" ] && $ECHO "=======copy cd files========" # $MOUNT -t iso9660 $OSRC $DMNT || { echo "Error: cant mount \"$i\""; $KILL -INT $$;} [ -d $WTMP ] && $RM -rf $WTMP $MKDIR -p $WTMP || { $ECHO -e "Error: cant make \"$WTMP\""; $KILL -INT $$;} $CD $HOME $CD $DMNT i="" ; [ -n "$DEBUG" ] && i="v" $CP -ax$i . $WTMP || { $ECHO -e "Error: cant copy files"; $KILL -INT $$;} $CD $HOME $UMOUNT $DMNT else # ##################################################### some fixes $oCD $oHOME for i in 2 3 4 5 ; do [ -d $oWTMP/media.$i ] && $RM -rf $WTMP/media.$i done $oCD $oHOME [ -r $oWTMP/media.1/media ] && { L1=`$oCAT $oWTMP/media.1/media | $oSED -n '1p'` L2=`$oCAT $oWTMP/media.1/media | $oSED -n '2p'` if [ -z "$DRYRUN" ] ; then $ECHO "$L1" >$WTMP/media.1/media $ECHO "$L2" >>$WTMP/media.1/media $ECHO "1" >>$WTMP/media.1/media else $ECHO "$L1" \>$WTMP/media.1/media $ECHO "$L2" \>\>$WTMP/media.1/media $ECHO "1" \>\>$WTMP/media.1/media fi } fi # force suse/i386 $oCD $oHOME [ -d $oWTMP/suse/i386 ] || { $CD $HOME $MKDIR -p $WTMP/suse/i386 || { $ECHO -e "Error: cant make \"$WTMP/suse/i386\""; $KILL -INT $$;} } # force media.1 $oCD $oHOME [ -d $oWTMP/media.1 ] || { $CD $HOME $MKDIR -p $WTMP/media.1 || { $ECHO -e "Error: cant make \"$WTMP/media.1\""; $KILL -INT $$;} } # force media.1/media $oCD $oHOME [ -r $oWTMP/media.1/media ] || { $CD $HOME if [ -z "$DRYRUN" ] ; then $ECHO "$CDPUB" > $WTMP/media.1/media || { $ECHO -e "Error: cant write to \"$WTMP/media.1/media\""; $KILL -INT $$;} $ECHO "$CTYME" >> $WTMP/media.1/media || { $ECHO -e "Error: cant write to \"$WTMP/media.1/media\""; $KILL -INT $$;} $ECHO "1" >> $WTMP/media.1/media || { $ECHO -e "Error: cant write to \"$WTMP/media.1/media\""; $KILL -INT $$;} else $ECHO "\"$CDPUB\"" \> $WTMP/media.1/media $ECHO "\"$CTYME\"" \>\> $WTMP/media.1/media $ECHO "\"1\"" \>\> $WTMP/media.1/media fi } # force media.1/products $oCD $oHOME [ -r $oWTMP/media.1/products ] || { $CD $HOME if [ -z "$DRYRUN" ] ; then $ECHO "/ $CDAPP" > $WTMP/media.1/products || { $ECHO -e "Error: cant write to \"$WTMP/media.1/media\""; $KILL -INT $$;} else $ECHO "\"/ $CDAPP\"" \> $WTMP/media.1/products fi } # ##################################################### setup repository # suse specific tuning [ -z "$DRYRUN" ] && [ -r $WTMP/content ] && { DVER=`$CAT $WTMP/content | $GREP -i ^version | $AWK '{print $2}'` DNAM=`$CAT $WTMP/content | $GREP -i ^product | $AWK '{print $2}'` } [ -z "$NOAPTATE" ] && { [ -n "$DEBUG" ] && [ -z "$DRYRUN" ] && $ECHO "=======setup repository========" # make apt configuration $MKDIR -p $WTMP/apt || { $ECHO -e "Error: cant make \"$WTMP/apt\""; $KILL -INT $$;} $SCAT $WTMP/apt/aptate.conf <<EOT <?xml version='1.0' encoding="iso-8859-1"?> <!DOCTYPE opt SYSTEM "/usr/share/apt4rpm/aptate.dtd"> <opt security-component="no" flat="yes" bloat="yes"> <topdir>$WTMP</topdir> <distribution id="$DNAM-$CNAME" structure="2"> <name>$DNAM</name> <version>$DVER</version> <architecture>i586</architecture> <component active="yes"> <name>$CNAME-i586</name> <url>suse/i586</url> </component> <component active="yes"> <name>$CNAME-noarch</name> <url>suse/noarch</url> </component> </distribution> </opt> EOT } # ##################################################### autoupdates [ -z "$oUPDATES" ] || { [ -n "$DEBUG" ] && $ECHO "=======autoupdates========" v="" ; [ -n "$DEBUG" ] && v="-v" for UPDATES in $oUPDATES ; do ##################################################### updatelist ooUPDATES=$UPDATES [ -n "$DRYRUN" ] && { [ -z "$UPDATES" ] || { echo -e "UPDATES=\"$UPDATES\"" UPDATES="\$UPDATES" } } # updates list, full path $ooUPDATES/$i ## LUPD=`$oFIND $ooUPDATES -regex ".*\(noarch\|i586\)\.rpm$" -printf "%P\n"` LUPD=`$oFIND $ooUPDATES -regex ".*\(noarch\|i586\|i386\)\.rpm$" -printf "%P\n"` for i in $LUPD ; do # get leader part of basename bi=`basename $i | $oAWK -F. '{print $1}'` # find package with equal leader part, full path $oWTMP/suse/$oi ## cbi="$oFIND $oWTMP/suse -regex \".*/$bi.*\(noarch\|i586\)\.rpm$\" -printf \"%P\\n\"" cbi="$oFIND $oWTMP/suse -regex \".*/$bi.[a-z0-9A-Z].*\(noarch\|i586\|i386\)\.rpm$\" -printf \"%P\\n\"" oi=`eval $cbi` # and get first oi1=`$oECHO "$oi" | $oAWK '{print $1}'` if [ "$oi1" != "" ] ; then # compare package age if [ "`$oSTAT -c "%Y" $ooUPDATES/$i`" -gt "`$oSTAT -c "%Y" $oWTMP/suse/$oi1`" ] ; then # copy update if [ -z "$DRYRUN" ] ; then $CP $v $ooUPDATES/$i $oWTMP/suse/`dirname $oi` || { $ECHO -e "Error: cant copy \"$i\""; $KILL -INT $$;} $RM $v -f $oWTMP/suse/$oi || { $ECHO -e "Error: cant erase \"$oi\""; $KILL -INT $$;} else $CP $v $UPDATES/$i $WTMP/suse/`dirname $oi` $RM $v -f $WTMP/suse/$oi fi fi else if [ -z "$DRYRUN" ] ; then $CP $v $ooUPDATES/$i $oWTMP/suse/`dirname $i` || { $ECHO -e "Error: cant copy \"$i\""; $KILL -INT $$;} else $CP $v $UPDATES/$i $WTMP/suse/`dirname $i` fi fi done ##################################################### done } # UPDATES # ##################################################### unzip initrd, add info FST="" [ -n "$INFOFILE" ] && { [ -n "$DEBUG" ] && [ -z "$DRYRUN" ] && $ECHO "=======unzip initrd, add info========" $MKDIR -p $ITMP || { $ECHO -e "Error: cant make \"$ITMP\"" ; $KILL -INT $$; } if [ -n "$DRYRUN" ] ; then echo "$ZCAT $WTMP/boot/loader/initrd >$ITMP/initrd" else $ZCAT $WTMP/boot/loader/initrd >$ITMP/initrd || { $ECHO "Error: cant unzip initrd" ; $KILL -INT $$; } fi if [ -z "$DRYRUN" ] ; then i=`$FILE $ITMP/initrd` FST="" [ -n "`$ECHO "$i" | $GREP Minix`" ] && FST="minix" [ -n "`$ECHO "$i" | $GREP ext2`" ] && FST="ext2" else # default Minix FST="minix" fi [ -n $FST ] && { $MOUNT -o loop,rw -t $FST $ITMP/initrd $DMNT || { $ECHO "Error: cant moun initrd" ; $KILL -INT $$; } $CP $INFOFILE $DMNT/info || { $ECHO -e "Error: cant copy \"$INFOFILE\"" ; $KILL -INT $$; } } } # ##################################################### pause [ -n "$PAUSE" ] && { $ECHO -e "ISO Root ready for modification. Press \"Enter\" for continue." $READ j } # ##################################################### zip initrd [ -n "$INFOFILE" ] && { [ -n "$DEBUG" ] && [ -z "$DRYRUN" ] && $ECHO "=======zip initrd========" [ -n $FST ] && { $UMOUNT $DMNT || { $ECHO -e "Error: cant umount \"$DMNT\"" ; $KILL -INT $$; } } $GZIP -9 $ITMP/initrd || { $ECHO "Error: cant zip initrd" ; $KILL -INT $$; } $MV -f $ITMP/initrd.gz $WTMP/boot/loader/initrd || { $ECHO "Error: cant return initrd" ; $KILL -INT $$; } $RM -rf $ITMP || { $ECHO -e "Error: cant remove \"$ITMP\"" ; $KILL -INT $$; } } # ##################################################### fresh SuSE DVD indexes [ -z "$NOFRESH" ] && { [ -n "$DEBUG" ] && [ -z "$DRYRUN" ] && $ECHO "=======fresh SuSE DVD indexes========" # ################################################## remove old indexes MD5DIR=`$oCD $oHOME ; $oCD $oWTMP ; $oFIND suse -name MD5SUMS` for i in $MD5DIR ; do if [ -z "$DRYRUN" ] ; then $RM -f $WTMP/$i || { $ECHO "Error: cant remove MD5SUMS" ; $KILL -INT $$; } else $RM -f $WTMP/$i fi done # ################################################## create new indexes # create package index $CD $HOME $CD $WTMP/suse if [ -r $oWTMP/suse/setup/descr/EXTRA_PROV ] ; then i="-x $WTMP/suse/setup/descr/EXTRA_PROV" $CPDESCR -l czech -l english -l french -l german -l italian -l spanish -l hungarian $i \ || { $ECHO "Error: cant make package index" ; $KILL -INT $$; } else # if EXTRA_PROV is needed but it not found - ABORT! $oECHO "Error: cant find EXTRA_PROV" $KILL -INT $$; fi # create directory.yast LDIR=`$oCD $oHOME ; $oCD $oWTMP ; $oFIND . -name directory.yast` for i in $LDIR ; do if [ -z "$DRYRUN" ] ; then $CD $HOME $CD $WTMP/`dirname $i` || { $ECHO "Error: cant walk to \"`dirname $i`\"" ; $KILL -INT $$; } $RM -f directory.yast || { $ECHO "Error: cant remove directory.yast" ; $KILL -INT $$; } $LS -A > directory.yast || { $ECHO "Error: cant make directory.yast" ; $KILL -INT $$; } else $CD $HOME $CD $WTMP/`dirname $i` $RM -f directory.yast $LS -A \> directory.yast fi done # force directory.yast $oCD $oHOME [ -r $oWTMP/directory.yast ] || { $CD $WTMP if [ -z "$DRYRUN" ] ; then $LS -A > directory.yast || { $ECHO "Error: cant make directory.yast" ; $KILL -INT $$; } else $LS -A \> directory.yast fi } $oCD $oHOME [ -r $oWTMP/media.1/directory.yast ] || { $CD $WTMP/media.1 if [ -z "$DRYRUN" ] ; then $LS -A > directory.yast || { $ECHO "Error: cant make directory.yast" ; $KILL -INT $$; } else $LS -A \> directory.yast fi } # create main indexes if [ -z "$DRYRUN" ] ; then $CD $HOME $CD $WTMP $RM -f INDEX.gz ls-lR.gz || { $ECHO "Error: cant remove INDEX.gz ls-lR.gz" ; $KILL -INT $$; } # { unset LANG $LS -lR >ls-lR || { $ECHO "Error: cant make ls-lR" ; $KILL -INT $$; } } $GZIP ls-lR || { $ECHO "Error: cant zip ls-lR" ; $KILL -INT $$; } # $FIND . >INDEX || { $ECHO "Error: cant make INDEX" ; $KILL -INT $$; } $GZIP INDEX || { $ECHO "Error: cant zip INDEX" ; $KILL -INT $$; } else $CD $HOME $CD $WTMP $RM -f INDEX.gz ls-lR.gz # $oECHO "{ unset LANG" $LS -lR \>ls-lR $oECHO "}" $GZIP ls-lR # $FIND \. \>INDEX $GZIP INDEX fi # create md5sums for i in $MD5DIR ; do if [ -z "$DRYRUN" ] ; then $CD $HOME $CD $WTMP/`dirname $i` || { $ECHO -e "Error: cant walk to \"`dirname $i`\"" ; $KILL -INT $$; } $MD5 * > MD5SUMS else $CD $HOME $CD $WTMP/`dirname $i` $MD5 \* \> MD5SUMS fi done #=# # force md5sums $CD $HOME } # !NOFRESH # ##################################################### build apt indexes [ -z "$NOAPTATE" ] && { i="--quiet qq" ; [ -n "$DEBUG" ] && i="--debug" $APTATE $i --config-file $WTMP/apt/aptate.conf || { $ECHO "Error: cant buil apt" ; $KILL -INT $$; } } # ##################################################### make iso image [ -n "$DEBUG" ] && [ -z "$DRYRUN" ] && $ECHO "=======make iso image========" ISOBOOT="" # looking for isolinux ( [ -r $WTMP/boot/loader/isolinux.bin ] || [ -n "$BOOTABLE" ] ) && { ISOBOOT="-no-emul-boot -boot-load-size 4 -boot-info-table -b boot/loader/isolinux.bin -c boot/boot.catalog" ISOBOOT="$ISOBOOT -hide boot/boot.catalog -hide-joliet boot/boot.catalog" } # make iso i="-quiet" ; [ -n "$DEBUG" ] && i="-v" ISOOPT="$i -r -J -pad -allow-lowercase -allow-multidot -iso-level 3" i="-A \"$CDAPP\" -V \"$CDVOL\" -P \"$CDPUB\" -p \"$CDPRE\" -sysid \"$CDSYS\" $ISOOPT -o $TISO $ISOBOOT $WTMP" #=# if [ -n "$DRYRUN" ] ; then $MKISO $i else eval "$MKISO $i" || { $ECHO "Error: cant make iso" ; $KILL -INT $$; } fi # ##################################################### finish [ -n "$DRYRUN" ] || trap 1 2 3 15 cleanup $ECHO "Done." exit # ##################################################### done # #####################################################
Скрипт susedvd2apt
#!/bin/sh # Rebuild CD for APT, ver. 0.4.0 # compiled at Wed Jun 2 16:35:10 MSD 2004 #----------------------- WTMP="/workingtemporaryplace/mkaptcd-12076" OSRC="/dev/sr0" TISO="/targetiso/s91.iso" HOME=`pwd` /bin/mount -t iso9660 $OSRC /mnt /bin/mkdir -p $WTMP cd /mnt /bin/cp -axv . $WTMP cd $HOME /bin/umount /mnt /bin/mkdir -p $WTMP/apt cat >>$WTMP/apt/aptate.conf <<EOT <?xml version='1.0' encoding="iso-8859-1"?> <!DOCTYPE opt SYSTEM "/usr/share/apt4rpm/aptate.dtd"> <opt security-component="no" flat="yes" bloat="yes"> <topdir>$WTMP</topdir> <distribution id="SUSE-original" structure="2"> <name>SUSE</name> <version>9.1</version> <architecture>i586</architecture> <component active="yes"> <name>original-i586</name> <url>suse/i586</url> </component> <component active="yes"> <name>original-noarch</name> <url>suse/noarch</url> </component> </distribution> </opt> EOT /bin/echo -e ISO Root ready for modification. Press "Enter" for continue. read i /usr/bin/aptate --config-file $WTMP/apt/aptate.conf /usr/bin/mkisofs -A "SUSE-LINUX-DVD-i386-9.1#0" -V "SU910.001" -P "SuSE Linux AG, suse@suse.de" -p "CD-Team, http://www.suse.de/feedback" -sysid "LINUX" -v -r -J -pad -allow-lowercase -allow-multidot -iso-level 3 -o $TISO -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/loader/isolinux.bin -c boot/boot.catalog -hide boot/boot.catalog -hide-joliet boot/boot.catalog $WTMP /bin/echo Cleaning up. /bin/rm -rf $WTMP /bin/echo Done.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру