설치된 패키지에서 패키지 파일을 다시 만드는 방법은 무엇입니까?

설치된 패키지에서 패키지 파일을 다시 만드는 방법은 무엇입니까?

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하지만 이제는 잘 작동합니다.

관련 정보