| void |
|
|
Темы:
32
Сообщения:
375
Участник с: 15 февраля 2010
|
Переведенный с французского на английский repacman-0.98-1:
#!/bin/sh
#// repacman.sh
#// (c) 2008 - gyo <gyo_at_archlinux_dot_fr>
#// license : GPL
#// description : utility to rebuild installed package from information contained in pacman's database
_prg_name="${0##*/}"
_prg_version='0.98'
# Getting some parameters from pacman.conf
eval $(sed -re '/^[[:space:]]#/d' -e '/(DBPath|CacheDir)/s:([^[:space:]]+)[[:space:]]*=[[:space:]]*([^[:space:]]+):\1="\2":p;d' /etc/pacman.conf)
PACMAN_DB_DIR=${DBPath:-'/var/lib/pacman/'}
PACMAN_CACHE_DIR=${CacheDir:-'/var/cache/pacman/pkg/'}
FILE_PREP_DIR="/tmp/${_prg_name}_$$"
CURRENT_DIR="`pwd`"
DEBUG=0
#------ function ------#
function f_generate_pkginfo {
[ -e $package_dir/desc ] || _f_missed_file desc 3
dateR=`date -R`
cat << EOF > .PKGINFO
# Generated by $_prg_name $_prg_version
# $dateR
EOF
function file_stream {
cat $package_dir/desc
[ -e $package_dir/depends ] && cat $package_dir/depends
sed -rne '/%BACKUP%/,$s/^([^[:space:]]+).*/\1/p' $package_dir/files
}
file_stream | while read; do
case $REPLY in
%NAME%) pkginfo_var='pkgname';;
%VERSION%) pkginfo_var='pkgver';;
%DESC%) pkginfo_var='pkgdesc';;
%GROUPS%) pkginfo_var='group';;
%URL%) pkginfo_var='url';;
%LICENSE%) pkginfo_var='license';;
%ARCH%) pkginfo_var='arch';;
%BUILDDATE%) pkginfo_var='builddate';;
%PACKAGER%) pkginfo_var='packager';;
%SIZE%) pkginfo_var='size';;
%REPLACES%) pkginfo_var='replace';;
%DEPENDS%) pkginfo_var='depend';;
%CONFLICTS%) pkginfo_var='conflict';;
%PROVIDES%) pkginfo_var='provide';;
%BACKUP%) pkginfo_var='backup';;
%*%) unset pkginfo_var;;
*)
if [ -n "$REPLY" -a -n "$pkginfo_var" ]; then
echo "$pkginfo_var = $REPLY" >> .PKGINFO
fi
;;
esac
done
}
function f_create_tar {
mkdir $FILE_PREP_DIR
cd $FILE_PREP_DIR
[ -e $package_dir/files ] || _f_missed_file files 2
sed -rne '/%FILES%/,/%BACKUP%/{/^(%FILES%|%BACKUP%| *)$/d;s:^:/:p}' $package_dir/files > .FILELIST
if [ -e $package_dir/install ]; then
cd $FILE_PREP_DIR
cp $package_dir/install .INSTALL
fi
if [ -e $package_dir/changelog ]; then
cd $FILE_PREP_DIR
cp $package_dir/changelog .CHANGELOG
fi
f_generate_pkginfo
echo
bsdtar czvf $CURRENT_DIR/$pkgname_ver.pkg.tar.gz --exclude=. --exclude=.. --exclude=.FILELIST -n -T .FILELIST .*
}
function _f_missed_file {
echo "! File \"$1\" is missing" >&2
exit $2
}
function f_help {
cat << EOF
[ $_prg_name $_prg_version ]
$_prg_name package_name (ex: $_prg_name hal)
-h : show this help
EOF
}
#------ end function ------#
#------ MAIN ------#
if [ "`id -u`" != 0 -a `type -p fakeroot` ]; then
fakeroot -- $0 $@
exit $?
fi
if ((!$#)); then
echo "Error: not enough arguments !"
echo
f_help
exit 1
fi
if [ "$1" = '-h' ]; then f_help; exit 0; fi
pkgname="$1"
package_dir=`echo $PACMAN_DB_DIR/local/$pkgname-[0-9]*`
if [ ! -d $package_dir ]; then
echo "Package \"$pkgname\" does not exist in the database !"
exit 1
fi
pkgname_ver=${package_dir##*/}
if [ -f $PACMAN_CACHE_DIR/$pkgname_ver.pkg.tar.gz ]; then
echo "Package \"$pkgname_ver.pkg.tar.gz\" already exists in cache repository : $PACMAN_CACHE_DIR"
read -n 1 -p 'Continue (y/N) ? '
case $REPLY in
y|Y) ;;
*) echo -e '\nBye.'; exit 0;;
esac
echo
fi
echo "- Full package name : $pkgname_ver"
if (($DEBUG)); then
echo $package_dir
fi
read -n 1 -p 'Continue (Y/n) ? '
case $REPLY in
n|N) echo -e '\nBye.'; exit 0;;
*) ;;
esac
pkgname_ver="${package_dir##*/}"
f_create_tar
if ((!$DEBUG)); then
rm -fr $FILE_PREP_DIR
fi
cd $CURRENT_DIR
echo "--> $CURRENT_DIR/$pkgname_ver.pkg.tar.gz created !"
exit 0
#------ END MAIN ------#Устанавливается по комманде yaourt -S repacman-en Могу сделать русскую версию, если кому надо. |
| vadik |
|
|
Темы:
55
Сообщения:
5395
Участник с: 17 августа 2009
|
А почему не в АУР? |
| void |
|
|
Темы:
32
Сообщения:
375
Участник с: 15 февраля 2010
|
а куда можно положить скрипт, чтобы он всегда был доступен в сети? |
| mango |
|
Темы:
43
Сообщения:
1521
Участник с: 18 декабря 2008
|
ну дык, в аур-ный пакет и засунуть. |
| void |
|
|
Темы:
32
Сообщения:
375
Участник с: 15 февраля 2010
|
действительно! я думал в AUR хранятся только PKGBUILDs. Вернусь с работы, сделаю. UPD Теперь английский repacman можно установить коммандой yaourt -S repacman-en |
| dimonezzz |
|
|
Темы:
0
Сообщения:
1
Участник с: 21 июня 2011
|
а для чего он нужен? |
| bestrafer |
|
Темы:
1
Сообщения:
23
Участник с: 30 апреля 2009
|
#// description : utility to rebuild installed package from information contained in pacman's database |
| lampus |
|
|
Темы:
1
Сообщения:
10
Участник с: 28 ноября 2010
|
Небольшое замечание, совместно со скриптами на bash можно использовать gettext, это гораздо более правильный способ перевода сообщений. http://www.linuxjournal.com/content/int … sh-scripts И на русском: http://kalina.lug.ru/wiki/%D0%98%D0%BD% … 0%BE%D0%B2 |
| Nebulosa |
|
Темы:
10
Сообщения:
830
Участник с: 05 марта 2009
|
BESTRAFERЭто что-то навроде makeworld и PacBuilder? Для скучающих по Gentoo? :)#// description : utility to rebuild installed package from information contained in pacman's database ТС поправь ссылку в PKGBUILD на http://archlinux.fr/repacman |
| void |
|
|
Темы:
32
Сообщения:
375
Участник с: 15 февраля 2010
|
Nebulosa, нет, репакмен просто собирает файлы какого-либо установленного пакета в системе и пакует в установочный тарболл. Например, если нужно забекапить пакет перед обновлением, которого не сохранилось в кеше пакмана… Поправил адрес и права на скрипт. Спасибо. |