2019/12/03

Local 자장소 만들기

로컬 컴퓨터의 저장소 패키지 설치

목차
1. 필요 패키지 다운로드
2. 키 생성
3. 저장소 생성
4. 저장소 목록 추가
5. 웹서버 연동.

1. 필요 패키지 다운로드
의존성 확인 스크립트
#!/bin/sh

if [ $# -ne 1 ]; then
  prog=`basename ${0}`
  echo "usage: ${prog} <package>"
  exit 1
fi

TMP=`mktemp -t a.sh.XXXXXX`
trap "rm $TMP* 2>/dev/null" 0

check_virtual_package()
{
  apt show $1 2> /dev/null | grep "not a real package" > /dev/null
  return $?
}

get_provide_package()
{
  apt install -s $1 > ${TMP} 2> /dev/null

  local state=0
  local pkgs=""
  while read line; do
    if [ "${line}x" = "Package $1 is a virtual package provided by:x" ]; then
      state=1
    elif [ ${state} -eq 1 -a -n "${line}" ]; then
      pkg=`echo ${line} | awk '{ print $1 }'`
      echo ${pkg} | grep -v ':i386' > /dev/null && pkgs="${pkg} ${pkgs}"
    fi
  done < ${TMP}

  echo "${pkgs}"
}

get_depend_package()
{
  local pkgs=""
  local pkg=""

  for pkg in `apt-rdepends $1 2> /dev/null | grep -v "^  "`; do
    check_virtual_package ${pkg}
    if [ $? -eq 0 ]; then
      pkg=`get_provide_package ${pkg}`
    fi
    pkgs="${pkgs} ${pkg}"
  done

  echo "${pkgs}"
}

download_deb_package()
{
  local pkgs=""
  pkgs=`get_depend_package $1`
  apt download ${pkgs}
}

download_deb_package $1


$ sudo apt install -y apt-rdepends
$ mkdir deb
$ cd deb
$ ../download-deb-package.sh ubuntu-desktop
$ cd ..

2. 키 생성
GPG 키 생성시 난수 바이트를 사용.
시간 지체됨.

$ sudo apt install -y rng-tools
$ sudo rngd -r /dev/urandom

GPG 키 구성 파일
$ cat <<EOF > gpg.txt
Key-Type: RSA
Subkey-Type: RSA
Name-Real: flroot2
Expire-Date: 0
%pubring public.key
%secring signing.key
%commit
EOF

GPG 배치 및 추출
$ gpg --batch --gen-key gpg.txt
$ gpg --import public.key signing.key

3. 저장소 생성
$ sudo apt install -y reprepro

저장소 정보 설정
$ dir=`pwd`
$ subkey=`gpg --list-keys --keyring ${dir}/public.key --no-default-keyring | \
grep sub | awk '{ print $2 }' | awk -F'/' '{ print $2 }'`

디렉토리 만들고 설정 파일 저장
$ mkdir repo
$ cd repo
$ mkdir conf

$ cat <<EOF > conf/distributions
Codename: xenial ---> 리눅스 시스템.
Architectures: amd64
Components: main
SignWith: ${subkey}
EOF

정장소 정보 추가
$ reprepro includedeb xenial ~/deb/*.deb

공개키 복사
$ cp ../public.key .

4. 저장소 목록 추가
$ sudo apt-add-repository "deb file:/home/flroot2/repo xenial main"

변경 사항
$ diff -uprN /etc/apt/sources.list{.org,}
--- /etc/apt/sources.list.org   2016-08-13 07:43:32.618218136 +0900
+++ /etc/apt/sources.list       2016-08-13 07:49:19.777011499 +0900
@@ -48,4 +48,6 @@ deb-src http://security.ubuntu.com/ubunt
 deb http://security.ubuntu.com/ubuntu xenial-security universe
 deb-src http://security.ubuntu.com/ubuntu xenial-security universe
 deb http://security.ubuntu.com/ubuntu xenial-security multiverse
+deb file:/home/flroot2/repo xenial main
+# deb-src file:/home/flroot2/repo xenial main
 deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse

저장소 apt gpg 키 추가
$ sudo apt-key add /home/flroot2/repo/public.key

$ sudo apt update -y
$ sudo apt install -y ubuntu-desktop

5. 웹서버 연동.
$ sudo apt install -y apache2
$ sudo cp -a repo /var/www/html/

클라이언트 추가
$ sudo apt-add-repository "deb http://ubuntu-16.04-apt.flroot2.com/repo xenial main"

클라이언트 공개키 다운로드
$ wget -O - http://ubuntu-16.04-apt.flroot2.com/repo/public.key | \
sudo apt-key add -
$ sudo apt update -y
$ sudo apt install -y ubuntu-desktop

댓글 없음:

댓글 쓰기