LinuxForum.Fans
Тема

скрипт для загрузки и распаковки исходников с slackbuilds.org

Автор: drBatty 12 сообщений 5294 просмотров
#162910

вот скриптик написал

text
#!/bin/bash

TMP_DIR="/tmp"

if [ -z "$1" ]; then echo "Не задан входной файл." exit 70 fi

TMP=`mktemp`

wget -O - "$1" >$TMP err=$? [ $err != 0 ] && exit $err

# <b>Source Downloads:</b><br /> <a href="http://downloads.sourceforge.net/keepassx/keepassx-0.4.3.tar.gz">keepassx-0.4.3.tar.gz</a> (1df67bb22b2e08df49f09e61d156f508)<br /> # <p><b>Download SlackBuild:</b><br /><a href="http://slackbuilds.org/slackbuilds/13.37/office/keepassx.tar.gz">keepassx.tar.gz</a> # <br /><a href="http://slackbuilds.org/slackbuilds/13.37/office/keepassx.tar.gz.asc">keepassx.tar.gz.asc</a> (<a href="http://slackbuilds.org/faq/#asc">FAQ</a>)</p>

A=( `sed -rn ' # s~.*<b>Source Downloads:</b>.*<a href="([^"]+)">([^<]+)</a> \(([[:xdigit:]]{32})\).*~"\1" "\2" "\3"~ # T # h # n s~.*<p><b>Download SlackBuild:</b>.*<a href="([^"]+)">([^<]+)</a>.*~"\1" "\2"~ T H n s~.*<a href="([^"]+)">([^<]+)</a>.*\(<a .*~"\1" "\2"~ T H g s/\s+/ /g p ' $TMP` )

rm --force --verbose "$TMP"

for i in {0..3} do T="${A[$i]}" T="${T#\"}" T="${T%\"}" A[$i]="$T" done

SLACKBUILD_LINK="${A[0]}" SLACKBUILD_NAME="${A[1]}" SLACKBUILD_ASC_LINK="${A[2]}" SLACKBUILD_ASC_NAME="${A[3]}" echo " -------------------------------------------------------------------- SLACKBUILD_LINK: $SLACKBUILD_LINK SLACKBUILD_NAME: $SLACKBUILD_NAME SLACKBUILD_ASC_LINK: $SLACKBUILD_ASC_LINK SLACKBUILD_ASC_NAME: $SLACKBUILD_ASC_NAME --------------------------------------------------------------------"

wget --output-document=$TMP "$SLACKBUILD_LINK" err=$? [ $err != 0 ] && exit $err

mv --verbose $TMP "$TMP_DIR/$SLACKBUILD_NAME" err=$? [ $err != 0 ] && exit $err

wget --output-document=$TMP "$SLACKBUILD_ASC_LINK" err=$? [ $err != 0 ] && exit $err

mv --verbose $TMP "$TMP_DIR/$SLACKBUILD_ASC_NAME" err=$? [ $err != 0 ] && exit $err

gpg --verify "$TMP_DIR/$SLACKBUILD_ASC_NAME" err=$? [ $err != 0 ] && exit $err

echo -e "\033[32mЭЦП верная.\033[0m"

rm --verbose --force "$TMP_DIR/$SLACKBUILD_ASC_NAME"

echo "Распаковка..." tar -xvvf "$TMP_DIR/$SLACKBUILD_NAME" err=$? [ $err != 0 ] && exit $err SLACKBUILD_DIR="${SLACKBUILD_NAME%.tar.gz}" cd "$SLACKBUILD_DIR" err=$? [ $err != 0 ] && exit $err rm --verbose --force "$TMP_DIR/$SLACKBUILD_NAME"

while read s do TEMP="${s#DOWNLOAD=\"}" if [ "$TEMP" != "$s" ]; then DOWNLOAD="${TEMP%\"}" SOURCE_LINK="$DOWNLOAD" SOURCE_NAME="${DOWNLOAD##*/}" else TEMP="${s#MD5SUM=\"}" if [ "$TEMP" != "$s" ]; then SOURCE_MD5="${TEMP%\"}" else TEMP="${s#DOWNLOAD_x86_64=\"}" if [ "$TEMP" != "$s" ]; then DOWNLOAD="${TEMP%\"}" SOURCE_LINK_x86_64="$DOWNLOAD" SOURCE_NAME_x86_64="${DOWNLOAD##*/}" else TEMP="${s#MD5SUM_x86_64=\"}" if [ "$TEMP" != "$s" ]; then SOURCE_MD5_x86_64="${TEMP%\"}" fi fi fi fi done < $SLACKBUILD_DIR.info echo " -------------------------------------------- SOURCE_LINK: $SOURCE_LINK SOURCE_NAME: $SOURCE_NAME SOURCE_MD5: $SOURCE_MD5 SOURCE_LINK_x86_64: $SOURCE_LINK_x86_64 SOURCE_NAME_x86_64: $SOURCE_NAME_x86_64 SOURCE_MD5_x86_64: $SOURCE_MD5_x86_64 -------------------------------------------- " for A in "" "_x86_64" do if [ "$A" ]; then SOURCE_LINK="$SOURCE_LINK_x86_64" SOURCE_NAME="$SOURCE_NAME_x86_64" SOURCE_MD5="$SOURCE_MD5_x86_64" fi if [ "$SOURCE_LINK" = "UNSUPPORTED" -o "$SOURCE_LINK" = "UNTESTED" ]; then continue fi wget --output-document=$TMP "$SOURCE_LINK" err=$? [ $err != 0 ] && exit $err

mv --verbose $TMP "$SOURCE_NAME" err=$? [ $err != 0 ] && exit $err

MD5=`md5sum "$SOURCE_NAME"` MD5=${MD5%% *} if [ $MD5 == $SOURCE_MD5 ]; then echo -e "\033[32mКонтрольная сумма исходников СОВПАДАЕТ.\033[0m" else echo "md5 FAIL." exit 71 fi done

UPD: обновил. теперь ссылка на слакобильд берётся со страницы, а потом из info берётся ссылка на исходники. Так более надёжно.

UPD2: добавил 64х битывые версии

#162952

Стоило парсить исходники страницы, если репо доступно и по http, и по ftp, и по rsync с тривиальными путями вида http://slackbuilds.org/slackbuilds/13.37/, [url]ftp://ftp.slackbuilds.org/13.37/[/url] ?
Чем-то не устраивает информация из .info о местонахождении исходников?

text

wget ftp://ftp.slackbuilds.org/13.37/system/hwinfo.tar.gz{,.asc}
gpg --verify hwinfo.tar.gz.asc
tar xf hwinfo.tar.gz
cd hwinfo
source *.info
wget $DOWNLOAD
./*.SlackBuild
"hwinfo.info" написал:

PRGNAM="hwinfo"
VERSION="17.3"
HOMEPAGE="http://gitorious.org/opensuse/hwinfo"
DOWNLOAD="http://www.liwjatan.at/files/src/hwinfo/hwinfo-17.3.tar.xz"
MD5SUM="2d7afba416f8cb8cfd9edf3fe7407d84"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
MAINTAINER="Heinz Wiesinger"
EMAIL="pprkut@liwjatan.at"
APPROVED="rworkman"
#162972
bormant написал:
Стоило парсить исходники страницы

дык ведь проще ссылку из браузера скопипастить. там поиск удобный есть... но поиск выводит на страницу, а не на info.

#162977

Проще (да и надёжнее) ссылку на страницу преобразовать в ссылку на репу:
Ссылка:

text
http://slackbuilds.org/repository/13.37/system/hwinfo/

Тарбол{подпись} со всем необходимым, кроме исходников:

text
http://slackbuilds.org/slackbuilds/13.37/system/hwinfo.tar.gz{,asc}
ftp://slackbuilds.org/13.37/system/hwinfo.tar.gz{,asc}

.info отдельно:

text
http://slackbuilds.org/slackbuilds/13.37/system/hwinfo/hwinfo.info
ftp://slackbuilds.org/13.37/system/hwinfo/hwinfo.ifo
#162985
bormant написал:
Проще

мне всё равно что парсить. а парсить надо по любому. :P

bormant написал:
да и надёжнее

не. какая разница?

#162989

Морду можно менять в угоду моде, а формат репы стабилен.

Репа -- собственно данные, морда -- их представление, сегодня одно, завтра другое, послезавтра -- третье.

#162993
bormant написал:
Морду можно менять в угоду моде, а формат репы стабилен.

я сильно сомневаюсь, что её будут менять. а всякие <div class='НЁХ'> мой скрипт не волнуют smile
скорее поменяют md5 на sha256, но тут по любому надо будет менять...

мне как-бы не понравилась идея качать отдельно info, а потом его парсить. проще сразу скачать страничку, на которой все необходимые мне 3 ссылки...

хотя можно и по вашему, ведь info можно включить в скрипт командой source, да только что-то боязно включать скаченное непонятно откуда (ведь включать придётся ДО проверки ЭЦП).

А так я получаю слакобильд с проверенной ЭЦП.

Кстати, по уму можно брать сырцы из info, и их md5 оттуда-же...

#163006
drBatty написал:
А так я получаю слакобильд с проверенной ЭЦП.
Кстати, по уму можно брать сырцы из info, и их md5 оттуда-же...

Ура, услышан ;) Про это и твержу с самого начала.

Слакбилд (тарбол):

text
http://slackbuilds.org/slackbuilds/13.37/system/hwinfo.tar.gz

его подпись:

text
http://slackbuilds.org/slackbuilds/13.37/system/hwinfo.tar.gz.asc

он же, распакованный:

text
http://slackbuilds.org/slackbuilds/13.37/system/hwinfo/*

Т.е., преобразовали ссылку на репу, забрали тарбол, подпись, сверили, распаковали, посмотрели в .info на предмет что скачать, и не надо ли для x86_64 качать что-то отдельное, скачали, проверили сумму по md5 из info, ну и т.д.

Если идею сильно развить, выйдет очередной sbopkg ;)

#163008

Не придирок ради, а информации для...

Ещё бывают вот такие странички, разные источники для 32 и 64 бит:
http://slackbuilds.org/repository/13.37/network/opera/

ps.
А в .info в DOWNLOAD{,x86_64}= бывает "UNSUPPORTED" и "UNTESTED".

#163018
bormant написал:
Ещё бывают вот такие странички, разные источники для 32 и 64 бит:
http://slackbuilds.org/repository/13.37/network/opera/

1) новая версия справилась. Скачала 32х битную. Для закачки 64х битной надо сменить на DOWNLOAD_x86_64
и MD5SUM_x86_64 в конце скрипта.
2) на самом деле, это НЕ исходники, и не слакобильд.
это переделка RPM. его можно поставить и по другому.

bormant написал:
А в .info в DOWNLOAD{,x86_64}= бывает "UNSUPPORTED" и "UNTESTED".

ну...
где?

#163030

... не исходники, но SlackBuild -- скрипт, результатом работы которого является пакет Slackware{,64}, пусть и перепакованный из чужих бинарных пакетов.

Например, flashpligin-lahf-fix, wine, virtualbox, ...

text
$ grep 'DOWNLOAD="U' /var/lib/sbopkg/SBo/13.37/ -lR --unclude=\*.info | wc -l
1
$ grep 'DOWNLOAD_x86_64="U' /var/lib/sbopkg/SBo/13.37/ -lR --unclude=\*.info | wc -l
31

В принципе, немного.

#163057
bormant написал:
Например, flashpligin-lahf-fix, wine, virtualbox, ...

исправил

Войдите или зарегистрируйтесь, чтобы ответить.