From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <41DDBE03.2060006@users.sf.net> Date: Fri, 07 Jan 2005 01:38:59 +0300 From: Alexey Rusakov User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20041206 Thunderbird/1.0 Mnenhy/0.7 X-Accept-Language: en-us, en MIME-Version: 1.0 To: ALT Linux Sisyphus discussion list Content-Type: multipart/mixed; boundary="------------030101040606050507070009" Subject: [sisyphus] aptcache2aptbox, =?utf-8?b?0LDQu9GM0YTQsC3QstC10YDRgdC40Y8=?= X-BeenThere: sisyphus@altlinux.ru X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Linux Sisyphus discussion list List-Id: ALT Linux Sisyphus discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Jan 2005 22:39:05 -0000 Archived-At: List-Archive: This is a multi-part message in MIME format. --------------030101040606050507070009 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Всем доброго времени суток. Прежде всего хочу сказать большое спасибо abulava@ за написанный им документ http://raven.org.ua/cgi-bin/wiki.pl/hasher_for_mortals Результатом штудирования этого документа стал прилагаемый к письму скрипт. У него еще очень много недостатков, однако именно благодаря ему у меня на машине теперь есть работающий hasher. Если он кому-то принесет пользу - я буду рад. По-моему, это довольно полезная вещь для wannabe-maintainer (вроде меня). Скрипт создает в текущем каталоге единственный подкаталог Sisyphus (целевой каталог и имя подкаталога пока захардкодены), в котором создает все необходимое для использования содержимого /var/lib/apt/lists/ и /var/cache/apt/archives/ в качестве apt-репозитория (естественно, запускающий должен иметь x-права на эти каталоги). После выполнения скрипта можно делать hsh с параметром --apt-config ${путь к свежесозданному каталогу Sisyphus}/apt.conf. У меня псевдорепозиторий находится в рабочем каталоге hasher (по-моему, удобно), занимает 70 Кб (поскольку все на симлинках). Спасибо за внимание. -- Alexey "Ktirf" Rusakov --------------030101040606050507070009 Content-Type: application/x-sh; name="aptcache2aptbox.sh" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="aptcache2aptbox.sh" #!/bin/sh # This script sets up a hasher aptbox by reusing the packages cache that # is located at /var/cache/apt/archives/. The script is in alpha state, # use with caution. No any warranties, as usual. # # Author: Alexey "Ktirf" Rusakov # # FIXME: Remove the necessity to run the script from a certain directory, # make it a parameter. cat </dev/null APT_SRC_PREFIX=`ls -- *Sisyphus* | \ awk -F'_' -v OFS='_' '/release$/ { NF -= 3; print $0 }' | uniq` case `echo $APT_SRC_PREFIX | wc -w` in '0') echo Failed to find any Sisyphus repository in /var/lib/apt/lists/, aborting. exit 1 ;; '1') ;; # ok *) cat </dev/null for arch in $APT_SRC_ARCHS; do echo " Processing architecture $arch" mkdir -p -- "Sisyphus/$arch/base" ln -sf /var/lib/apt/lists/${APT_SRC_PREFIX}_${arch}_base_release \ Sisyphus/$arch/base/release APT_SRC_COMPONENTS=`cd /var/lib/apt/lists/ >/dev/null 2>&1 && ls -- *Sisyphus_${arch}_* | \ awk -F'.' '/release\./ { print $NF }' | uniq` echo " Components:" $APT_SRC_COMPONENTS for component in $APT_SRC_COMPONENTS; do echo " Processing component '$component'" for f in release pkglist; do # echo " Setting symlink for $f.$component" ln -sf -- /var/lib/apt/lists/${APT_SRC_PREFIX}_${arch}_base_$f.${component} \ Sisyphus/$arch/base/$f.${component} done unset f if egrep "Sisyphus\W+$arch\W+$component" "$HSH_SRC_LIST" >/dev/null 2>&1; then : # echo " The line for $arch/$component is already in $HSH_SRC_LIST" else echo " Adding the line to $HSH_SRC_LIST" echo "rpm file:`pwd`/Sisyphus $arch $component" >>"$HSH_SRC_LIST" fi echo " Linking a package directory (Sisyphus/$arch/RPMS.$component)" ln -sf -- `pwd`/Sisyphus/RPMS.all Sisyphus/$arch/RPMS.$component # echo " '$component' is done" done unset component echo " $arch is done" done unset arch cat </dev/null # Thanks to mike@ for the piece of code below that converts apt naming to # rpm naming. ls | grep "\.rpm$" | while read aptish; do rpmish=`rpm -qp --queryformat='%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm' "$aptish"` if [ "$rpmish" != "$aptish" ]; then echo " Linking $rpmish" ln -sf "/var/cache/apt/archives/$aptish" "$RPMS_ALL/$rpmish" fi done popd >/dev/null echo " Done" # TODO: use sisyphus_cleanup_dups to remove duplicates (is it really needed?) echo " Generating $HSH_APT_CONF" cat >"$HSH_APT_CONF" < Good luck! EOF unset HSH_APT_CONF HSH_SRC_LIST unset APT_SRC_PREFIX APT_SRC_ARCHS APT_SRC_COMPONENTS APT_LIST_PREFIX --------------030101040606050507070009--