Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Для подписывания пакетов может быть использован скрипт.

Раскрыть
titlesign-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"


В скрипте необходимо указать

Блок кода
titlesign-deb_package.sh
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

...