=== Moi! Sain vihdoin ja viimein pakattua sen rdesktopin onnistuneesti, joten tässä raporttia. Aluksi yleisohje paketoinnista, minkä jälkeen nano.spec ja rdesktop.spec. Jotkut rivit ovat saattaneet katketa kahdelle riville, mutta muuten pitäisi olla kuin alkuperäiset toimivat .spec-tiedostot. [snip] tie64d2 RPM-build Paketointiympäristön asentaminen RPM-paketointi kannattaa tehdä niin, että sille on oma ympäristönsä, jossa on helppo tarkkailla, mitä paketointi tekee ja mitä meni vikaan, jos näin käy. Paketointiympäristön asentaminen aloitetaan asentamalla RPM-build esim. komennolla "yum install rpm-build". Tämä asentaa tarvittavan työkalun RPM-pakettien paketointiin. Lisäksi tarvitaan paketointiympäristöä helpottava skripti, joka kannattaa hakea Tero Karvisen WWW-sivuilta "RPM Building as a User" [1]. Tallenna se tiedostoon /etc/rpm/macros. Tiedostossa määriteltyjä ympäristömuuttujia RPM-build käyttää paketoinnissa. Paketoinnin voi tehdä muullakin tavalla, mutta tämä helpottaa sitä. Jos esim. paketoijan nimen haluaa muuttaa joksikin muuksi kuin käyttäjätunnukseksi, voi /etc/rpm/macros-tiedoston kopioida käyttäjän kotihakemistoon nimelle ".rpmmacros" ja muuttaa paketoijan nimen sinne. Ympäristö tehdään käyttäjän kotihakemiston alle siten, että kansiohierarkia näyttää jokseenkin seuraavalta, jos pakataan esim. ohjelmisto "rdesktop": ~/rpmbuild | +-rdesktop | +-BUILD | +-TMP Kansioon "rdesktop" kopioidaan ohjelmiston lähdekoodien .tar.gz-paketti, esim. rdesktop-1.3.0.tar.gz, sekä RPM-buildia ohjaava .spec-tiedosto, esim. rdesktop.spec. BUILD-kansioon RPM-build purkaa ohjelmiston lähdekoodin, TMP-kansioon tulee väliaikaistiedostot sekä asennettavien tiedostojen polut, jotka vastaavat järjestelmän oikeita polkuja, esim. TMP/usr/share/doc/ jne. Ohjeita .spec-tiedoston kirjoittamiseksi löytyy esim. Fedora-projektin sivuilta [2]. Sen lisäksi on mahdollista käyttää .spec-tiedoston pohjana jonkin toisen paketin .spec-tiedostoa. Itse .spec-tiedoston määrittelyyn ei tässä oteta sen enempää kantaa. Seuraavassa lisää siitä, miten ja mistä saa jonkin toisen paketin .spec-tiedoston. Ohjelman lähdekoodi ja .spec-tiedosto RPM-paketteja on kahdenlaisia meitä kiinnostavia: binääripaketteja, jotka yleensä ovat nimetty tyyliin "rdesktop-1.3.0-1.i386.rpm" sekä lähdekoodipaketteja, joiden nimeäminen on saman tyylinen "rdesktop-1.3.0-1.src.rpm", mutta nimessä esiintyy "src" arkkitehtuurin sijaan. Binääripaketit ovat niitä, joihin tämä ohje tähtää. Lähdekoodipaketteja yleensä käytetään hyväksi binääripakettien paketoinnissa. Lähdekoodipaketti sisältää yleensä ohjelman lähdekoodit .tar.gz-tiedostossa sekä RPM-buildia ohjaavan .spec-tiedoston, josta on hyvä lähteä liikkeelle. Lähdekoodipaketin purkaminen onnistuu komennolla "rpm2cpio paketin_nimi.src.rpm |cpio -dvi". Komento purkaa senhetkiseen kansioon kaksi tiedostoa. Jos saatavilla ei ole lähdekoodipakettia, paketointi aloitetaan hakemalla ohjelman lähdekoodien .tar.gz-tiedosto sekä otetaan jokin .spec-tiedosto malliksi, jos sitä ei tule ohjelman lähdekoodin mukana. Huomionarvoisia seikkoja .spec-tiedoston muokkaamisessa on uuden julkaisuversion numerointi eli pitää muistaa lisätä numeroa yhdellä sekä muutosten kirjaaminen %changelog-osioon. Jotta ei kokeile paketointia ohjelmalla, jota ei edes saa kääntymään komentoriviltä käsin, kannattaa kääntämistä testata ohjelman lähdekoodien mukana tulleiden ohjeiden mukaisesti. Eli ensin puretaan lähdekoodien .tar.gz-tiedosto esim. kotihakemiston alle komennolla "tar -zxvf ohjelman_nimi.tar.gz", minkä jälkeen siirrytään purettuun ohjelman lähdekoodien kansioon ja yritetään löytää tiedostot README ja/tai INSTALL, joissa on yleensä ohjeet lähdekoodien kääntämisestä. Jos kääntäminen onnistui, on turvallista siirtyä paketointivaiheeseen. Muussa tapauksessa kannattaa joko valita jokin toinen ohjelma paketoitavaksi tai jättää paketointi siihen. Paketointi Paketointia varten kopioidaan lähdekoodien .tar.gz-tiedosto sekä .spec-tiedosto kansioon ~/rpmbuild/ohjelman_nimi/. Tämän jälkeen käynnistetään RPM-build komennolla "rpmbuild -ba ohjelman_nimi.spec" ja toivotaan parasta. Luultavasti ensimmäisellä kerralla ei päästä edes paketointivaiheeseen, vaan käännöksessä saattaa mennä jo jotain pieleen, joten yritetään selvittää, mistä virheilmoitukset johtuvat ja korjata niiden aiheuttajat. Paketoinnin eri vaiheiden virheilmoitusten selvittämistä voi auttaa se, että .spec-tiedostoon voi lisätä käytännössä melkein mitä tahansa komentorivillä suoritettavia komentoja eli sinne voi lisätä ajonaikaisen työkansion tulostuksen pwd-komennolla tms. Ennen uutta paketointiyritystä kannattaa tyhjentää BUILD- ja TMP-kansioiden sisältö, jotta ohjelma tulee varmasti käännettyä uudelleen ja siten kaikki paketoinnin vaiheet suoritettua alusta loppuun. Kun käännösvirheet on korjattu ja paketoinnissa päästää tiedostojen paketointivaiheeseen, saattaa tulla paljon ilmoitus tyyliin "Unpackaged files" sekä lista tiedostojen nimistä ja poluista. Tämä tarkoittaa sitä, että listatut tiedostot tai tiedostomaskit täytyy lisätä .spec-tiedoston %files-osioon, jotta RPM-build osaa ottaa ne mukaan pakettiin ja jotta pakettia purettaessa ne siirretään oikeisiin kansioihin. Tiedostojen lisäämistä varten ei tarvitse tyhjentää BUILD- ja TMP-kansioita joka kerta eikä siten tehdä käännöstäkään, vaan komennolla "rpmbuild -bl ohjelman_nimi.spec" pääsee suoraan tiedostojen lisäysvaiheeseen, mikä nopeuttaa paketoinnin suorittamista ja helpottaa tulosten tarkastelua, kun näkee heti, oliko %files-osioon lisätyistä tiedostoista mitään apua. Jos ja kun ei tule mitään selväkielisiä virheilmoituksia tai ilmoituksia paketoimattomista tiedostoista, kannattaa viimeisen kerran tyhjentää BUILD- ja TMP-kansiot ja ajaa paketointi uudelleen, jolloin viimeisillä tulosteriveillä pitäisi näkyä yleensä kolme riviä, jotka alkavat "Wrote: " ja tiedoston nimi sekä polku. Tämä tarkoittaa, että paketointi on onnistunut ja että paketista on olemassa lähdekoodi- ja kehitysversiopaketit, .src.rpm sekä debuginfo.rpm, ja että ./i386-kansiossa binääri-rpm-paketti. Paketoinnin onnistumisen testaaminen Paketoinnin onnistumista voi testata sillä tavalla, että root-käyttäjä poistaa paketin ohjelmiston, jos se on jo asennettuna ja asentaa sen uudelleen binääri-rpm-paketista, jolloin tiedostojen pitäisi sijoittua oikeisiin kansioihin. Suorittamalla ohjelman sen asennuksen jälkeen saa melko hyvän kuvan siitä, onnistuiko asennus. Onnistuneen asennuksen jälkeen voikin lisätä paketin yum-varastoon ja asentaa sen jatkossa yumilla, jolloin myös asennuksen riippuvuudet tulevat asennettua oikein. [1] http://www.hut.fi/~tkarvine/rpm-build-as-user.html [2] http://fedora.redhat.com/participate/developers-guide/ch-rpm-building.html Copyright (c) 2003 Jarno Lamberg. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Summary : Pico editor clone with enhancements Name : nano Version : 1.2.2 Release : 2 Copyright : GPL Group : Console/Editors URL : http://www.nano-editor.org Source : http://www.nano-editor.org/dist/v1.2/nano-1.2.2.tar.gz BuildRoot : %{_buildroot} Requires : ncurses %description GNU nano is a small and friendly text editor. It aims to emulate the Pico text editor while also offering a few enhancements. %prep %setup %build ./configure make %install %makeinstall %files /usr/share/info/nano.info.gz /usr/share/locale/*/LC_MESSAGES/nano.mo /usr/share/man/man1/nano.1.gz /usr/share/man/man5/nanorc.5.gz %defattr(-,root,root) %{_bindir}/* %changelog * Mon Nov 24 2003 Jarno Lamberg - Initial creation of distributable RPM. %define ver 1.3.0 %define rel 1 Summary : Remote Desktop Name : rdesktop Version : %{ver} Release : %{rel} Copyright : GPL; see COPYING Group : Applications/Communications URL : http://www.rdesktop.org/ Source : http://belnet.dl.sourceforge.net/sourceforge/rdesktop/rdesktop-1.3.0.tar.gz BuildRoot : %{_buildroot} BuildRequires : XFree86-libs %description rdesktop is a client for Remote Desktop Protocol (RDP), used in a number of Microsoft products including Windows NT Terminal Server, Windows 2000 Server, Windows XP and Windows 2003 Server. %prep %setup -n rdesktop rm rdesktop.spec %build ./configure --prefix=%{_prefix} --bindir=%{_bindir} --mandir=%{_mandir} make %install %makeinstall %files %defattr(-,root,root) %doc COPYING doc/AUTHORS doc/keymapping.txt doc/keymap-names.txt doc/ipv6.txt %{_bindir}/* /usr/share/keymaps/* /usr/share/man/man1/rdesktop.1.gz %changelog * Tue Nov 25 2003 Jarno Lamberg - Initial creation of distributable RPM. [/snip] === Copyright GPL (c) 2003 Pasi Nurmenaho. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. RPM -BUILD YMPÄRISTÖN ASENNUS JA TESTAUS Aluksi on syytä asentaa rpm-build, mikäli sitä ei ole vielä järjestelmään asennettu. Asennus kannattaa tehdä YUMilla, mikäli se on asennettuna. YUMilla asennettaessa tulee tietenkin olla kirjautuneena pääkäyttäjäksi. $ su - # yum install rpm-build Seuraavaksi tulee luoda ohjelman asetustiedosto /etc/rpm/macros. Kopioin tiedoston sisällön Tero Karvisen kotisivuilta osoitteesta http://www.hut.fi/~tkarvine/linux/doc/rpm-build-as-user.html. # pico /etc/rpm/macros Mikäli picoa ei ole asennettuna, voi käyttää myös jotakin muuta tekstieditoria... Tiedostossa määritellään ohjelmalle lähinnä käytettävä hakemistorakenne. Sisältö oli seuraavanlainen: - - - /etc/rpm/macros alkaa - - - %packager %(echo "$USER") %_topdir %(echo "$HOME")/rpmbuild %_rpmtopdir %{_topdir}/%{name} %_builddir %{_rpmtopdir}/BUILD %_rpmdir %{_rpmtopdir} %_sourcedir %{_rpmtopdir} %_specdir %{_rpmtopdir} %_srcrpmdir %{_rpmtopdir} %_tmppath %{_rpmtopdir}/TMP %_buildroot %{_tmppath}/%{name}-root - - - /etc/rpm/macros päättyy - - - Ohjelman (ja asetustiedoston) toiminta kannattaa testata tekemällä rpm -paketti jostakin vakaasta ja hyvin testatusta ohjelmasta, esim. tekstieditori nanosta. Testaus tehdään käyttäjäksi kirjautuneena, kuten kaikki RPM-paketoinnit. Aluksi tulee luoda käyttäjän kotihakemistoon asetustiedoston mukainen hakemistorakenne. [käyttäjä]$ pwd /home/käyttäjä [käyttäjä]$ mkdir rpmbuild [käyttäjä]$ cd rpmbuild [rpmbuild]$ mkdir nano [rpmbuild]$ cd nano [nano]$ mkdir TMP BUILD Seuraavaksi ladataan nanon source-RPM:n (esim. nano-1.2.2-1.src.rpm) nano- hakemistoon. Paketti löytyy editorin kotisivuilta (http://www.nano-editor.org/). Puretaan paketti. [nano]$ rpm2cpio nano-1.2.2-1.src.rpm |cpio -dvi nano-1.2.2.tar.gz nano.spec 1740 blocks Src.rpm -paketissa, jonka voi tässä vaihessa halutessaan poistaa, on ohjelman lähdekoodi pakattuna sekä nano.spec -niminen tiedosto. Nano.spec on tavallinen tekstitiedosto ja se sisältää RPM:n rakennusohjeet. Seuraavaksi rakennetaan RPM. [nano]$ rpmbuild -ba nano.spec Mikäli ohjelma antaa virheilmoituksen, kannattaa aluksi tarkistaa että järjestelmään on asennettuna lähdekoodin vaatima kääntäjä (esim .gcc). Mikäli virheilmoituksia ei tule, ohjelma on tehnyt i386 -alihakemiston, jossa muodostettu RPM sijaitsee. Nyt RPM:n voi asentaa roottina. RPM:N TEKEMINEN LÄHDEKOODISTA Aikani SourceForgea selailtuani löysin lupaavan oloisen kandidaatin, nload -nimisen pikku verkon monitorointiohjelman. Tekijän kotisivuilla oli RPM:t Red Hat 7.3:lle ja SuSe 8.0:lle, mutta Red Hat 9:lle ei löytynyt. Pienellä hakukoneen käytölläkään ei distrokohtaista RPM:ää löytynyt. Myönnettäköön, etten nyt ihan hiki päässä hakenut. Ohjelman kotisivulla (http://www.roland-riegel.de/nload/index_en.html) oli source-RPM, mutta ajattelin ottaa hieman haastetta ja latasin pelkän lähdekoodin. Aluksi luodaan paketin mukaan nimetty alihakemisto rpmbuild -hakemistoon ja kopioidaan lähdekoodi sinne. [rpmbuild]$ pwd /home/käyttäjä/rpmbuild [rpmbuild]$ mkdir nload [rpmbuild]$ mv nload-0.5.0.tar.gz nload Mennään alihakemistoon ja puretaan pakattu lähdekoodi. [nload]$ cd nload [nload]$ tar -zxvf nload-0.5.0.tar.gz Purettaessa muodostuu alihakemisto nload-0.5.0. Mennään sinne ja yritetään käännöstä (roottina). [nload]$ cd nload-0.5.0 [nload-0.5.0]$ su [nload-0.5.0]# ./configure&&make Configure menee läpi ok, make pysähtyy virheeseen: - - - form_field.cpp:136: default argument given for parameter 1 of ` Form::Form(Form::Slots* = 0)' form_field.h:89: after previous specification in `Form::Form(Form::Slots* = 0)' make[2]: *** [form_field.o] Error 1 make[2]: Leaving directory `/home/käyttäjä/rpmbuild/nload/nload-0.5.0/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/käyttäjä/rpmbuild/nload/nload-0.5.0' make: *** [all] Error 2 - - - Virheilmoitus ei kaltaiselleni maallikolle sano yhtään mitään, joten päätän etsiä vinkkejä verkosta. Projektin postilistalla SourceForgessa on maininta ko. bugista joka ilmenee gcc:n 3.x -versioilla. Poistan ohjelman tekijän ohjeiden mukaisesti form_field.cpp:n riviltä 136 kohdan "= 0". [nload-0.5.0]# pico +136 src/form_field.cpp //editointi Kokeilen kääntää uudelleen... [nload-0.5.0]# make clean [nload-0.5.0]# ./configure&&make Tällä kertaa käännös menee läpi, kokeillaan... [nload-0.5.0]# exit [nload-0.5.0]$ src/nload Ohjelma toimii kuvauksen mukaisesti. Koska lähdekoodia joudutaan muuttamaan toimivan ohjelman kääntämiseksi, täytyy tästä muutoksesta tehdä patch. Patch on tiedosto, joka sisältää tehdyt muutokset tekstimuodossa ja se luodaan vertaamalla alkuperäistä ja muutettua lähdekoodia keskenään esim. gendiff -nimisellä ohjelmalla. Koska tein muutoksen suoraan alkuperäiseen lähdekooditiedostoon, puran puhtaan version vertailua varten. nload-0.5.0]$ cd .. [nload]$ mv nload-0.5.0 nload-0.5.0-toimii [nload]$ tar -zxvf nload-0.5.0.tar.gz [nload]$ ls nload-0.5.0 nload-0.5.0.tar.gz nload-0.5.0-toimii Seuraava saattaa tuntua hieman nurinkuriselta, mutta näin päin gendiffin manuaalissa neuvotaan. [nload]$ cd nload-0.5.0 [nload-0.5.0]$ cd src [src]$ mv form_field.cpp form_field.cpp.fix [src]$ cp ../../nload-0.5.0-toimii/src/form_field.cpp . Eli alkuperäisen tiedoston perään ylimääräinen pääte ja muutettu tiedosto on alkuperäisellä nimellä. Sen jälkeen tehdään patch gendiffillä. [src]$ cd .. [nload-0.5.0]$ cd .. [nload]$ gendiff nload-0.5.0/src/ .fix > nload-gcc3compile-fix.patch [nload]$ ls nload-0.5.0 nload-0.5.0-toimii nload-0.5.0.tar.gz nload-gcc3compile-fix.patch - - - nload-gcc3compile-fix.patch alkaa - - - --- nload-0.5.0/src/form_field.cpp.fix 2002-08-01 20:21:31.000000000 +0300 +++ nload-0.5.0/src/form_field.cpp 2003-11-25 15:56:19.000000000 +0200 _atta__atta_ -133,7 +133,7 _atta__atta_ } -Form::Form( Slots* slots = 0 ) : m_slots( slots ), m_form(0), m_visible( false ) +Form::Form( Slots* slots ) : m_slots( slots ), m_form(0), m_visible( false ) { m_instances.push_back( this ); } - - - nload-gcc3compile-fix.patch päättyy - - - Vielä tarvitaan toimiva .spec -tiedosto. Sen tekemiseen kuluikin tunti jos toinen. [nload]$ pico nload.spec - - - nload.spec alkaa - - - %define name nload %define ver 0.5.0 %define rel 1 Name: %{name} Summary: nload is a console application which monitors network traffic and bandwidth usage in r$Version:%{ver} Release:%{rel} License: GPL version 2 Group: Applications/System URL: http://prdownloads.sourceforge.net/nload/nload-0.5.0.tar.gz Source0: %{name}-%{ver}.tar.gz Patch0: nload-gcc3compile-fix.patch Buildroot: %{_buildroot} Requires: ncurses BuildPrereq: ncurses-devel %description nload monitors network traffic and bandwidth usage. %prep %setup %patch0 -p1 %build ./configure make %install rm -rf %{_buildroot} %makeinstall %clean rm -rf %{_buildroot} %files %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog NEWS README %attr(0755,root,root) %{_bindir}/%{name} %{_mandir}/man1/%{name}.1.gz %changelog * Mon Nov 24 2003 Pasi Nurmenaho - fixed known bug crashing compilation with gcc 3.x - - - nload.spec päättyy- - - Nload.spec -tiedosto sisältää siis RPM:n rakennusohjeet: tunnistetiedot, lähdekoodipaketin sijainnin, patchin sijainnin, riippuvuudet, ohjeet kääntämistä varten, tiedostojen sijainnin jne. Ei mikään malliesimerkki, mutta toimii. Lisätietoja .spec -tiedostoista löytyy mm. osoitteesta http://fedora.redhat.com/participate/developers-guide/ch-rpm-building.html. Kun .spec tiedosto on tehty, kokeillaan sitä. Tehdään TMP ja BUILD -kansiot ja ajetaan rpmbuild. [nload]$ mkdir TMP BUILD [pee_atta_localhost nload]$ rpmbuild -ba nload.spec Todellisuudessa ensimmäisellä .spec -versiolla tuskin tulee valmista. Uusien yritysten välillä tulee muistaa tyhjentää TMP ja BUILD -kansiot. Kun build on mennyt onnistuneesti läpi, RPM pitäisi löytyä ohjelman tekemästä i386 -hakemistosta. Mikäli RPM vieläpä asentuu oikein (muista olla roottina), voit onnitella itseäsi. P.S. Yritin juuri toistaa .spec-tiedoston teossa ilmenneitä ongelmia (polkujen kanssa) muutaman tunnin ajan, onnistumatta. Todella hämmentävää. Ensin menee monta tuntia että saa ehjäksi, sitten ei saa uudestaan rikki. -- Pasi Nurmenaho p. 044 329 0563 Email : pasi.nurmenaho_atta_myy.helia.fi === En ehtinyt tehdä kuin a-kohdan. - Janne Vänttinen - 0102170 ----- tie64d2 rpm-build Rpm-kehitysympäristön ja nanon paketoinnin valmisteleminen alkoi asentamalla yumin avulla rpm-build -paketti ja kopioimalla Tero Karvisen Rpm Building as a User -artikkelista (http://www.hut.fi/~tkarvine/rpm-build-as-user.html) macros-teksti tiedostoon /etc/rpm/macros. Tämän jälkeen loin käyttäjän kotihakemistoon (tavallisena käyttäjänä, ei pääkäyttäjänä) seuraavan hakemistorakenteen: rpmbuild/ rpmbuild/nano rpmbuild/nano/TMP rpmbuild/nano/BUILD Kehitysympäristön testaamisen suoritin nanon paketoinnilla. Siirryin hakemistoon ~/rpmbuild/nano, jonne hain nanon lähdekoodipaketin nano-1.2.2-1.src.rpm nanon kotisivulta www.nano-editor.org. Purin src.rpm-paketin komennolla $ rpm2cpio nano-1.2.2-1.src.rpm | cpio -dvi Paketista purkautuivat tiedostot nano-1.2.2.tar.gz ja nano.spec. Rpm:n rakentaminen tapahtui komennolla $ rpmbuild -ba nano.spec Rakennus ei kuitenkaan onnistunut, mikä tulostetta tarkastelemalla johtui ilmeisen selvästi sopivan kääntäjän puutteesta. Ensiongelma poistui asentamalla puuttuva gcc, mutta rakennus ei tämänkään jälkeen onnistunut, vaikka käännnösvaiheeseen tällä kertaa päästiinkin. Pienen etsimisen jälkeen virheen aiheuttajaksi paljastui curses.h -tiedoston puute. Asensin yumilla ncurses-devel -paketin, mikä korjasi tilanteen ja rpm-rakennus onnistui. Siirryin i386-hakemistoon ja asensin siellä olleen binääripaketin siirtymällä pääkäyttäjäksi ja antamalla komennon rpm -i nano-1.2.2-1.i386.rpm. Komento rpm -qi nano antoi asennetun paketin tiedot, joissa käyttäjätunnukseni näkyi paketoijana ja paketointiaika oli muutama minuutti sitten. Kehitysympäristö oli kunnossa. Copyright GPL (c) 2003 Janne Vänttinen. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. === Harjoitus 3: RPM-paketointi Harjoitus tehtiin keskiviikkona 19.11.2003 ja torstaina 20.11.2003. Harjoituksen tarkoituksena oli laittaa rpm-kehitysympäristö toimintaan ja testata se paketoimalla nano. Koska koneelle oli asennettu jo aikaisemmin YUM ei sitä enää tarvinnut tehdä vaan pystyin asentamaan rpm-asennusympäristön samantien. Tämä tehtiin kirjoittamalla komento yum install rpm-build. Samalla asensin c-kielen kääntäjän, sillä sitä ei koneella vielä ollut. Tätä tarvittiin harjoitksen myöhemmässä vaiheessa. C-kääntäjä asennettiin komennolla yum install gcc. Nämä asennukset onnistuivat hyvin ilman ongelmia ja ne tehtiin rootina. Seuraavaksi loin rpmbuild -kansion komennolla mkdir rpmbuild. Siirryin kyseiseen kansioon komennolla cd rpmbuild ja tein sinne kansion nimeltä nano komennolla mkdir nano. Siirryin taas nano-kansioon ja tein sinne kansiot BUILD ja TMP. Seuraavaksi hain Internet-sivuilta Nanon tervapallon ja testasin sen toimintaa. Tervapallo haettiin nanon Internet-sivuilta, jotka olivat http://www.nano-editor.org/download.html ja paketin nimi oli nano-1.2.2- 1.tar.gz. tervapallo tallennettiin käyttäjän minna kotihakemistoon. Seuraavaksi hain opettajan Tero Karvisen kotisivuilta dokumentista Rpm Building as a user tiedoston macros. Kopioin kyseinsen tiedoston kansioon /etc/rpm. Tämä tehtiin rootina. Tervapallo, nano-1.2.2-1.tar.gz purettiin komennolla tar zxvf nano-1.2.2.tar.gz. Tämän seurauksena kotihakemistoon ilmestyi kansio nano-1.2.2. Mentiin kyseiseen kansioon komennolla cd nano-1.2.2 ja ajettiin komento ./configure. Tämä komento tunnistaa ympäristön ja tekee maken. Tämän jälkeen kirjoitettiin komento make, joka alkaa kääntämään kyseistä ohjelmaa. Kun kääntäminen oli onnistunut ajettiin kyseinen ohjelma nano-1.2.2-kansiossa komennolla ./nano. Ohjelma käynnistyi, joten kääntäminen ja purku olivat onnistuneet. Seuraavaksi haettiin nanon Internet-sivulta lähdekoodi nanoon, joka oli nano- 1.2.2-1.src.rpm. Kyseinen paketti on valmis rpm-paketti, mutta testasimme sen toimintaa, jotta saataisiin selville, että kääntäminen onnistuu. Tallennettiin paketti käyttäjän minna-kotihakemistoon, josta se kopioitiin kansioon nano komennolla mv nano-1.2.2-1.src.rpm rpmbuild/nano/ . Seuraavaksi purettiin paketti komennolla rpm2cpio nano-1.2.2.src.rpm | cpio -dvi. Tämän jälkeen ei source-rpm:ää enää tarvittu, joten poistettiin se komennolla rm nano-1.2.2- 1.src.rpm. Kansioon on tullut tiedosto nano.spec, jossa on ohjeita siitä, kuinka rpm-paketit voidaan kääntää. Käynnistettiin kääntäminen komennolla rpmbuild –ba nano.spec. Seuraavaksi asennettiin juuri käännetty paketti. Mentiin hakemistoon /home/minna/rpmbuild/nano/i386 ja ajettiin asennuskomento rpm -i nano-1.2.2-1.i386.rpm. Tarkastettiin vielä juuri asennetun nanon toimivuus ja mentiin hakemistoon /home/minna/rpmbuild/nano, jossa annettiin komento nano. Editori aukeaa, joten asennus toimii. Tarkistettiin vielä versio ja muita tietoja komennolla rpm –qi nano. Versio oli 1.2.2. Ympäristö oli siis kunnossa. Seuraavaksi poistettin aiemmin tehty nano-kansio komennolla rpm –r nano. Tehtiin uusi nano kansio samaan paikkaan kuin aikaisemmin ja luotiin taas kerran sen alle kansio BUILD ja TMP. Haettiin nano-tervapallo uudestaan ja siirrettiin se kansiion /home/minna/rpmbuild/nano. Luotiin oma nano.spec- tiedosto picolla. Pohje tiedostolle löytyi Fedoran kotisivuilta osoitteesta www.fedora.redhat.com. Tehtiin tähän tiedostoon vähitellen muutoksia. Ensimmäisen käännös-yrityksen jälkeen tiedosto oli tämän näköinen. Name: nano Summary: Nano's ANOther editor, an enhanced free Pico clone. Version: 1.2.2 Release: 2 License: GPL Group: Applications/Editors URL: http://www.nano-editor.org/ Source0: http://www.nano-editor.org/dist/v1.2/nano-1.2.2.tar.gz Buildroot: %{_buildroot} %description Nano is a small, free and friendly editor which aims to replace Pico, the default editor included in the non-free Pine package. Rather than just copying Pico's look and feel, nano also implements some missing (or disabled by default) features in Pico, such as "search and replace" and "go to line number". %prep %setup %build ./configure make %install %makeinstall %files %defattr(-,root,root) %{_bindir}/* /usr/share/locale/ /usr/share/info/* /usr/share/man/man1/nano.1.gz /usr/share/man/man5/nanorc.5.gz %changelog * Thu Nov 20 2003 Minna Hakkola —Build rpm from scratch Käännettin tämä komennolla rpmbuild -ba nano.spec. Tämä käännös ei kuitenkaan onnistunut, joten nano.spec-tiedostossa oli jotain vikaa. Mentiin siis tutkimaan kyseistä tiedostoa uudestaan ja kävi ilmi, että tiedosto-kohdasta puuttui määrityksiä. Lisättiin siis puuttuvat tiedostot kohdan {_bindir}/* alle. Tyhjennettiin vielä ennen uutta käännöstä /BUILD ja /TMP-tiedosto komenolla rm –rf BUILD/* TMP/*. Käännös tehtiin seuraavaksi komennolla rpmbuild -ba nano.spec. Nyt käännös onnistui ilman virheilmoituksia, joten se onnistui. Asennettiin uusi versio Rootina komennolla rpm -i nano-1.2.2- 2.i386.rpm. Tämä tehtiin hakemistossa /home/minna/rpmbuild/nano/i386. Ajettiin vielä ohjelma nano ja tekstieditori aukesi. Asennus oli siis onnistunut. Lopuksi vielä purettiin rpm-paketti ja tarkistettiin sen toimivuus. Poistettiin asennettu nano komennolla yum remove nano. Tätä testausta varten tehtiin kansio purkutesti komennolla mkdir purkutesti ja siirryttiin kyseiseen kansioon. Annettiin komento rpm2cpio ../rpmbuild/nano/nano-1.2.2-2.src.rpm | cpio –dvi. Mentiin kansioon /nano/BUILD/nano-1.2.2/ ja muutettiin sitä sen verran, että poistettiin rivien katkominen. Ajettiin komennot make clean, ./configure --disable wrapping, ./configure, make ja ./nano. Tämä muokkaus toimi kyseisessä kansiossa. Muokattiin nano.spec tiedostoa sen verran, etä muutettin versio numero ja poistetttin wrapping kokonaan. Nämä näyttivät seuraavilta nano.spec-tiedostossa: release: 3, %build ./configure -- disable-wrapping. Tyhjennettiin vielä kerran BUILD ja TMP-kansiot komennolla rm –rf BUILD/* TMP/*. Ajettiin komento rpmbuild ba nano.spec. Poistettiin vielä vanha nano komennolla yum remove nano, joka tehtiin rootina. Mentiin i386-kansioon j asennettiin nano komennolla rpm -i nano-1.2.2-3.i386.rpm. Testattiin vielä toimivuutta, ja muutokset olivat tulleet voimaan ja nano toimi. Koska harjoituksen tekemiseen oli kulunut niin kauan aikaa en enää ehtinyt tehdä toista osuutta harjoituksesta. Yritän kuitenkin ehtiä tekemään sen ensi viikon harjoituksen yhteydessä. Copyright GPL (c) 2003 Minna Hakkola. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. === Tee rpm-kehitysympäristö, testaa se paketoimalla nano. Paketoi jokin ohjelma, josta ei vielä ole rpm-pakettia. Harjoitus toteutettiin keskiviikkona 19.11.2003 ja torstaina 20.11.2003. Anna-Kristiina Mäkilä a0200349 Harjoituksen alussa koin suuria vastoinkäymisiä. Vaikka edellisen harjoituksen lopuksi olimme korjanneet IP:n, maskin jne oikeiksi, en päässyt verkkoon. Verkkoasetusten muokkaaminenkaan ei auttanut. Tämän seurauksena Yum ei tietenkään toiminut. Yritin tehdä tekemättömäksi kaikki edellisen harjoituksen aikana tekemäni muutokset. Lopulta vaihdoin konetta ja johan toimi, mahdollisesti kyseisen koneen verkkokortissa on vikaa.. Harjoitus aloitettiin luomalla RPM-ympäristö. Asensin Yum:lla seuraavat ohjelmat: rpm-build, gcc ja pine. Pinen, koska en halunnut ylimääräistä nanoa sekoittamaan harjoituksen kulkua. Asennukset onnistuivat vaivatta ja siirryin tekemään kansiot käyttäjän ak kotihakemistoon. Harjoituksessa pitää olla tarkkana, ettei tee root:n tunnuksilla mitään asennusten lisäksi. tarvittavat kansiot: /home/ak/rpmbuild /home/ak/rpmbuild/nano /home/ak/rpmbuild/nano/BUILD /home/ak/rpmbuild/nano/TMP Opettaja Tero Karvisen ohjeen mukaan kopioin hänen kotisivuiltaan dokumentista rpm-build-as-user, tiedoston macros kansioon /etc/rpm. Tämä piti suorittaa root:n tunnuksin. Tämä jälkeen päätin testata tervapallon purkua hakemalla nanon osoitteesta http://www.nano-editor.org/download.html, paketti nano- 1.2.2.tar.gz. Paketti tallennettiin käyttäjän ak kotihakemistoon. Tervapallo, jossa on pääte .gz, puretaan komennolla tar zxvf nano-1.2.2.tar.gz Kotihakmistoon tuli purun yhteydessä hakemisto nano-1.2.2, mennään tähän tiedostoon ja ajetaan ./configure, joka tunnistaa ympäristön ja tekee makefile- tiedoston. Komentokehoitteen palattua annetaan komento make, joka alkaa kääntämään ohjelmaa. Tämän jälkeen ohjelmaa pitäisi pystyä ajamaan kyseisessä kansiossa komennolla ./nano -> toimii. Haetaan Internetistä Nanon lähdekoodipaketti nano-1.2.2-1.src.rpm Paketti on valmis rpm-paketti, tämä käännetään myöskin ennen varsinaista harjoitusta, jotta voidaan varmistaa ympäristön toiminta. Paketti tallennetaan käyttäjän ak kotihakemistoon. Sieltä se kopioidaan kansioon nano: mv nano-1.2.2-1.src.rpm rpmbuild/nano/ Puretaan source-paketti: rpm2cpio nano-1.2.2-1.src.rpm | cpio -dvi Tämän jälkeen alkuperäistä pakettia (nano...src.rpm) ei enää tarvita ja se voidaan poistaa kansiosta /nano. Hakemistoon on tullut tiedosto nano.spec, jossa on ohjeet kuinka tämä rpm-paketti tulee kääntää. Käynnistetään itse kääntö komennolla rpmbuild -ba nano.spec -ba tarkoittaa: tee kaikki vaiheet Tämän jälkeen poistetaan vanha nano, mikäli sellainen on. Harjoituskoneellani sitä ei ole (lukuunottamatta aiemmin käännettyä, joka kuitenkin toimii vain omassa kansiossaan). Poistaa voi esimerkiksi komennolla yum remove nano Root:n oikeuksin asennetaan juuri käännetty (uusi) nano. Mennään kansioon /home/ak/rpmbuild/nano/i386/, joka syntyi purun yhteydessä. Siellä ajetaan asennuskomento rpm:lle rpm -i nano-1.2.2-1.i386.rpm Nyt voidaan tarkistaa asennetun nanon versio ja toimivuus: cd .. -> palataan hakemistossa taaksepäin yhden hakemiston verran nano -> toimii, editori aukeaa rpm -qi nano -> version 1.2.2, release 1 Nämä toimivat testit todistavat, että ympäristö on valmis todelliseen koetukseen.. Poistetaan aiemmin tehty /nano -kansio hakemistosta /rpmbuild. Tehdään uusi /nano kansio samaan paikkaan ja sen alle alihakemistot /BUILD ja /TMP. Haetaan nano-tervapallo uudestaan, siirretään se kotihakemistosta kansioon /home/ak/rpmbuild/nano/ Seuraavaksi luodaan oma nano.spec -tiedosto esimerkiksi picolla. Hyvän pohjan tiedostolle löytää Fedorasta (tarkka URL: http://www.fedora.redhat.com/participate7developers-guide/ch-rpm- building.html), kopioidaan vähän kerrallaan tarvittavia osia tiedostoon nano.spec. Omani näytti valmiina tällaiselta käännösvaiheen virheilmoitusten jälkeen: Name: nano Summary: GNU nano is an enhanced clone of Pico text editor. Version: 1.2.2 Release: 2 License: GPL Group: Applications/Editors URL: http://www.nano-editor.org/ Source0: http://www.nano-editor.org/dist/v1.2/nano-1.2.2.tar.gz Buildroot: %{_buildroot} %description Besides basic text editing, nano offers many extra features like an interactive search and replace, goto line number, auto-indentation, feature toggles, internationalization support, and filename tab completion. %prep %setup %build ./configure make %install %makeinstall %files %defattr(-,root,root) %{_bindir}/* /usr/share/locale/ /usr/share/info/* /usr/share/man/man1/nano.1.gz /usr/share/man/man5/nanorc.5.gz %changelog * Thu Nov 20 2003 A-K Makila — Try to build rpm from scratch Ensimmäinen kääntö tapahtui komennolla rpmbuild -ba nano.spec tämä kuitenkin päättyi virheilmoitukseen error: Installed (but unpackaged) file(s) found: .. lista kyseisistä tiedostoista. Kopioin puuttuvat tiedostot nano.spec -tiedostoon (kohdan % {_bindir}/* alle). Ennen uutta kääntöä tyhjennetään /BUILD- ja /TMP-tiedostot: rm -rf BUILD/* TMP/* uusi kääntö samalla komennolla kuin ensimmäinenkin (rpmbuild -ba nano.spec). Tällä kertaa känntö onnistui ilman virheilmoituksia. Root:n oikeuksin asennetaan tämä uusi versio, ensin poistetaan mahdollinen vanha, testataan vielä varmuuden vuoksi ajamalla: nano ->ei ole, asennus kuten aiemmin hakemistossa /home/ak/rpmbuild/nano/i386: rpm -i nano-1.2.2-2.i386.rpm Jo tässä vaiheessa huomataan, että release numero on 2 (..-2.i386.rpm). Ajetaan ohjelmaa nano ->editori aukeaa rpm -qi nano ->release 2 Tarkistetaan vielä tehdyn rpm-paketin toimivuus purkamalla se. Poistetaan nano -> yum remove nano. Tehdään tätä varten kansio mkdir testi/, siirrytään tähän hakemistoon ja annetaan komento rpm2cpio ../rpmbuild/nano/nano-1.2.2-2.src.rpm | cpio -dvi Mennään kansioon /nano/BUILD/nano-1.2.2/, tehdään muutosta sen verran, että otetaan rivien katkominen pois, ajetaan make clean ./configure --disable wrapping ./configure make ./nano -> toimii tässä kansiossa cd rpmbuild/nano muokataan nano.spec tiedoston release numeroa ja poistetaan wrapping kokonaan: pico nano.spec release: 3 %build ./configure --disable-wrapping tyhjennetään BUILD ja TMP kansiot. Aina kun tehdään muutoksia, pitää make ajaa uudelleen. POistetaan vanha nano. rm -rf BUILD/* TMP/* rpmbuild -ba nano.spec yum remove nano (root) cd i386 rpm -i nano-1.2.2-3.i386.rpm testataan -> nano Vaikka tehtävänantoon ei kuulunutkaan yrittää lähdekoodin muokkaaminen, yritin myös sitä tunnilla käydyn esimerkin avulla: /home/ak/nano-1.2.2 grep -r "GNU nano" * | less -> muokataan tiedostoa nano.h, koska siellä on ohjelman aloitusrivillä sijaitseva teksti. Vaihdetaan se mielivaltaisesti. Tallennetaan ja ajetaan ./configure -> make -> make clean -> ./nano joo, ei vaihtunut nimi.. Aloitin hakemaan toista käännettävää ohjelmaa www.freshmeat.org/ -sivulta. Oikein kivantuntunen ohjelma löytyikin, mutta tällä kertaa labra-aika loppui jälleen kesken. Täten pitää palata siihen sitten ensi viikolla. Toimitan siis jatko-osan ensi viikolla.. Copyright GPL (c) 2003 Anna-Kristiina Mäkilä. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.