본문 바로가기
리눅스

Creating local Debian apt repo with DEB822

by 다움위키 2025. 4. 10.

원문 보기: https://dawoum.duckdns.org/wiki/Creating_local_Debian_apt_repo/DEB822#Troubleshootings

 

Creating local Debian apt repo의 방법은 deb822 형식으로 바뀌면서 더 이상 사용할 수 없습니다.

지역 패키지도 Creating and hosting my own Debian apt repo와 같은 방법으로 설정할 수 있습니다.

먼저, 디렉토리 구조를 만듭니다:

  • mkdir -p ~/Projects/repo/pool/main
  • mkdir -p ~/Projects/repo/dists/trixie-local/main/binary-amd64

이제 테스트를 위해, 적당한 deb 파일을 저장소에 복사합니다:

  • mkdir -p ~/Projects/repo/pool/main/nala
  • cp nala_0.15.4-6_all.deb ~/Projects/repo/pool/main/nala

두 개의 파일을 만듭니다:

  • vi ~/Projects/generate-release.sh
#!/bin/sh
set -e

do_hash() {
    HASH_NAME=$1
    HASH_CMD=$2
    echo "${HASH_NAME}:"
    for f in $(find -type f); do
        f=$(echo $f | cut -c3-) # remove ./ prefix
        if [ "$f" = "Release" ]; then
            continue
        fi
        echo " $(${HASH_CMD} ${f}  | cut -d" " -f1) $(wc -c $f)"
    done
}

cat << EOF
Origin: Trixie-local Repository
Label: Trixie-local
Suite: trixie-local
Codename: tixie-local
Version: 1.0
Architectures: amd64
Components: main
Description: Trixie-local debian repository
Date: $(date -Ru)
EOF
do_hash "MD5Sum" "md5sum"
do_hash "SHA1" "sha1sum"
do_hash "SHA256" "sha256sum"

여기서 Trixie-local은 자신의 것으로 바꾸십시오. 그리고 Suite: Components: 는 저장소를 구성하는 이름이므로 적절히 정해야 하고, 아래 local.sources 파일을 참조하십시오.

  • vi ~/Projects/update-mydebs
#! /bin/bash

cd ~/Projects/repo/

dpkg-scanpackages -m pool > Packages

cat Packages | gzip -9c > Packages.gz

mv Packages Packages.gz ~/Projects/repo/dists/trixie-local/main/binary-amd64/

cd ~/Projects/repo/dists/trixie-local/

~/Projects/generate-release.sh > Release
cat Release | gpg --default-key user_id -abs > Release.gpg
cat Release | gpg --default-key user_id -abs --clearsign > InRelease

저장소에 amd64, i386, all 등과 같이 패키지가 존재할 것이므로, dpkg-scanpackages -m 으로 목록화해야 합니다.

여기서 user_id는 패키지를 제작하는 사용자 ID로 바꾸십시오.

저장소 목록을 갱신합니다:

  • bash ~/Projects/update-mydebs

이제 저장소는 준비되었으니, apt에서 목록을 읽어드리도록 설정합니다:

  • vi /etc/apt/sources.list.d/local.sources
Types: deb
URIs: file:/home/user_id/Projects/repo
Suites: trixie-local
Components: main
Enabled: yes
Signed-By: /usr/share/keyrings/user_id_sign.gpg

여기서 user_id는 패키지에 사인한 사용자 ID를 적고, user_id_sign.gpg는 사용자의 공개 키 파일로 바꾸십시오.

저장소에서 데이터를 읽고 업데이트가 되었는지 확인하십시오:

  • sudo apt update
  • apt policy nala

Troubleshootings

아키텍처별 목록화

스캔할 때, --arch amd64, --arch i386, --arch all과 같이 각각을 목록화할 수 있지만, amd64, i386 목록화도 all이 함께 들어 있어서 3개의 파일에 같은 deb 파일이 목록화됩니다.