Apt-mirror kasutamine

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

apt-mirror https://apt-mirror.github.io/ võimaldab pidada lokaalselt apt repositooriumi koopiat. Tavaliselt tehakse seda nt sellistel kaalutlustel

  • kohtvõrgus (ühes või mitmes ip subnetis) on hulgal arvutitel vaja hallata tarkvara apt paketihaldusega ja ühendus internetiga pole väga kiire; või seda ei soovita tarkvara kopeerimisega koormata
  • kohtvõrgus on mitu komplekti arvuteid, nt arendus, test ja toodangu keskkonnad ning protseduurid näevad ette, et arendus ja test uuendatakse iga kuu esimesel neljapäeval ning toodang uuendatakse iga kuu kolmandal neljapäeval; kui uuendusi teha otse nö isandate repodest, siis võib juhtuda, et vahepeal on repo sisu muutunud ja erinevatesse keskkondadesse ei rakendata samu uuendusi

Lisaks apt distributsioonidele (nt Debian ja Ubuntu) jagavad paljud projektid oma tarkvara ise apt repode abil, nt PostgreSQL, Elasticsearch. apt-mirror on programeeritud Perl keeles ja kasutab kopeerimiseks wget programmi.

Tundub, et kõige töökindlama tulemuse saab kui apt-mirror programmi töötamise ajal upstream mirrori sisu ei muutu. Nt olles ise Ubuntu push mirrori pidaja saab seda väga otsekoheselt korraldada, praktiliselt piisab jälgida ubuntu upstream mirrori trace faile. Käesolev tekst keskendub amd64 ja i386 arhitektuuridele.

Tööpõhimõte

                                     ftp.ee.debian.org              ee.archive.ubuntu.com
                                           _____                             _____
                                          |     |                           |     |
                                          |     |                           |     |
                                          |_____|                           |_____|
                     
                                                  ..                   ..
                                                          internet
                       
                                                            ...
 
                                                             .
                                   
                     |                                                         |
                  ___|___                                                   ___|___
                 |       |  asutus 1 tulemüür                              |       |  asutus 2 tulemüür
                 |_______|                                                 |_______|
                     |                                                         |
                     |                                                         |
           --|-------|------ kohtvork --|-------------|----           ----|----|--- kohtvork------|------------|-----------|-------
             |                          |             |                   |                       |            |           |
          ___|___                    ___|___       ___|___             ___|___                 ___|___      ___|___     ___|___
         |       |                  |       |     |       |           |       |               |       |    |       |   |       |
         |_______|                  |_______|     |_______|           |_______|               |_______|    |_______|   |_______|
 
        apt-mirror                   server 1      server 2          apt-mirror                server       server      server     
                                                                                               arendus      test        toodang

kus

  • intenetis on kaks apt repositooriumit, ftp.ee.debian.org ja ee.archive.ubuntu.com
  • kujutatud on kahe asutuse võrgud, oma tulemüüride taga
  • kummaski võrgus on oma lokaalne apt mirror
  • kummagi võrgu kõik servereid (sh apt mirror ise) kasutavad paketihalduse jaoks oma kohalikku apt mirrorit (see on seadistatud nn /etc/apt/sources.list failist)
  • apt-mirror programm kopeerib andmed oma lokaalsesse failisüsteemi internetis olevatest tarkvara repositooriumitest

Tundub, et uuemal ajal on amd64 apt kliendid (Debian v. 8, Ubuntu 14.04 jt) seadistatud amd64 ja i386 multiarch režiimis, st mirrordada tuleb neid kahte arhitektuuri.

apt-mirror kasutamisel tuleks programme käivitada apt-mirror kasutajana. Siis toimuvad kõik tegevused selle kasutajana sh kõik failid ja kataloogid on kasutaja:grupp apt-mirror:apt-mirror omanduses.

Mitut apt-mirror eksemplari ei saa samaaegselt hästi käivitada

$ apt-mirror etc/mirror-elasticsearch.list 
apt-mirror is already running, exiting at /usr/bin/apt-mirror line 209.

ja lukk on

/var/spool/apt-mirror/var/apt-mirror.lock

apt-mirror elab üle hästi töötamise katkestamise Ctrl-C abil ja taasalustamise. Mingeid kavalaid binary state faili vms /var all kuskil ei ole. Paistab, et ise apt-mirror oskab kasutada ainult ühte protsessorit, aga wget kopeerimise osas tekib load nii suur nagu threads parameeter näitab.

Tarkvara paigaldamine ja seadistamine

apt-mirror tarkvara paigaldamiseks sobib öelda

# apt-get install apt-mirror

Failisüsteemi paigaldadakse

  • /etc/cron.d/apt-mirror - cron töö - selguse mõttes alguses välja kommenteerida seal olev rida
  • /etc/apt/mirror.list - seadisusfail (neid võib teha mitu, iga peegli jaoks oma; tundub, et see pole parim kataloog kuhu kataloog on root:root omanduses ja apt-mirror skripti kasutatakse kasutajana)
  • /var/spool/apt-mirror/skel - abi struktuur, igal mirroril oma
  • /var/spool/apt-mirror/mirror - moodustatavad peeglid, iga omas kataloogis
  • /var/spool/apt-mirror/var - logi
  • tekitatakse kasutaja:grupp apt-mirror:apt-mirror

Seadistusfail võib olla nt selline

$ cat /etc/apt/mirror-pgdg.list
############# config ##################
#
set base_path    /var/spool/apt-mirror
#
set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var
set cleanscript  $var_path/clean-pgdg.sh
# set defaultarch  <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set limit_rate 40k
set nthreads     5
set _tilde 0
#
############# end config ##############

deb-amd64 http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main
deb-i386 http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main
deb-src http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main

# deb-amd64 http://ftp.ee.debian.org/debian jessie-updates main
# deb-i386 http://ftp.ee.debian.org/debian jessie-updates main
# deb-src http://ftp.ee.debian.org/debian jessie-updates main

kus

  • set base_path - millise kataloog all üldiselt tegevus toimub
  • set nthreads - mitu wget protsess taustal käivitatakse
  • set var_path - kuhu logitakse indeksite, translationite ja archive kopeerimisi jms
  • kõige all on nö sources.list formaadis repositooriumide aadressid, mida mirrordatakse
  • set defaultarch - millist arhitektuuri mirrordatakse, vaikimisi sama, mis töötav arvuti
  • set cleanscript - millise nimega cleanscript moodustatakse
  • set _tilde - 0 tähendab, et kopeeritakse ka ~ sümbolit sisaldavad failinimed
  • deb-amd64, deb-i386, deb-src - millised arhitektuure kopeeritakse, seejuures src on kõigile üks ja sama; oluline on just nii kopeerida, vastasel korral moodustub clean skript valesti (kustutab ära kõik v.a. ühe arhitektuuri (kui konf failid on per arhitektuur)
  • set limit_rate 40k - ühe wget protsessi kiiruse piirang, kokku maksimaalset 5 x 40 k = 200 kBait/s

apt-mirror käivitamine ja logi lugemine

Programmi käivitamisel kirjutatakse terminalile midagi sellist

$ apt-mirror /etc/apt/mirror-pgdg.list
Downloading 28 index files using 20 threads...
Begin time: Thu Nov  5 23:36:51 2015
[4]... [3]... [2]... [1]... [0]... 
End time: Thu Nov  5 23:36:51 2015

Processing tranlation indexes: [TT]

Downloading 0 translation files using 0 threads...
Begin time: Thu Nov  5 23:36:51 2015
[0]... 
End time: Thu Nov  5 23:36:51 2015

Processing indexes: [PP]

417.4 MiB will be downloaded into archive.
Downloading 505 archive files using 20 threads...
Begin time: Thu Nov  5 23:36:52 2015
[5]... [4]... [3]... [2]... [1]... 
End time: Thu Nov  5 23:37:17 2015

0 bytes in 0 files and 0 directories can be freed.
Run /var/spool/apt-mirror/var/clean-pgdg.sh for this purpose.

Running the Post Mirror script ...
(/var/spool/apt-mirror/var/postmirror.sh)

Post Mirror script has completed. See above output for any possible errors.

kus

  • TT - tegeldakse translationitega
  • PP - tegeldakse pakettidega
  • SS - tegeldakse source pakettidega
  • [5]... [4]... [3]... [2]... [1]... - esitab progressina, kui palju parasjagu wget protsesse veel paralleelselt töötab
  • mida kauem [5] peal progress on, seda parem, st siis kopeeritakse ühtlaselt kõigi wget protsessidega

Neet wget protsessid paistavad taustal sarnased

$ ps auxf | grep apt
..
  wget --no-cache --limit-rate=40k -t 5 -r -N -l inf -o /var/spool/apt-mirror/var/index-log.0 -i /var/spool/apt-mirror/var/index-urls.0
  wget --no-cache --limit-rate=40k -t 5 -r -N -l inf -o /var/spool/apt-mirror/var/index-log.1 -i /var/spool/apt-mirror/var/index-urls.1
...

Lisaks moodustatakse var_path peale failid

  • ALL - failide nimekiri
  • MD5 - failide md5 summmad (kogutakse Packages jms failidest)
  • NEW - urlide nimekiri mida hakataks üle võrgu kopeerima
  • archive-log.x - pakettide kopeerimise logi
  • archive-urls.x - kopeeritud pakettide urlid
  • index-log.x - indeksite kopeerimise logi
  • index-urls.x -
  • translation-log.x - translationite kopeerimise logi
  • translation-urls.x -

Vanade ja enam mittevajalike mirrorisse kopeeritud failide kustutamiseks sobib seadistusfailis kasutada rida

clean http://apt.postgresql.org/pub/repos/apt/

Tulemusena genereeritakse apt-mirror kasutamise käigus sobiva sisuga clean skript ning selle käivitamisel vastavad failid kustutatakse. See on oluline tegevus, et kohalik mirror failisüsteemis asjatult ruumi ei raiskaks.

Veebiserveri seadistamine

Kohalikuks kopeeritud repo tehakse tavaliselt veebiserveri abil kohtvõrgus kasutamiseks kättesaadavaks. Nt sellised sektsioonid NginX veebiserver seadistufailis

..
location /ubuntu-pgdg {
  alias /var/spool/apt-mirror/mirror/apt.postgresql.org/pub/repos/apt/;
  autoindex on;
}

location /ubuntu-logstash {
  alias /var/spool/apt-mirror/mirror/packages.elastic.co/logstash/2.1/debian/;
  autoindex on;
}

location /ubuntu-elasticsearch {
  alias /var/spool/apt-mirror/mirror/packages.elastic.co/elasticsearch/2.x/debian;
  autoindex on;
}
...

Kohaliku mirrori kasutamine

Kohaliku mirrori kasutamiseks sobib kasutada selliseid ridu uuendatava arvuti apt sources seadistusfailis

# cat /etc/apt/sources.conf
..
deb http://apt.moraal/ubuntu-pgdg jessie-pgdg main
deb http://apt.moraal/ubuntu-logstash stable main
deb http://apt.moraal/ubuntu-elasticsearch stable main

ning seejärel tavalisel viisil

# apt update
# apt install paketinimi

Kohaliku mirrori kustutamine

Kui mingit mirrordatud tarkvara pole enam vaja mirrordada ning eesmärk on failisüsteemist vastav osa vabastada, siis piisab kustutada kaks kataloogi

$ rm -rf /var/spool/apt-mirror/skel/apt.postgresql.org
$ rm -rf /var/spool/apt-mirror/mirror/apt.postgresql.org

Ning enam mitte käivitada vastava mirrori kopeerimist.

Misc

  • Debiani mirror
$ cat etc/mirror.list-debian
..
set cleanscript $var_path/clean-debian.sh
...

deb-amd64 http://ftp.ee.debian.org/debian/ jessie main contrib non-free
deb-i386 http://ftp.ee.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.ee.debian.org/debian/ jessie main contrib non-free

deb-amd64 http://security.debian.org/ jessie/updates main contrib non-free
deb-i386 http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

clean http://ftp.ee.debian.org/debian/
clean http://security.debian.org/
  • Ubuntu mirror
$ cat etc/mirror.list-ubuntu
..
set cleanscript $var_path/clean-ubuntu.sh
...

deb-amd64 http://ee.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
deb-i386 http://ee.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://ee.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse

deb-amd64 http://ee.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse 
deb-i386 http://ee.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse 
deb-src http://ee.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse 

deb-amd64 http://ee.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-i386 http://ee.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://ee.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse

deb-amd64 http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb-i386 http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse

clean http://ee.archive.ubuntu.com/ubuntu/
clean http://security.ubuntu.com/ubuntu
$ cat etc/mirror.list-salt
..
set cleanscript $var_path/clean-salt.sh
...

deb-amd64 http://repo.saltstack.com/apt/debian/7/amd64/2016.3 jessie main
deb-amd64 http://repo.saltstack.com/apt/debian/8/amd64/2016.3 jessie main
clean http://repo.saltstack.com/apt/debian/7/amd64/2016.3
clean http://repo.saltstack.com/apt/debian/8/amd64/2016.3
  • Zabbix
deb-amd64 http://repo.zabbix.com/zabbix/3.0/debian jessie main
deb-i386 http://repo.zabbix.com/zabbix/3.0/debian jessie main
clean http://repo.zabbix.com/zabbix/3.0/debian
  • Mingid vead võivad esineda ressursipuuduse tõttu, nt ja aitab arvutile mälu lisada (tundub, et 2020 kevadel Ubuntu mirrordamiseks on 4 G sobilik)
...
Downloading 2667 archive files using 20 threads...
Use of uninitialized value $pid in numeric lt (<) at /usr/bin/apt-mirror line 252.
Use of uninitialized value $pid in numeric eq (==) at /usr/bin/apt-mirror line 254.
  • 2020 suvel 20.04 mirrordamise iseärasused

- https://github.com/apt-mirror/apt-mirror/issues/118 - https://github.com/apt-mirror/apt-mirror - https://github.com/josbraden/apt-mirror - https://github.com/Stifler6996/apt-mirror

Kasulikud lisamaterjalid