Repository 관련 궁금한점

안녕하세요~
제가 repository 구성과 관련해서 공부하면서 궁금한 점 몇개 여쭤봅니다.

먼저 repository를 구성하는 방법은

  1. apache2를 설치 하고 /var/www/를 root로 설정
  2. /repo/ubuntumirror/ 라는 디렉토리 생성후 /var/www/에 ubuntu라는 symlink 생성(ln -s /repo/ubuntumirror ubuntu)
  3. mirrorbuild.sh 쉘 실행

[code:1zw1oy97]
export GNUPGHOME=/home/mirrorkeyring
arch=amd64
section1=main,restricted,universe,multiverse,main/debian-installer,restricted/debian-installer,universe/debian-installer,multiverse/debian-installer
section2=main,restricted,universe,multiverse
release1=karmic
release2=karmic,karmic-security,karmic-updates
server=de.archive.ubuntu.com
inPath=/ubuntu
proto=http
outPath=/repo/ubuntumirror
debmirror -a $arch
–no-source
-s $section1
-h $server
-d $release1
-r $inPath
–progress
–nocleanup
-e $proto
$outPath

debmirror -a $arch
–no-source
-s $section2
-h $server
-d $release2
-r $inPath
–progress
–nocleanup
-e $proto
$outPath[/code:1zw1oy97]

이렇게 하면 일단 기본적인 respository는 구성이 된 것 같습니다. apache2에서 설정해 준 ip로 sources.list에 repository 추가 해주고 aptitude update 해준 후
확인.

이렇게 레파지토리를 구성하고 repository를 살표 보면 다음과 같습니다.

[code:1zw1oy97]+ dist
+++karmic
+++++main
+++++++++binary-amd64
++++++++++++++Packages
++++++++++++++Packages.gz
++++++++++++++Packages.bz2
++++++++++++++Release
+++++++++debian-installer
++++++++++++++binary-amd64
++++++++++++++++++++Packages
++++++++++++++++++++Packages.gz
++++++++++++++++++++Packages.bz2
++++++++++++++++++++Release
+++++multiverse
-메인과 동일
+++++restricted
-메인과 동일
+++++universe
-메인과 동일
+++++Release
+++++Release.gpg
+++karmic-security
위 디렉토리 구조와 동일
+++karmic-updates
위 디렉토리 구조와 동일
+++stable (symlink karmic)

  • pool
    +++main
    +++multiverse
    +++restricted
    +++universe
  • project[/code:1zw1oy97]

위 구조에 대해 살펴 보면
1. pool 디렉토리는 순수 패키지들이 위치한 디렉토리.
2. dist는 pool에 있는 패키지들에 대한 인덱스(Package) 파일들이 위치한 디렉토리.
Package 파일들은 다음과 같은 명령어로 생성 가능하며 package 파일에는 패키지에 대한 정보 및 checksum 값을 가지고 있음.
Package 파일은 다음과 같은 명령어로 생성 가능.
( 위 디렉토리 구조에 맞게 간단히 작성한 쉘입니다.)
[code:1zw1oy97] #!/bin/bash
list="main multiverse restricted universe"
for i in $list
do
dpkg-scanpackages --arch amd64 /repo/ubuntumirror/pool/${i} /dev/null > /repo/ubuntumirror/dists/karmic/${i}/binary-amd64/Packages
gzip -9c /repo/ubuntumirror/dists/karmic/${i}/binary-amd64/Packages > /repo/ubuntumirror/dists/karmic/${i}/binary-amd64/Packages.gz
bzip2 -9 /repo/ubuntumirror/dists/karmic/${i}/binary-amd64/Packages
done[/code:1zw1oy97]
3. Release 파일은 각 Package, Package.gz, Pakcage.bz2 파일에 대한 checksum 정보를 가지고 있는 파일이며 다음과 같은 명령어로 생성 가능.
apt-ftparchive -c /etc/apt/apt-release.conf release /repo/ubuntumirror/dists/karmic/ > /repo/ubuntumirror/dists/karmic/Release
4. Release.gpg 파일은 Release에 대한 인증 정보가 있는 파일이며
http://wiki.debian.org/SecureApt 에 자세한 설명이 있음.

이정도가 제가 찾아본 것인데 여기서 몇가지 궁금한 점이 있네요.

     1. karmic, karmic-security, karmic-updates 디렉토리의 각각 용도가 무엇인지 궁금하네요.(실제 패키지들은 pool 디렉토리 하위에 있는 반면......)
     2. dists디렉토리 하위 각 main, universe, restricted, multiverse 하위 +debian-installer 의 디렉토리의 용도는 무엇인지요?(아마 우분투 설치와 관련되는 것 같은데...) 
     3. repository를 통해서 ubuntu를 설치 할때 필수로 설치 되는 패키지들에 대한 목록은 어디서 가지고 있는지.....

쓰다 보니 너무 길어 졌네요 읽어 주셔서 감사합니다.

[quote:13pjmgp6]1. karmic, karmic-security, karmic-updates 디렉토리의 각각 용도가 무엇인지 궁금하네요.(실제 패키지들은 pool 디렉토리 하위에 있는 반면…)
2. dists디렉토리 하위 각 main, universe, restricted, multiverse 하위 +debian-installer 의 디렉토리의 용도는 무엇인지요?(아마 우분투 설치와 관련되는 것 같은데…)
3. repository를 통해서 ubuntu를 설치 할때 필수로 설치 되는 패키지들에 대한 목록은 어디서 가지고 있는지…
[/quote:13pjmgp6]
security는 보안패치, updates는 업데이트 패키지를 넣는 곳이겠죠. main, universe, restricted, multiverse 는 [url:13pjmgp6]https://help.ubuntu.com/community/Repositories/Ubuntu[/url:13pjmgp6] 참조하세요. 그리고 설치된 패키지는 터미널에서 dpkg -l 치면 쭈악 나올거에요. 리포에서 뭘 설치하라고 하는게 아니라 인스톨 CD의 프로그램에서 골라서 설치하는 방식일 것입니다.

답변 감사드립니다.

"리포에서 뭘 설치하라고 하는게 아니라 인스톨 CD의 프로그램에서 골라서 설치하는 방식일 것입니다."
라고 하셨는데 우분투를 설치할때 인스톨 cd가 아니라 위에 구성해놓은 repository에서 패키지들을 쭉 받아와서 설치하는것 같은데
그 설치하는 패키지 목록(pool 에 있는 모든 패키지를 설치하는것은아닐텐고…)이 repo 어딘가에 있을것 같은데 그게 궁금하네요…
혹시 제가 잘못 이해하고 있는건가요? :)

그리고 dist 디렉토리 밑에 karmic karmic-security karmic-updates 디렉토리들은 Package라는 패키지 목록에 대한 정보를 가진 파일들만 있고
실제 deb 파일들은 모두 pool에 있는데 …그렇다면 karmic-security karmic-updates 하위 디렉토리에 있는 Pacakge 파일들은
/pool 하위에 있는 패키지들 중 보안 및 업데이트 관련된 deb 파일에 대한 목록을 가지고 있는 디렉토리로 구분해 놓았다고 이해해도 되는건가요??

감사합니다.

[quote="hyuk48":kd63566u]
"리포에서 뭘 설치하라고 하는게 아니라 인스톨 CD의 프로그램에서 골라서 설치하는 방식일 것입니다."
라고 하셨는데 우분투를 설치할때 인스톨 cd가 아니라 위에 구성해놓은 repository에서 패키지들을 쭉 받아와서 설치하는것 같은데
그 설치하는 패키지 목록(pool 에 있는 모든 패키지를 설치하는것은아닐텐고…)이 repo 어딘가에 있을것 같은데 그게 궁금하네요…
혹시 제가 잘못 이해하고 있는건가요? :)
[/quote:kd63566u]
네. 잘못 아신것입니다.
그게 아니고 저장소는 파일과 소스를 가지고 있는것이고 설치시 우분투냐, 쿠분투냐, 코분투냐 등에 따라 가져오는 패키지(설치)가 다르지요
그 후에도 사용자가 어떤 패키지(프로그램)을 설치 하냐에 따라 저장소는 그파일(패키지 & 소스)을 제공하는 거지요

[quote="hyuk48":kd63566u]
그리고 dist 디렉토리 밑에 karmic karmic-security karmic-updates 디렉토리들은 Package라는 패키지 목록에 대한 정보를 가진 파일들만 있고
실제 deb 파일들은 모두 pool에 있는데 …그렇다면 karmic-security karmic-updates 하위 디렉토리에 있는 Pacakge 파일들은
/pool 하위에 있는 패키지들 중 보안 및 업데이트 관련된 deb 파일에 대한 목록을 가지고 있는 디렉토리로 구분해 놓았다고 이해해도 되는건가요??
감사합니다.[/quote:kd63566u] dists에는 패키지 정보를 가진 목록 파일을 가지고 있으며 각 패지지가 긴급 업데이트인지 보안 업데이트 인지 등등 정보는 각 패키지가 가지고 있으며 이에 따라 목록 파일을 dists에 Packages.?? 으로 모아 놓은것입니다.
즉 저장소는 우분투 배포판에 대한 변경 권한이 없습니다. 패키지를 자신이 바꾸어 자신의 저장 서버애 올려도 인증키로 인해 설치가 되지 않습니다.
새로 패키지한 사람의 인증키도 인증하고 더 업된 패키지를 올려 놓으면 그 키를 받아 인증한 사람은 업데이트가 이루어 질 수 있습니다 (이게 런치패드 PPA 와 같은 경우 입니다.)

답변 감사드립니다.

근데 아직 조금 더 궁금한게 있는데… 앞에도 말씀드렸듯이 전 ISO 파일이나 cd를 사용하지 않고 위에 구성해놓은 repository를 통해 ubuntu를 설치 하는데
우분투를 설치 하는동안 위에 /pool/~ 있는 패키지 중에 어떤 패키지를 설치할지에 대한 정보는 어디에 있는가…라는 것 입니다.
예를 들어 os 인스톨 중에 "ifupdown" 이란 패키지를 설치 한다면(이렇게 os 설치 중에 꼭 필요한 패키지들에 대한 목록도 어디 있는지 궁금합다.)
/pool/main/i/ifupdown/ 디렉토리에는
ifupdown_0.6.8ubuntu21.3_amd64.deb.
ifupdown_0.6.8ubuntu21.2_amd64.deb
ifupdown_0.6.8ubuntu21_amd64.deb 의 패키지들이 있는데
이중에서 ifupdown_0.6.8ubuntu21.3_amd64.deb가 설치 된다면
위의 특정 패키지를 설치 하라는 목록 같은 게 있을거 같은데…

제 질문이 산으로 가고 있나요? ㅎㅎㅎ

부연으로 말씀 드리면
제가

  1. repo1 서버에 Thu Apr 29 02:31:15 UTC 2010 날 mirrobuild.sh 를 통해 repository를 구성.
  2. repo2 서버에 Fri Nov 5 07:34:10 UTC 2010 날 mirrobuild.sh 를 통해 다른 repository를 구성.
    (repo1과 repo2는 같은 de.archive.ubuntu.com mirror 사용하였지만 시간이 지남에 따라 업데이트 되어 다른 패키지를 가지고 있음)
  3. repo1서버의 repo의 dist 디렉토리를 망가 뜨려서 /pool~ ( 실제 deb)파일들이 있는 디렉토리는 건들지 않고
    /dists 디렉토리만 repo2에 있는 dist를 repo1으로 옮김
  4. 새로운 서버 설치를 위해 repo1를 이용하여 os 인스톨 중 4개의 패키지를 찾지 못해 에러가 발생
    인증관련 부분은 preseed 파일에 d-i debian-installer/allow_unauthenticated string true) 과 같이 추가하여 인증 안하도록 설정)
  5. 그 4개의 패키지는 (위에 ifdown처럼 repo1에는 없고 새로 repo2에 있는 새로 추가된 패키지들)과 같은 패키지여서 os 인스톨동안 못찾은 4개의 패키지들을
    repo2의 pool에서 repo1의 pool로 복사를 해준 후 다시 설치 하니 우분투가 설치 성공

또 길어 졌네요 읽어 주셔서 감사합니다.

인스톨 CD에 들어있는 프로그램을 분석해보면 어떤 패키지를 설치하는지 다 나올거에요. 실제 패키지 파일을 CD에 있는것을 가져다 쓰는가 인터넷에서 퍼오는가와는 상관없죠.