개인 저장소에 추가하기 위해 내 Arch Linux git 패키지에 어떻게 서명합니까?

개인 저장소에 추가하기 위해 내 Arch Linux git 패키지에 어떻게 서명합니까?

GPG 키를 구성했습니다. git 소스 패키지를 로컬로 복제했습니다. 나는 chroot를 사용하여 extra-x86_64-build. 패키지를 만들 수 있어요아니요서명하고 로컬 개인 저장소에 추가하세요. 이제 패키지를 만들고 싶습니다.서명를 설치할 때 클라이언트에서 서명 확인이 필요한 개인 로컬 저장소에 추가했습니다 pacman.

단계는 무엇입니까?

다음은 다양한 Arch 위키 페이지, 매뉴얼 페이지 및 기타 장소에서 수집한 현재 단계입니다. 현재 수행 중인 작업과 여전히 혼란스럽거나 문제가 있는 부분을 보여주기 위해 몇 가지 세부 정보를 제공했습니다. 참고: 처음 세 섹션을 아무 문제 없이 완료할 수 있었습니다. 내 문제는 그 이후부터 시작됐다.

초기 일반 단계(모두 완료됨):

  1. 위키 페이지 읽기(예:https://wiki.archlinux.org/index.php/Creating_packages)
  2. 설치하다 base-devel, devtools, namcap,shellcheck
  3. systemctl status haveged# 활성화되어 있는지 확인하세요

예비 패키지 서명 단계(모두 완료됨):

  • /usr/share/devtools/pacman-extra.conf를 확인하세요.
    • 여기에 로컬 개인/사용자 지정 저장소를 추가했습니다(기본 SigLevel 사용).
  • /etc/makepkg.conf를 편집합니다:
    • BUILDENV=(!distcc color !ccache check sign)sign# 활성화되어 있는지 확인하세요
    • PACKAGER="My Name <[email protected]>"
    • GPGKEY="1234ABCD09876"# 키 지문은 공백 없이 모두 대문자로 사용하세요.
  • 사용자 키링의 기존 GPG 키를 사용하여 다음 단계를 수행합니다.
    • gpg --armor --output mykey.sec --export-secret-keys 1234ABCD09876
    • sudo pacman-key -a mykey.sec
    • sudo pacman-key --finger 1234ABCD09876
    • sudo pacman-key --lsign-key 1234ABCD09876

소스 파일 PKGBUILD 준비(완료):

  1. git clone ${url}# 또는 이미 복제된 경우 git pull
  2. PGBUILD를 확인하세요.
  3. namcap -i PKGBUILD
  4. makepkg --packagelist# 버전 번호 확인(선택 사항)

질문:

  1. 참고 - 저는 내부의 신뢰할 수 있는 소스 파일로 시작했습니다. 서명되지 않았으며 시작할 때 PKGBUILD에 금액이 없습니다.
  2. .sig빌드된 패키지와 해당 파일 의 합계를 포함하도록 PKGBUILD를 수정하려면 어떻게 해야 합니까 ?
    • .sigPKGBUILD에 패키지 파일이 추가되는 단계는 무엇입니까? 당신은 그렇게 않았다 방법?
  3. PKGBUILD에 빌드 패키지의 합계는 언제 추가되나요?
    • 이 단계는 언제 실행해야 합니까? makepkg -g >> PKGBUILD
    • 이것을 언제 사용하나요? 패키지 합계 업데이트

다음으로 chroot 환경에서 패키지를 빌드합니다.단지 아니패키지 서명)

`extra-x86\_64-build`

참고: 다음 문제가 발생했습니다. makepkg: 동적 버전으로 소스 패키지에 서명할 수 없습니다.https://bbs.archlinux.org/viewtopic.php?id=259771(이 문제는 팩맨의 다음 버전에서 수정될 것 같나요? 현재 해결책은 VCS 파생 버전을 사용하는 대신 버전 번호를 하드코딩하는 것 같아요.)

개인 저장소에 추가하는 방법(pkg 서명 없이 이 작업을 수행할 수 있지만 테스트용으로 서명된 패키지를 성공적으로 만들지 못했습니다):

  • newpkg="mypackage.r10.918a28e-1-any.pkg.tar.zst" # 예
  • namcap -i "$newpkg"
  • repoctl add --require-signature "$newpkg"

재구매 질문:

  • --require-signature위 줄에 arg가 필요합니까?

답변1

$pkg내부적으로 패키지를 구축 했고 ~/build다음을 원한다고 가정해 보겠습니다 .서명한 다음 서명된 데이터베이스에 추가하세요.이름을 지정하십시오 . 이를 사용하고 수행하는 방법에 대한 단계는 test_repo다음과 같습니다 .gpgrepo-add

pkg=some-package-0.0.2-1-any.pkg.tar.zst

# Create a detached signature.
gpg --use-agent --output ~/build/"${pkg}".sig --detach-sig ~/build/"${pkg}" 

# Copy package and its signature to repository directory.
cp ~/build/"${pkg}"{,.sig} ~/repo/

# Add package to repository and sign it.
repo-add --verify --sign ~/repo/test_repo.db.tar.gz ~/repo/"${pkg}"

도착하다설치하다포장 및서명이 유효한지 테스트, 다음에 저장소를 추가할 수 있습니다 /etc/pacman.conf.

[test_repo]
SigLevel = Required TrustedOnly
Server = file:///home/YOUR-USERNAME/repo

그런 다음 실행 pacman -Syu하고 pacman -S some-package.

서명 키를 팩맨 키링으로 가져오지 않은 경우 팩맨은 키 ID를 표시하고 가져오도록 요청합니다. 네 라고 말하다. 그런 다음 가져온 키에 서명 sudo pacman-key --lsign <key-id>하고 패키지를 다시 설치해 보세요.

원천:

  • https://archlinux.org/pacman/makepkg.conf.5.html

    • --sign옵션 makepkg재정의 sign의 설정을 사용하십시오 makepkg.conf. "이 작업은 GPG 에이전트(사용 가능한 경우)를 사용하여 분리된 서명 파일을 생성하기 위해 빌드된 패키지에서 수행됩니다 gpg --detach-sign --use-agent. 서명 파일은 확장자가 ".sig"인 패키지의 전체 파일 이름이 됩니다.
  • https://wiki.archlinux.org/title/DeveloperWiki:Package_signing#Arch_implementation

    • "[...] .[...] 사용 repo-add --verify --sign이러한 옵션과 별도로 repo-add분리된 서명이 감지되어 base64를 통해 ASCII로 변환되고 저장소 데이터베이스에 추가됩니다.

나는 경험이 없다보고서, 하지만 위의 내용이 도움이 되기를 바랍니다. 아마도 gpg 서명을 만든 다음 실행하면 충분할 것입니다.repoctl add --require-signature ~/build/"${pkg}"

관련 정보