Apt-mirror kasutamine
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
- Salt 2016.3 major versioon, http://repo.saltstack.com/
$ 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