Tehtävä
h4:
– Tee metapaketti, joka asentaa suosikkiohjelmasi. Katso, että se menee läpi lintianista.
– Tee pakettivarasto repreprolla
Vapaaehtoiset bonus-tehtävät:
– Allekirjoita reprerolla tekemäsi varasto
– Paketoi jokin skriptisi, niin että paketti asentaa järjestelmän käyttäjille uuden käskyn
– Tee paketti, joka muuttaa asetuksia johonkin .d-hakemistoon asennetulla tiedostolla
– Kertaa Apachen asennus, käyttäjien kotisivujen teko ja lokin lukeminen
Katso myös:
http://terokarvinen.com/2011/create-deb-metapackage-in-5-minutes
http://terokarvinen.com/2011/update-all-your-computers-with-a-deb-repository
Lähde: http://terokarvinen.com/2016/aikataulu-linux-palvelimena-ict4tn003-22-ja-23-alkusyksy-2016
Metapaketti
Aluksi asennettiin equivs ympäristö:
$sudo apt-get update $sudo apt-get -y install equivs
Seuraavaksi tein asennuspaketin konfiguraatio tiedoston:
$equivs-control matto-perusohjelmat.cfg
Ja muokkasin tiedoston muotoon:
Section: misc Priority: optional Homepage: matto.guru Standards-Version: 3.9.2 Package: matto-perusohjelmat Version: 0.0.1 Maintainer: Matti JäppinenDepends: nano, kate, tree Description: Matin kokoelma perusohjelmista Peruskäyttöön tarkoitetut ohjelmat: . Tekstieditorit: - nano - kate Yleisohjelmat: - tree
Seuraavaksi loin asennuspaketin:
$ equivs-build matto-perusohjelmat.cfg dh_testdir dh_testroot dh_prep dh_testdir dh_testroot dh_install dh_installdocs dh_installchangelogs dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package 'matto-perusohjelmat' in '../matto-perusohjelmat_0.0.1_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above!
Lopuksi testasin paketin toiminnan, tämä vaati vielä gdebi-core paketin asennuksen:
$ sudo gdebi -n matto-perusohjelmat_0.0.1_all.deb [sudo] password for matto: sudo: gdebi: command not found $ gdebi The program 'gdebi' is currently not installed. You can install it by typing: sudo apt install gdebi-core $ sudo apt-get install gdebi-core $ sudo gdebi -n matto-perusohjelmat_0.0.1_all.deb
Komento asensi yhteensä 145 eri pakettia.
Lintian
Seuraavaksi varmistin, että paketti menee läpi lintianista:
$ lintian matto-perusohjelmat_0.0.1_all.deb W: matto-perusohjelmat: possible-unindented-list-in-extended-description W: matto-perusohjelmat: bad-homepage matto.guru
Virheet korjasin tekemällä paketista version 0.0.2:
Section: misc Priority: optional Homepage: http://matto.guru Standards-Version: 3.9.2 Package: matto-perusohjelmat Version: 0.0.2 Maintainer: Matti JäppinenDepends: nano, kate, tree Description: Matin kokoelma perusohjelmista Peruskäyttöön tarkoitetut ohjelmat: . Tekstieditorit: nano kate Yleisohjelmat: tree
Ja tämän osalta paketin luomisen jälkeen lintiankin meni läpi:
$ equivs-build matto-perusohjelmat.cfg dh_testdir dh_testroot dh_prep dh_testdir dh_testroot dh_install dh_installdocs dh_installchangelogs dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package 'matto-perusohjelmat' in '../matto-perusohjelmat_0.0.2_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above! $ lintian matto-perusohjelmat_0.0.2_all.deb $
Eli lintian tarkistus onnistui.
reprepro
Seuraavana oli vuorossa reprepro pakettivaraston luonti. Koska apache oli jo asennettu palvelimelle, Reprepro piti asentaa ensimmäiseksi:
:~$ reprepro The program 'reprepro' is currently not installed. You can install it by typing: sudo apt install reprepro :~$ sudo apt-get install reprepro [sudo] password for matto:
Seuraavaksi luotiin repositorio:
:~/public_html$ mkdir -p repository/conf :~/public_html$ nano repository/conf/distributions
Tiedoston sisältö:
Codename: xenial Components: main Suite: xenial Architectures: i386 amd64 source
Lopuksi lisättiin tuo paketti repreproon:
:~/public_html$ reprepro -VVVV -b repository/ includedeb xenial /home/matto/Desktop/matto-perusohjelmat_0.0.2_all.deb Created directory "repository//db" /home/matto/Desktop/matto-perusohjelmat_0.0.2_all.deb: component guessed as 'main' Created directory "repository//pool" Created directory "repository//pool/main" Created directory "repository//pool/main/m" Created directory "repository//pool/main/m/matto-perusohjelmat" Adding reference to 'pool/main/m/matto-perusohjelmat/matto-perusohjelmat_0.0.2_all.deb' by 'xenial|main|i386' Adding reference to 'pool/main/m/matto-perusohjelmat/matto-perusohjelmat_0.0.2_all.deb' by 'xenial|main|amd64' Exporting indices... Created directory "repository//dists" Created directory "repository//dists/xenial" Created directory "repository//dists/xenial/main" Created directory "repository//dists/xenial/main/binary-i386" looking for changes in 'xenial|main|i386'... creating 'repository//dists/xenial/main/binary-i386/Packages' (uncompressed,gzipped) Created directory "repository//dists/xenial/main/binary-amd64" looking for changes in 'xenial|main|amd64'... creating 'repository//dists/xenial/main/binary-amd64/Packages' (uncompressed,gzipped) Created directory "repository//dists/xenial/main/source" looking for changes in 'xenial|main|source'... creating 'repository//dists/xenial/main/source/Sources' (gzipped)
Allekirjoitus
Allekirjoitus vaatikin jo vähän tutkimista. Hyvä ohje löytyi sivulta http://blog.jonliv.es/blog/2011/04/26/creating-your-own-signed-apt-repository-and-debian-packages/. Teinkin ohjeen mukaiset toimenpiteet:
$ sudo apt-get install gnubg [sudo] password for matto: ... $ sudo apt-get install dpkg-sig ... $ gpg --gen-key gpg (GnuPG) 1.4.20; Copyright (C) 2015 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 4 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire= key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " Real name: Matti Jäppinen Email address: packages@matto.guru Comment: You are using the `utf-8' character set. You selected this USER-ID: "Matti Jäppinen " Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O You need a Passphrase to protect your secret key. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 206 more bytes) .+++++ .....+++++ gpg: key D3044602 marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u gpg: next trustdb check due at 2018-09-18 pub 2048R/D3044602 2016-09-18 Key fingerprint = 59E9 B699 5E96 F1F0 BE95 E379 3176 A5DB D304 4602 uid Matti Jäppinen Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. :~$ gpg --list-keys /home/matto/.gnupg/pubring.gpg ------------------------------ pub 2048R/D3044602 2016-09-18 uid Matti Jäppinen $ gpg --armor --export packages@matto.guru --output packages@matto.guru.gpg.key > packages.key
Seuraavaksi tehtiin uusi allekirjoitettu versio jaettavasta paketista. .cfg tiedoston ainoa muutos, oli uusi 0.0.3 versio:
$ cd /home/matto/Desktop/ :~/Desktop$ nano matto-perusohjelmat.cfg :~/Desktop$ equivs-build matto-perusohjelmat.cfg dh_testdir dh_testroot dh_prep dh_testdir dh_testroot dh_install dh_installdocs dh_installchangelogs dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package 'matto-perusohjelmat' in '../matto-perusohjelmat_0.0.3_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above!
Ja lopuksi paketti lisättiin repositoryyn ja allekirjoitettiin
$ cd /home/matto/public_html/repository/ :~/public_html/repository$ reprepro --ask-passphrase -Vb . includedeb xenial /home/matto/Desktop/matto-perusohjelmat_0.0.3_all.deb /home/matto/Desktop/matto-perusohjelmat_0.0.3_all.deb: component guessed as 'main' Exporting indices... Successfully created './dists/xenial/Release.gpg.new' Successfully created './dists/xenial/InRelease.new' Deleting files no longer referenced... deleting and forgetting pool/main/m/matto-perusohjelmat/matto-perusohjelmat_0.0.2_all.deb
Ja vielä lisättiin tuo avain jakoon palvelimelle
$ cd /home/matto/ :$ ls Desktop Documents Downloads host Music packages.key Pictures Public public_html Templates Videos workspace :$ cp packages.key public_html/
Testaus
Testasin toimiiko paketti toisella työasemalla (samassa lähiverkossa). Koska palvelimen ip-osoite oli kiinteä, onnistui paketin asentaminen toiselle koneelle helposti.
Lisätään palvelin luotetuksi
:$ wget -O - http://192.168.1.21/~matto/packages.key | sudo apt-key add -
Lisätään palvelin noudettavien palvelinten listalle
:$ sudoedit /etc/apt/sources.list.d/repository.list
Sources list sisältö:
deb http://192.168.1.21/~matto/repository xenial main
Päivitetään saatavilla olevien sovellusten listaus
:$ sudo apt-get update
Virheitä ei tullut, joten paketin saa nyt asennettua normaalilla sudo apt-get install
-komennolla.
Oma skripti pakettiin
Oman skriptin paketointi asennusvalmiiksi oli jo opitun perusteella melko yksinkertaista.
Varmistin ensin, ettei ajattelemani nimistä sovellusta vielä ole olemassa
:$ mat-aet mat-aet: command not found
Koska tuota ei ollut (ei edes ehdotettu asennettavaksi mitään), voin tehdä tuon sovelluksen mat-aet nimellä.
Tämän jälkeen tein skriptin. Skripti hakee apachen error-login 10 viimeistä rivi
:$nano mat-aet
Tiedoston sisältö
#!/bin/bash tail /var/log/apache2/error.log
Skripti piti vielä muuttaa oikeille oikeuksille
:$chmod a+x mat-aet
Tämän jälkeen tein konfiguraatiotiedoston sovellusta varten
:$equivs-control mat-aet.cfg
Jonka sisällöksi tuli
Section: misc Priority: optional Homepage: http://matto.guru Standards-Version: 3.9.2 Package: mat-aet Version: 0.0.1 Maintainer: Matti JäppinenDepends: apache2 Files: mat-aet /usr/bin/ Description: Apachen error login viimeiset rivit nopeasti ja helposti ajaa komennon tail /var/log/apache2/error.log
Paketin sai luotua komennolla
:$ equivs-build mat-aet.cfg
Lintian tarkistus varoitti puuttuvasta man-sivusta
:$ lintian mat-aet_0.0.1_all.deb W: mat-aet: binary-without-manpage usr/bin/mat-aet
Mutta tuohon ei tarvinnut tässä yhteydessä kiinnittää sen enempää huomiota.
Lopuksi tehtiin vain paketin vieminen jakelutyökaluun
:$ cd /home/matto/public_html/repository/ :$ reprepro --ask-passphrase -Vb . includedeb xenial /home/matto/Desktop/mat-aet_0.0.1_all.deb /home/matto/Desktop/mat-aet_0.0.1_all.deb: component guessed as 'main' Created directory "./pool/main/m/mat-aet" Exporting indices... Successfully created './dists/xenial/Release.gpg.new' Successfully created './dists/xenial/InRelease.new'
Asennustestauskin onnistui hyvin
:$ sudo apt-get update Get:1 http://192.168.1.21/~matto/repository xenial InRelease [2 706 B] Hit:2 http://fi.archive.ubuntu.com/ubuntu xenial InRelease Hit:3 http://fi.archive.ubuntu.com/ubuntu xenial-updates InRelease Hit:4 http://fi.archive.ubuntu.com/ubuntu xenial-backports InRelease Hit:5 http://security.ubuntu.com/ubuntu xenial-security InRelease Fetched 2 706 B in 0s (5 653 B/s) Reading package lists... Done :$ sudo apt-get install mat-aet Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: mat-aet 0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded. Need to get 2 192 B of archives. After this operation, 11,3 kB of additional disk space will be used. Get:1 http://192.168.1.21/~matto/repository xenial/main amd64 mat-aet all 0.0.1 [2 192 B] Fetched 2 192 B in 0s (45,4 kB/s) Selecting previously unselected package mat-aet. (Reading database ... 198507 files and directories currently installed.) Preparing to unpack .../archives/mat-aet_0.0.1_all.deb ... Unpacking mat-aet (0.0.1) ... Setting up mat-aet (0.0.1) ...
Lopuksi vielä ajoin komennon, varmistaakseni sen toiminnan
:$ mat-aet [Sun Sep 18 10:50:33.313475 2016] [mpm_event:notice] [pid 7842:tid 140699201685376] AH00489: Apache/2.4.18 (Ubuntu) configured -- resuming normal operations [Sun Sep 18 10:50:33.313559 2016] [core:notice] [pid 7842:tid 140699201685376] AH00094: Command line: '/usr/sbin/apache2' [Sun Sep 18 11:11:17.810012 2016] [mpm_event:notice] [pid 7842:tid 140699201685376] AH00491: caught SIGTERM, shutting down [Sun Sep 18 11:11:18.889482 2016] [mpm_event:notice] [pid 8153:tid 140567151024000] AH00489: Apache/2.4.18 (Ubuntu) configured -- resuming normal operations [Sun Sep 18 11:11:18.889556 2016] [core:notice] [pid 8153:tid 140567151024000] AH00094: Command line: '/usr/sbin/apache2' [Sun Sep 18 11:12:17.451241 2016] [authz_core:error] [pid 8157:tid 140567042082560] [client 127.0.0.1:53422] AH01630: client denied by server configuration: /home/matto/public_html [Sun Sep 18 19:12:00.943750 2016] [mpm_event:notice] [pid 8153:tid 140567151024000] AH00491: caught SIGTERM, shutting down [Sun Sep 18 19:35:04.874057 2016] [mpm_event:notice] [pid 1243:tid 140019667822464] AH00489: Apache/2.4.18 (Ubuntu) configured -- resuming normal operations [Sun Sep 18 19:35:04.875292 2016] [core:notice] [pid 1243:tid 140019667822464] AH00094: Command line: '/usr/sbin/apache2'
Lähteet
- http://terokarvinen.com/2011/create-deb-metapackage-in-5-minutes
- http://terokarvinen.com/2011/update-all-your-computers-with-a-deb-repository
- http://terokarvinen.com/2016/aikataulu-linux-palvelimena-ict4tn003-22-ja-23-alkusyksy-2016
- http://blog.jonliv.es/blog/2011/04/26/creating-your-own-signed-apt-repository-and-debian-packages/
14 total views, 1 views today