...
Для подписывания пакетов может быть использован скрипт.
Раскрыть |
---|
title | sign-deb_packagedeb16.sh |
---|
|
Блок кода | title |
---|
sign-deb_package.sh | #!/bin/bash
#---------------------
key_id=""
pass_file=""
DIR_BIN=$1
DIR_SIGNED=$2
#---------------------
TMP_DIR=$DIR_SIGNED/tmp$$
SIGN_LOG=sign.log
GPG_VER=`gpg --version | head -n 1 | sed -e 's/gpg (GnuPG) //'`
if [ -z
if [ -z $DIR_BIN ] ; then
echo "Specify original directory as first argument."
exit 1
fi
if [ -z $DIR_SIGNED ] ; then
echo "Specify destination directory as second argument."
exit 1
fi
if [ ! -e $DIR_BIN ] ; then
echo "Original directory $DIR_BIN doesn't exist."
exit 1
fi
list_of_packages=`find $DIR_BIN -type f -name "*.deb"`
list_of_udebs=`find $DIR_BIN -type f -name "*.udeb"`
#echo $list_of_packages
for i in $list_of_packages ; do
pack_name=`echo $i | awk '{sub(/^.+\//,"",$0) ; a=$0; print a}'`
mkdir -p $TMP_ echo "Unpacking $pack_name"
mkdir -p $TMP_DIR/{control,data}
cp $i $TMP_DIR
pushd $TMP_DIR
&>/dev/null
fakeroot ar x $pack_name
SIGN_LOG=${DIR_SIGNED}/${pack_name}.log
# Definig archives type
data_arch_type=`ls data.tar* | cut -d'.' -f3`
control_arch_type=`ls control.tar* | cut -d'.' -f3`
popd
# Unpack data archive
pushd popd &>/dev/null
# Unpack data archive
pushd $TMP_DIR/data
&>/dev/null
case $data_arch_type in
xzgz)
fakeroot tar --same-permissions --same-owner -xJfxzf ../data.tar.xz
;;
gz)
gz
;;
bz2)
fakeroot tar --same-permissions --same-owner -xzfxjf ../data.tar.gz
;;
bz2)
bz2
;;
lzma)
fakeroot tar --same-permissions --same-owner --lzma -xjfxf ../data.tar.bz2
;;
lzma)
lzma
;;
xz)
fakeroot tar --same-permissions --same-owner --lzma -xfxJf ../data.tar.lzma
xz
;;
esac
popd popd &>/dev/null
# Unpack control archive
pushd $TMP_DIR/control
&>/dev/null
case $control_arch_type in
xz)
gz)
fakeroot tar --same-permissions --same-owner -xJfxzf ../control.tar.xz
gz
;;
gzbz2)
tar --same-permissions --same-owner -xzf ../control.tar.gz
;;
bz2)
tar fakeroot tar --same-permissions --same-owner -xjf ../control.tar.bz2
;;
lzma)
fakeroot tar --same-permissions --same-owner --lzma -xf ../control.tar.lzma
;;
esac
popd
# Sign files
pushd $TMP_DIR/data
for file in `find . -type f` ; do
xz)
fakeroot tar --same-permissions --same-owner -xJf ../control.tar.xz
;;
esac
popd &>/dev/null
# Sign files
pushd $TMP_DIR/data &> /dev/null
list=`find . -type f`
for file in $list ; do
elf=`file $file | cut -d: -f2 | awk -F' ' '{print $1}'`
if [ $elf = "ELF" ]; then
#if [ "$(file $file | grep ELF)" ];then
oldstat=`stat -c %a $file`
bsign -N -s --pgoptions="--batch --pinentry-mode=loopback --defaultpassphrase-keyfile=A1xxxxxxCE4xxxxxx41Dxxxxxxx9FCxxxxxx$pass_file --passphrasedefault-file=/home/user/key_password.txtkey=$key_id" $file
bsign -V $file | grep -v "not ELF64"
bsign -w $file
| grep -v "not ELF64"
newstat=`stat -c %a $file`
[ $newstat != $oldstat ] && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} && echo "BSIGN_CHMOD_ERROR in $file" >> ${SIGN_LOG} 2>&1
done
popd
2>&1
else
echo "$file not ELF"
fi
done
popd &> /dev/null
# Counting md5sums
pushd $TMP_DIR/control
&>/dev/null
if [ -e ./md5sums ] ; then
filenames=`cat md5sums | awk -F' ' '{print $2}'`
popd
popd &>/dev/null
pushd $TMP_DIR/data
&> /dev/null
for j in $filenames
do
do
echo `md5sum $j` >> $TMP_DIR/control/md5sums.new
done
done
sed -e 's/\ /\ \ /g' $TMP_DIR/control/md5sums.new > $TMP_DIR/control/md5sums.new_mod
popd
/md5sums.new_mod
popd &> /dev/null
mv -f $TMP_DIR/control/md5sums.new_mod $TMP_DIR/control/md5sums
&> /dev/null
rm -f $TMP_DIR/control/md5sums.new
&> /dev/null
fi
# Packing back in deb
pushd $TMP_DIR/data
&> /dev/null
case $data_arch_type in
xz)
gz)
fakeroot tar --same-permissions --same-owner -cJfczf ../data.tar.xzgz .
;;
gzbz2)
fakeroot tar --same-permissions --same-owner -czfcjf ../data.tar.gzbz2 .
;;
bz2)
lzma)
fakeroot tar --same-permissions --same-owner -cjf-lzma -cf ../data.tar.bz2lzma .
;;
lzma)
xz)
fakeroot tar --same-permissions --same-owner --lzmacJf -cf ../data.tar.lzmaxz .
;;
esac
popd
popd &> /dev/null
pushd $TMP_DIR/control
&> /dev/null
case $control_arch_type in
type in
gz)
fakeroot xz)
tar --same-permissions --same-owner -cJvfczvf ../control.tar.xzgz .
;;
gz)
bz2)
fakeroot tar --same-permissions --same-owner -czvfcjvf ../control.tar.gzbz2 .
;;
bz2)
;;
lzma)
fakeroot tar --same-permissions --same-owner --lzma -cjvfcvf ../control.tar.bz2lzma .
;;
lzma)
xz)
fakeroot tar --same-permissions --same-owner --lzma -cvfcJvf ../control.tar.lzmaxz .
;;
esac
popd
popd &> /dev/null
pushd $TMP_DIR
&> /dev/null
fakeroot ar rcs $TMP_DIR/$pack_name debian-binary control.tar.$control_arch_type data.tar.$data_arch_type
cp $pack_name $DIR_SIGNED/
popd
&> /dev/null
cp ${pack_name} $DIR_SIGNED/${pack_name%.deb}_signed.deb &> /dev/null
echo "Creating $DIR_SIGNED/${pack_name%.deb}_signed.deb"
popd &> /dev/null
rm -rf $TMP_DIR &> /dev/null
done
for j in $list_of_udebs ; do
cp $j $DIR_SIGNED
done
echo "Sign done"
|
|
В скрипте необходимо указать
Блок кода |
---|
|
bsign -N -s --pgoptions="--batch --pinentry-mode=loopback --default-key=A1xxxxxxCE4xxxxxx41Dxxxxxxx9FCxxxxxx --passphrase-file=/home/user/key_password.txt" $file |
cp $j $DIR_SIGNED
done
echo "done"
exit 0 |
|
В скрипте необходимо указать
key_id="ID Вашего ключа"
pass_file="Путь где - A1xxxxxxCE4xxxxxx41Dxxxxxxx9FCxxxxxx - ID ключа, а /home/user/key_password.txt - путь к файлу с парольной фразой."
Скрипт должен запускаться от имени пользователя root. В качестве первого аргумента должен быть указан полный путь до каталога, содержащего пакеты, которые необходимо подписать. В качестве второго аргумента должен быть указан каталог, в который будут помещаться подписанные пакеты.
Command |
---|
sign-deb_packagedeb16.sh /root/pkg /root/pkg_sign |
...