로컬 환경 deb 패키지 다운로드 구성 방법
방법1)
가단한 설정 방법
sudo apt-get insall dpkg-dev
로컬 패키지 저장소
sudo mkdir -p /usr/local/fairdeb
저장소 이동
cd /usr/local/fairdeb
외부의 프로그램을 가지고 오기 위해서는 의존성 관련 패키지까지 다운로드 할 수 있도록 스크립트를 만든다.
sudo apt-get install apt-rdepends
#!/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
./download-deb-package.sh ubuntu-desktop
이방식을 사용해 fair 기반의 의존성 패키지를 만든다.
기존 외부 환경 패키지 다운로드 경로 위치.
/var/cache/apt/archives
sudo apt-get install apt-cacher
apt-cacher를 설치 하면 /var/cache/Packages 추가 패키지가 저장된다.
현 보안장비의 경우 apt-cacher-ng를 설치 한다.
apt-cacher 은 서버에서 설치
apt-cacher-ng는 클라이언트 쪽에서 설치.
자세한건 테스트 결과를 적는다.
#! /bin/bash
cd /usr/local/fairdeb
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
~/bin 을 만들어 환경 변수 추가 후, 실행 권한 설정
chmod u+x ~/bin/update-mydebs
Packages.gz 파일이 apt-get 이 읽을 수 있는 파일.
파일 추사
vi /etc/apt/source.list
현재는 /etc/apt/source.d/fair.list
deb file:/usr/local/mydebs ./
추가 완료 후 패키지 적용
CD 에 패키지를 만들고 추가 하는 방법.
sudo apt-cdrom add
sudo update-mydebs
sudo apt-get update
=================================
웹 서버와 연동할 경우
===================
/var/www/debshttp://localhost/debs/amd64
cd /var/www/debs
dpkg-scanpackages amd64 | gzip -9c > amd64/Packages.gz
저장소 등록
vi /etc/apt/sources.list
deb http://localhost/debs/ amd64/
apt-get update
==================
인증된 저장소 생성
==================
인증되지 않은 저장소를 사용할 경우
sudo apt-get -y --allow-unauthenticated
저장소 디렉토리 설정
mkdir /home/srv/packages/local-xenial
cd /home/srv/packages/local-xenial
sources.list 추가
deb file:/home/srv/packages/local-xenial/ ./
패키지 추가 및 제거
패키지 제거
rm -rf /home/srv/packages/local-xenial/some_package_idont_like
패키지 추가
cp /some/dir/apackage.deb /home/srv/packages/local-xenial
Packages, Releasw 및 InRlelase 파일을 생성하고 gpg 개인크로 서명하는 스크립트 실행.
#!/bin/bash
if [ -z "$1" ]; then
echo -e "usage: `basename $0` DISTRO
DISTRO 우부툰 배포판 이름이다.(14.04 trusty 배포판 이름을 사용)\n
배포판 저장소 변경이 이루어 질때 이 스크립트를 사용한다, /srv/packages/local-DISTRO 로칼 저장소 .deb 파일 복사및 삭제 하면 스크립트가 동작\n
본 스크립트는 사용자 공간의 로컬 저장소 디렉토리에서 사용자 권한으로 실행한다."
else
cd /srv/packages/local-"$1"
# 패키지 파일 생성
dpkg-scanpackages . /dev/null > Packages
gzip --keep --force -9 Packages
# 릴리즈 파일 생성
cat conf/distributions > Release
# date: 필드는 데비안 패키지 변경 로그 항목과 같은 형식이다.
# 즉, 표준 시간대가 RFC 2822 time zone +0000 여기서 옵션 중 R 만 입력 하면 시스템 시간 설정과 동기화 된다.(하지만 보통 Ru UTC 시간을 사용)
echo -e "Date: `LANG=C date -Ru`" >> Release
# 리리즈 모든 저장소에 MD5 포함된다.
echo -e 'MD5Sum:' >> Release
printf ' '$(md5sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
printf '\n '$(md5sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
# 리리즈 모든 저장소 파일에 SHA256 포함된다.
echo -e '\nSHA256:' >> Release
printf ' '$(sha256sum Packages.gz | cut --delimiter=' ' --fields=1)' %16d Packages.gz' $(wc --bytes Packages.gz | cut --delimiter=' ' --fields=1) >> Release
printf '\n '$(sha256sum Packages | cut --delimiter=' ' --fields=1)' %16d Packages' $(wc --bytes Packages | cut --delimiter=' ' --fields=1) >> Release
# 릴리즈 파일 삭제. 즉, 암호와 없이 서명
gpg --clearsign --digest-algo SHA512 --local-user $USER -o InRelease Release
# apt는 이전 버전의 Release.gpg 버전만 필요.
# gpg -abs --digest-algo SHA512 --local-user $USER -o Release.gpg Release
# 변경 사항 업데이트
sudo apt-get update
fi
=========================================================================
인증 관련 정리
==============
=========================================================================
nginx 저장소 로컬 서버 설정
1. sudo apt-get install reprepro nginx
2. 저장소 디렉토리 설정
sudo mkdir -p /srv/reprepro/ubuntu/{conf,dists,incoming,indices,logs,pool,project,tmp}
$ cd /srv/reprepro/ubuntu/
$ sudo chown -R `whoami` . # 저장소 소유자를 현재 사용자로 변경
/srv/reprepro/ubuntu/conf/distributions(배포판)
Origin: Your Name
Label: Your repository name
Codename: karmic
Architectures: i386 amd64 source
Components: main
Description: Description of repository you are creating
SignWith: YOUR-KEY-ID
/srv/reprepro/ubuntu/conf/options
ask-passphrase
basedir .
3. 저장소 추가
$ reprepro includedeb karmic /path/to/my-package_0.1-1.deb \
# /path/to/my-package_0.1-1.deb 정의된 저장소 경로 지정
4. nginx 설정
/etc/nginx/sites-available/vhost-packages.conf
server {
listen 80;
server_name packages.internal;
access_log /var/log/nginx/packages-access.log;
error_log /var/log/nginx/packages-error.log;
location / {
root /srv/reprepro;
index index.html;
}
location ~ /(.*)/conf {
deny all;
}
location ~ /(.*)/db {
deny all;
}
}
5. 버커 사이즈 설정
/etc/nginx/conf.d/server_names_hash_bucket_size.conf
server_names_hash_bucket_size 64;
설정 가이드 링크
http://davehall.com.au/blog/dave/2010/02/06/howto-setup-private-package-repository-reprepro-nginx
==========================================================================
디렉토리 접근 가능하게 만든다.
sudo mkdir /var/my-local-repo
모든 deb 파일을 생성된 디렉토리에 복사한다.
디렉토리 스캔한다.
sudo dpkg-scanpackages /var/my-local-repo /dev/null > /var/my-local-repo/Packages
로컬 저장소를 추가한다.
echo "deb file:/var/my-local-repo ./" > /tmp/my-local.list
sudo mv /tmp/my-local.list /etc/apt/sources.list.d/my-local.list
sudo apt-get update
의존성 패키지 관련 정의
======================
로컬 저장소에서 패키지를 설치하려고 할 때 누락된 패키지가 있을 경우.
apt-cache depends <packagename> -i --recurse | tr -d "|,<,>, " | sed -e \
's/^Depends://g' | sed -e 's/^PreDepends://g' | sort | uniq > list.txt
다운로드
for i in $( cat list.txt ); do apt-get download $i; done;
패키지 스캔후 packages.gz 변경.
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
댓글 없음:
댓글 쓰기