Intereting Posts

Как воссоздать файл пакета из установленного пакета?

Я использовал yaourt для успешной сборки и установки пакета AUR, к сожалению, отсутствовал тот факт, что в конфигурации по умолчанию встроенный пакет удаляется после установки. Поскольку сборка заняла около 24 часов, и, возможно, пакет, доступный для более поздней версии, может быть полезен, есть ли способ восстановить пакет из установленных двоичных файлов вместо того, чтобы снова makepkg его? Или в более общем плане, поскольку это не обязательно yaourt yaourt:

Как извлечь makepkg пакет makepkg из установки и источника без необходимости перекомпилировать?

Я сомневаюсь, но вот несколько советов, которые работают на вас,

Зависимости и файлы хранятся в /var/lib/pacman/local/XX-Version/{desc, files} , поэтому их сложно сжать.

Иерархия в пакете xz должна быть такой:

введите описание изображения здесь

PKGINFO и .INSTALL (сценарий после установки) могут быть преобразованы из PKGBUILD (который извлекается через abs или yaourt).

Благодаря подсказкам в ответе warl0ck я написал этот скрипт fakepkg :

 #!/bin/bash set -e OLDDIR=$PWD NEWDIR=$(mktemp -dt fakepack.XXX) cd $NEWDIR yaourt -G $1 cd $1 #TODO this can probably be retrieved from the pacman desc file while true; do read -p "Edit PKGBUILD? [yn]" -n1 yn case $yn in [Yy]* ) $EDITOR PKGBUILD; break;; [Nn]* ) echo; break;; * ) echo ;; esac done . PKGBUILD srcdir=$NEWDIR/$1/src # In case you are wondering: this tries to compensate for packages not using # a simple src/packagename-pkgver/ structure. It will probably still break... PKSUB=$(eval "echo $(grep -o '\${\?srcdir.*pkgver}\?' PKGBUILD | head -n1 )") SRC=${PKSUB##$NEWDIR/$1/} echo "Putting the $1 source to $SRC" PKG=$pkgname-$pkgver # SRC="src/$PKG/" FILES="/var/lib/pacman/local/$PKG-$pkgrel/files" if [ ! -f $FILES ]; then echo "$FILES not found, is $1 actually installed?" exit 1 fi #TODO use existing sources or skip this entirely # but it's the easiest way to later use makepkg -R echo "Reloading source" makepkg -o echo "Collecting $1 files" mkdir -p $SRC/files/ while IFS= read -r line; do if [ -f "/$line" ]; then mkdir -p $SRC/files/$(dirname $line) rsync -a /$line $SRC/files/$line fi done < $FILES echo "Creating fake Makefile" echo 'install:' > $SRC/Makefile echo ' mv files/* $(DESTDIR)' >> $SRC/Makefile rm -f $SRC/GNUmakefile echo "Creating package" makepkg -R mv *.xz $OLDDIR cd $OLDDIR rm -rf $NEWDIR 

Запустите fakepkg packagename , при необходимости адаптируйте PKGBUILD и надейтесь на package---.pak.tar.xz в вашем текущем каталоге.

Конечно, есть много возможностей для совершенствования, например, автоматическая модификация PKGBUILD соответствии с PKGBUILD установки, а не загрузка всего источника. Но пока это работает нормально.

Существует скрипт, который является частью пакета pacman под названием bacman который воссоздает пакет, используя базу данных pacman и файлы в вашей системе.

Обратите внимание, однако, что такой подход следует использовать только в качестве последнего средства, так как, например, пакет, возможно, будет отличаться из-за изменений в файлах после установки.