Есть кривой скрипт. Сам писал. Как бы его улучшить, что бы он подписывал сразу все пакеты, а не спрашивал пароль для каждого пакета?
Еще хочется что бы была проверка уже подписанных пакетов и подписывать только новые. Поможете?
Вынеси запрос на ввод пароля из функции, запомни пароль в переменную, да и дело с концом. И там, где надо, подставляй. А перед началом процесса подписывания пройдись по списку циклом с rpm --checksig, и на основе этого формируй список неподписанных пакетов, который и скармливай функциям подписывания...
Окей попробую. Но я не силен в баше, хотя сделать точно надо. Буду стараться. Если что надеюсь на помощь форума. А может подскажите, пример кинете, как сделать? Понимаю что не айс просьба ))) Но все же.
Это rpm требует пароль? (немного непонятно, зачем тогда его спрашивать, если он пустой)
Ок, тогда чуток попозже -- нужно накатить что-нибудь rpm-based, чтобы отладить скрипт.
Показать
P.S. В Интернете я не так чтобы уж совсем щепетильно отношусь к обращению «ты»/«вы», так что можете ко мне и на «ты», да и вроде бы в одной команде работаем :[
yars,
Проблема в том что rpm --addsign спрашивает ключевую фразу сразу после отработки. Из-за него и пришлось использовать expect.
Собственно скрипт рабочий. Хоть и для каждого пакета вводится пустой пароль, главное что в автомате. Подскажи как мне на него напустить именно те пакеты которые еще не подписаны?
Если не ошибаюсь, rpm сам не подписывает, а вызывает для подписи gpg. После освоения gpg накатал такой скриптик:
Показать
text
#!/bin/bash
# Sign the packages in a specified directory.
# Written by yars, Tambovskaya oblast, Russia.
# <yars068@yandex.ru>
# Copyright 2012. All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
checkgpg()
{
gpg --verify $1
}
funcgpg()
{
echo -n "Enter passphrase: "
read pass
for file in `find $1 -name "*.txz"` ; do
echo "Checking the signature of $file:"
if [ ! `checkgpg "$file" 2>/dev/null` ] ; then
echo -n "Signature not found. Signing up package: $file: "
gpg -ba --yes --no-tty --passphrase $pass $file 2>/dev/null 1>/dev/null && echo " Done."
fi;
done
}
# Checking for arguments are specified:
case $# in
0) echo "Usage: $0 path-to-directory"
exit 1;;
*) funcgpg $1;;
esac
Еще немного допилить надо, чуть позже выложу окончательный вариант :)
UPD: пока так:
Показать
text
#!/bin/bash
# Sign or verify the signatures of packages in a directory.
# Written by Yaroslav Shmelev, Tambovskaya oblast, Russia.
# aka yars <yars068@yandex.ru>
# Copyright 2012. All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
funcgpg()
{
echo -n "Enter passphrase: "
read -s pass
echo "Location of packages: $1."
while read l ; do
echo -n "Checking the signature of $(basename "$l")... "
if ! `checkgpg "$l.$SIGTYPE" 2>/dev/null` ; then
echo "Signature not found."
echo -n "Signing up package: $(basename "$l")... "
gpg -ba --yes --no-tty --passphrase $pass "$l" 2>/dev/null 1>/dev/null && echo " Done."
else
echo "Already signed. Skipping."
fi;
done < <( find $1 -name "*.txz" )
}
# Checking for arguments are specified:
case $1 in
--sign) shift
if [ -d $1 ]; then
funcgpg $1
fi;;
--check) shift
if [ -d $1 ]; then
echo "Location of packages is: $1."
while read l; do
echo -n "Checking: $(basename "$l")... "
if `checkgpg "$l.$SIGTYPE"` ; then
echo " Signed"
else
echo " Not signed."
fi;
done < <( find $1 -name "*.txz" );
else
echo "$1 isn't directory. Exiting."
fi;;
*) echo "Usage: $0 --sign | --check path-to-directory"
exit 0;;
esac
Наверное, тоже не самый оптимальный вариант, но он работает. Умеет проверять и подписывать пакеты...
Примеры:
подписываем
text
./signpackages.sh --sign soft/Linux/Packages/slackware-14.0/
Enter passphrase:
Location of packages: soft/Linux/Packages/slackware-14.0/.
Checking the signature of gedit-3.4.2-i486-1_yars.txz... Signature not found.
Signing up package: gedit-3.4.2-i486-1_yars.txz... Done.
Checking the signature of slim-1.3.4-i486-2_yars.txz... Signature not found.
Signing up package: slim-1.3.4-i486-2_yars.txz... Done.
Checking the signature of network-manager-applet-0.9.8.0-i486-1_yars.txz... Signature not found.
Signing up package: network-manager-applet-0.9.8.0-i486-1_yars.txz... Done.
Checking the signature of wxPython-2.8.12.1-i486-1_yars.txz... Signature not found.
Signing up package: wxPython-2.8.12.1-i486-1_yars.txz... Done.
Checking the signature of MPlayer-1.0rc4-i486-1_yars.txz... Signature not found.
Signing up package: MPlayer-1.0rc4-i486-1_yars.txz... Done.
Checking the signature of opera-12.00-i386-1_yars.txz... Signature not found.
Signing up package: opera-12.00-i386-1_yars.txz... Done.
Checking the signature of flash-player-plugin-11.2_r270-i486-1_yars.txz... Signature not found.
Signing up package: flash-player-plugin-11.2_r270-i486-1_yars.txz... Done.
Checking the signature of flash-player-plugin-11.2_r258-i486-1_yars.txz... Signature not found.
Signing up package: flash-player-plugin-11.2_r258-i486-1_yars.txz... Done.
Checking the signature of opera-12.14-i386-1_yars.txz... Signature not found.
Signing up package: opera-12.14-i386-1_yars.txz... Done.
Checking the signature of modem-manager-gui-0.0.15.4-i486-1_yars.txz... Signature not found.
Signing up package: modem-manager-gui-0.0.15.4-i486-1_yars.txz... Done.
Checking the signature of xfce4-xkb-plugin-0.5.4.3-i486-1_yars.txz... Signature not found.
Signing up package: xfce4-xkb-plugin-0.5.4.3-i486-1_yars.txz... Done.
Checking the signature of xfce4-genmon-plugin-3.4-i486-1_yars.txz... Signature not found.
Signing up package: xfce4-genmon-plugin-3.4-i486-1_yars.txz... Done.
Checking the signature of xfce4-mailwatch-plugin-git20130427-i486-1_yars.txz... Signature not found.
Signing up package: xfce4-mailwatch-plugin-git20130427-i486-1_yars.txz... Done.
проверяем
text
./signpackages.sh --check soft/Linux/Packages/slackware-14.0/
Location of packages is: soft/Linux/Packages/slackware-14.0/.
Checking: gedit-3.4.2-i486-1_yars.txz... Signed
Checking: slim-1.3.4-i486-2_yars.txz... Signed
Checking: network-manager-applet-0.9.8.0-i486-1_yars.txz... Signed
Checking: wxPython-2.8.12.1-i486-1_yars.txz... Signed
Checking: MPlayer-1.0rc4-i486-1_yars.txz... Signed
Checking: opera-12.00-i386-1_yars.txz... Signed
Checking: flash-player-plugin-11.2_r270-i486-1_yars.txz... Signed
Checking: flash-player-plugin-11.2_r258-i486-1_yars.txz... Signed
Checking: opera-12.14-i386-1_yars.txz... Signed
Checking: modem-manager-gui-0.0.15.4-i486-1_yars.txz... Signed
Checking: xfce4-xkb-plugin-0.5.4.3-i486-1_yars.txz... Signed
Checking: xfce4-genmon-plugin-3.4-i486-1_yars.txz... Signed
Checking: xfce4-mailwatch-plugin-git20130427-i486-1_yars.txz... Signed