yaourt
불행하게도 기본 구성에서 빌드된 패키지가 설치 후 제거된다는 사실을 무시하고 AUR 패키지를 성공적으로 빌드하고 설치 했습니다 . 빌드하는 데 약 24시간이 걸리고 나중에 사용할 수 있도록 패키지를 준비하는 것이 유용할 수 있으므로 다시 빌드하지 않고도 설치된 바이너리에서 패키지를 다시 빌드할 수 있는 방법이 있습니까 makepkg
? 또는 더 일반적으로 이것이 반드시 필요한 것은 아니기 때문에 yaourt
다음과 같습니다.
makepkg
다시 컴파일하지 않고 설치 및 소스에서 생성된 패키지를 검색하는 방법은 무엇입니까 ?
답변1
시스템의 팩맨 데이터베이스와 파일을 사용하여 패키지를 다시 만드는 pacman
패키지의 일부인 스크립트가 있습니다 .bacman
그러나 설치 후 파일 수정으로 인해 패키지가 달라질 가능성이 높으므로 이 방법은 최후의 수단으로만 사용해야 합니다.
답변2
의심스럽긴 하지만, 여기 여러분에게 도움이 되는 몇 가지 팁이 있습니다.
종속성 및 파일은 에 저장되므로 /var/lib/pacman/local/XX-Version/{desc, files}
압축하는 것이 어렵지 않습니다.
xz 패키지의 계층 구조는 다음과 같아야 합니다.
.PKGINFO 및 .INSTALL(설치 후 스크립트)은 PKGBUILD(abs 또는 yaourt를 통해 검색 가능)에서 변환될 수 있습니다.
답변3
팁을 주셔서 감사합니다워커의 대답나는 다음 스크립트를 작성했습니다 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
설치에 따라 수정을 자동화하는 등 개선의 여지는 확실히 많습니다 . desc
하지만 이제는 잘 작동합니다.