Pokazywanie postów oznaczonych etykietą emerge. gentoo zalety. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą emerge. gentoo zalety. Pokaż wszystkie posty

piątek, 19 marca 2010

Gentoo na Google Summer of Code 2010

Pomysły na rozwój dystrybucji w ramach GSoC 2010 można znaleźć tutaj. Jak dla mnie szczególnie ciekawa wydaje się idea tagowania pakietów - możliwość przypisania pakietów do kilku kategorii w portage.

piątek, 8 stycznia 2010

Aktualizacja openldap

Ostatnio pojawiła sie w portage'u wersja pakietu Openldap z nowej gałęzi - 2.4. Chciałem na jej przykładzie omówić politykę aktualizacji stosowaną w Gentoo w wypadku znaczących zmian w funkcjonalności nowej wersji pakietu.

Próba aktualizacji paczki z wersji 2.3 do 2.4 zakończona będzie niepowodzeniem - dlaczego?
Ano - pakiet używa nowego formatu bazy danych - przez co obecne w systemie bazy OpenLDAP w wersji 2.3 nie pozwolą na poprawne działanie serwera wersji 2.4. Dzięki takiemu podejściu nie zabijemy nieświadomie swojego systemu. Zobaczmy najpeirw jak to wygląda w praktyce:

y ~ # emerge -av openldap

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild U ] net-nds/openldap-2.4.19-r1 [2.3.43] USE="berkdb crypt kerberos perl samba sasl ssl -cxx% -debug -experimental% -gnutls% -icu% -iodbc% -ipv6 -minimal -odbc -overlays (-selinux) -slp -smbkrb5passwd -syslog% -tcpd (-gdbm%*)" 0 kB

Total: 1 package (1 upgrade), Size of downloads: 0 kB

Would you like to merge these packages? [Yes/No]

>>> Verifying ebuild manifests

>>> Emerging (1 of 1) net-nds/openldap-2.4.19-r1
* openldap-2.4.19.tgz RMD160 SHA1 SHA256 size ;-) ... [ ok ]
* checking ebuild checksums ;-) ... [ ok ]
* checking auxfile checksums ;-) ... [ ok ]
* checking miscfile checksums ;-) ... [ ok ]
>>> cfg-update-1.8.2-r1: Creating checksum index...
*
* Scanning datadir(s) from slapd.conf and
* the default installdir for Versiontags
* (/var/lib/openldap-data may appear twice)
*
* - Checking /var/lib/openldap-data...
* Found Versiontag in /var/lib/openldap-data
* Versiontag doesn't match current major release!
* Versiontag says other major and you (probably) have datafiles!

*
* A (possible old) installation of OpenLDAP was detected,
* installation will not proceed for now.
*
* As major version upgrades can corrupt your database,
* you need to dump your database and re-create it afterwards.
*
* Additionally, rebuilding against different major versions of the
* sys-libs/db libraries will cause your database to be inaccessible.
*
* 1. /etc/init.d/slurpd stop ; /etc/init.d/slapd stop
* 2. slapcat -l /root/ldapdump.1262979255.raw
* 3. egrep -v '^entryCSN:' /root/ldapdump.1262979255
* 4. mv /var/lib/openldap-data/ /var/lib/openldap-data-backup/
* 5. emerge --update \=net-nds/openldap-2.4.19-r1
* 6. etc-update, and ensure that you apply the changes
* 7. slapadd -l /root/ldapdump.1262979255
* 8. chown ldap:ldap /var/lib/openldap-data/*
* 9. /etc/init.d/slapd start
* 10. check that your data is intact.
* 11. set up the new replication system.
*
*
* ERROR: net-nds/openldap-2.4.19-r1 failed.
* Call stack:
* ebuild.sh, line 49: Called pkg_setup
* openldap-2.4.19-r1.ebuild, line 213: Called openldap_find_versiontags
* openldap-2.4.19-r1.ebuild, line 99: Called openldap_upgrade_howto
* openldap-2.4.19-r1.ebuild, line 197: Called die
* The specific snippet of code:
* die "You need to upgrade your database first"
* The die message:
* You need to upgrade your database first
*
* If you need support, post the topmost build error, and the call stack if relevant.
* A complete build log is located at '/var/log/portage/net-nds:openldap-2.4.19-r1:20100108-193411.log'.
* The ebuild environment file is located at '/var/tmp/portage/net-nds/openldap-2.4.19-r1/temp/die.env'.
*

>>> Failed to emerge net-nds/openldap-2.4.19-r1, Log file:

>>> '/var/log/portage/net-nds:openldap-2.4.19-r1:20100108-193411.log'


Jak widać - próba zakończona niepowodzeniem. Dodatkowo - co ma miejsce w wypadku większości pakietów - dostajemy gotową instrukcję/procedurę upgrade'u obecnej bazy LDAP do nowej wersji.

Zainteresowanym pozostawiam kwestię sprawdzenia w jaki sposób zrobiona jest powyźsza blokada - na pewno warto przyjrzeć się plikowi ebuild - /usr/portage/net-nds/openldap/openldap-2.4.19-r1.ebuild

Dalej - to jest już proste - instrukcja prowadzi nas "za rączkę" - najlepiej samemu to przerobić.

Na inny raz pozostawiam kwestię LDAPa i jego zastosowań

TIPS & TRICKS
Ponieważ domyślnie nowy pakiet (w tym wypadku chodzi o wersję 2.4) można skompilować dopiero po wyłączeniu aktualnej wersji serwisu (2.3) - co może zając dobrych parę minut - warto skorzystać ze sztuczki umożliwiającej skompilowanie pakietu bez jego instalacji (przełącznik --buildpkgonly):

# FORCE_UPGRADE=1 emerge -av --buildpkgonly openldap


Ważne w tym wypadku jest ustawienie wartości zmiennej FORCE_UPGRADE przy wywołaniu polecenia emerge. Powyższa komenda skompiluje pakiet - a po kompilacji umieści go w paczce .tbz w /usr/portage/packages (domyślnie).

Dzięki temu zabiegowi po wyłączeniu starego serwisu - możemy szybko zainstalować nową wersję openldapa z paczki tbz:

# emerge -av --usepkgonly openldap


Migracja przebiegnie wtedy bardzo sprawnie i praktycznie bez większych zakłóceń. Warto stosować to rozwiązanie przy tego typu trudnych aktualizacjach.

piątek, 13 listopada 2009

Gentoo - problemy przy kompilacji KDE4 - błąd libtool: link: `/usr/lib/libogg.la' is not a valid libtool archive

Ponieważ pakiety KDE4 w Gentoo w końcu zostały zakwalifikowane jak pakiety stabilne - postanowiłem sobie zaktualizować system instalując przy okazji środowisko grficzne KDE4. Niestety przy kompilacji pakietu pojawia się powyższy błąd:

/bin/grep: /usr/lib/libogg.la: No such file or directory
/bin/sed: can't read /usr/lib/libogg.la: No such file or directory
libtool: link: `/usr/lib/libogg.la' is not a valid libtool archive
make: *** [libgstvorbis.la] Error 1
*
* ERROR: media-plugins/gst-plugins-vorbis-0.10.23 failed.
* Call stack:
* ebuild.sh, line 49: Called src_compile
* environment, line 2289: Called gst-plugins-base_src_compile
* environment, line 1665: Called die
* The specific snippet of code:
* emake || die "compile failure"
* The die message:
* compile failure
*
* If you need support, post the topmost build error, and the call stack if relevant.
* A complete build log is located at '/var/log/portage/media-plugins:gst-plugins-vorbis-0.10.23:20091113-071732.log'.
* The ebuild environment file is located at '/var/tmp/portage/media-plugins/gst-plugins-vorbis-0.10.23/temp/environment'.
*


Żeby pozbyć się problemów instalujemy pakiet dev-util/lafilefixer, a następnie go uruchamiamy:

# lafilefixer --justfixit


Następnie można kontynuować aktualizację.

Zadanie domowe:
- poszukać informacji o plikach .la
- przeglądnąć dowolny plik libtool .la

środa, 12 sierpnia 2009

eselect - narzędzie do konfiguracji i administracji środowiska Gentoo

Spośród wielu przydatnych narzędzi znacznie automatyzujących administrację w systemie Gentoo nie można zapomnieć o eselect. Jest to modularne narzędzie pozwalające na konfigurację wielu aspektów środowiska napisane w całości w bashu.
Jak to zainstalować?

Poszukajmy w portage'u znaną już z wcześniejszych postów komendą eix:

# eix ^eselect
[I] app-admin/eselect
Available versions: 1.0.10 1.0.11-r1 1.0.12 1.1.1 ~1.1.2 {bash-completion doc vim-syntax}
Installed versions: 1.1.1(14:09:03 08/02/09)(bash-completion -doc)
Homepage: http://www.gentoo.org/proj/en/eselect/
Description: Gentoo's multi-purpose configuration and management tool

[I] app-admin/eselect-fontconfig
Available versions: 1.0
Installed versions: 1.0(15:55:30 01/20/08)
Homepage: http://www.gentoo.org
Description: An eselect module to manage /etc/fonts/conf.d symlinks.

[I] app-admin/eselect-news
Available versions: ~20070709 ~20071025 ~20071201 20080320
Installed versions: 20080320(11:29:19 02/15/09)
Homepage: http://paludis.pioto.org/
Description: GLEP 42 news reader

[I] app-admin/eselect-oodict
Available versions: 20060621 20060706 ~20060806 20061117
Installed versions: 20061117(16:53:52 09/21/07)
Homepage: http://www.gentoo.org/
Description: Manages configuration of dictionaries for OpenOffice.Org.

[I] app-admin/eselect-opengl
Available versions: 1.0.5 ~1.0.6 1.0.6-r1 ~1.0.7
Installed versions: 1.0.6-r1(20:49:53 05/11/08)
Homepage: http://www.gentoo.org/
Description: Utility to change the OpenGL interface being used

* app-admin/eselect-oracle
Available versions: ~1.0-r260
Homepage: http://www.gentoo.org/
Description: Utility to change the Oracle SQL*Plus Instantclient being used

* app-admin/eselect-postgresql
Available versions: 0.3
Homepage: http://www.gentoo.org/
Description: Utility to change the default postgresql installation

[I] app-admin/eselect-python
Available versions: 20080521 20080925 20090606 ~20090801 ~20090804
Installed versions: 20090606(14:20:10 08/02/09)
Homepage: http://www.gentoo.org
Description: Manages multiple Python versions

[I] app-admin/eselect-rails
Available versions: 0.14 0.15
Installed versions: 0.15(14:21:36 08/02/09)
Homepage: http://www.gentoo.org/
Description: Manages Ruby on Rails symlinks

[I] app-admin/eselect-ruby
Available versions: ~20081211 20081227
Installed versions: 20081227(14:20:21 08/02/09)
Homepage: http://www.gentoo.org
Description: Manages multiple Ruby versions

[I] app-admin/eselect-vi
Available versions: 1.1.4 1.1.5 ~1.1.6
Installed versions: 1.1.5(10:33:02 12/22/07)
Homepage: http://www.gentoo.org/
Description: Manages the /usr/bin/vi symlink

* app-vim/eselect-syntax
Available versions: 20070506
Homepage: http://www.gentoo.org/
Description: vim plugin: Eselect syntax highlighting, filetype and indent settings

Found 32 matches.


Ze względu na liczbę dostępnych modułów wynik został troszeczkę skrócony - wyciąłem mniej ważne z mojego punktu widzenia moduły. Jak widać jest tego trochę. Zainstalujmy teraz eselect:

# emerge -av eselect


Udało się. Zobaczmy w praktyce jak to działa, uruchomię:

# eselect
Usage: eselect

Global options:
--no-color,--no-colour Disable coloured output

Built-in modules:
help Display a help message
usage Display a usage message
version Display version information

Extra modules:
bashcomp Manage contributed bash-completion scripts
binutils Manage installed versions of sys-devel/binutils
ctags Manage /usr/bin/ctags implementations
editor Manage the EDITOR environment variable
env Manage environment variables set in /etc/env.d/
esd Select esound daemon or wrapper
fontconfig Manage fontconfig /etc/fonts/conf.d/ symlinks
java-nsplugin Manage the Java plugin for Netscape-like Browsers
java-vm Manage the Java system and user VM
kernel Manage the /usr/src/linux symlink
modules A module for querying modules. By default, it lists all available modules
news-tng Read Gentoo ("GLEP 42") news items
news Read GLEP 42 news items
oodict Manage the configuration of dictionaries for OpenOffice.Org.
opengl Manage the OpenGL implementation used by your system
pager Manage the PAGER environment variable
profile Manage the /etc/make.profile symlink
python Manage the /usr/bin/python and python.1 man symlinks.
rails Manage Ruby on Rails versions
rc Manage /etc/init.d scripts in runlevels
ruby Manage ruby symlinks
vi Manage /usr/bin/vi implementations
visual Manage the VISUAL environment variable
wxwidgets Manage the system default wxWidgets profile.
xvmc Manage the XvMC implementation used by your system

Liczba modułów jest znaczna - czego można się już było spodziewać po wynikach wyszukiwania. Z tego względu omówię jedynie najważniejsze moduły - pozostałe pozostawiam do testowania we własnym zakresie - zasada działania i wywoływania jest podobna o ile nie identyczna.

Co się przydaje:

- moduł editor -ustawienie domyślnego edytora - spróbujmy:

# eselect editor
Usage: eselect editor

Standard actions:
help Display help text
usage Display usage information
version Display version information

Extra actions:
list List available targets for the EDITOR variable
set Set the EDITOR variable in profile
target Target name or number (from 'list' action)
show Show value of the EDITOR variable in profile
update Update the EDITOR variable if it is unset or invalid

Wyświetli nam działania jakie możemy w ramach modułu wykonać (są one na ogół identyczne w każdym z modułów - dzięki czemu obsługa eselect jest prosta - wszystko to kwestia przyjęcia właściwej konwencji)
Wylistuję dostępne edytory:

# eselect editor list
Available targets for the EDITOR variable:
[1] /bin/nano
[2] /bin/ed
[3] /usr/bin/ex
[4] /usr/bin/vi


Ustawię edytor na vi (tak naprawdę to będzie vim). Przy ustawianiu za pomocą eselecta możemy używać numer wpisu lub jego nazwę- ja skorzystam z numeru:

# eselect editor set 4
Setting EDITOR to /usr/bin/vi ...

Co się stało? Powinno się zmienić ustawienie zmiennej środowiskowej EDITOR.

# env|grep EDITOR
EDITOR=/bin/nano

hmm... nie jest tak jakbym chciał. Co się stało? Proawdopodobnie niezostała zaktualizowana wartość zmiennej w środowisku. Sprawdzę czy zmienna została ustawiona (katalog /etc/env.d - o tym opowiem innym razem szczegółowo)

# grep -r EDITOR /etc/env.d/
/etc/env.d/99editor:EDITOR="/usr/bin/ex"


Jest. A więc narzędzie zmienia ustawienia zmiennej EDITOR w konfiguracji systemu. W celu wymuszenia zmian w środowisku roboczym należy wykonać aktualizację:

# env-update
>>> Regenerating /etc/ld.so.cache...

I już powinno być ok. Sprawdzę:

edward ~ # env|grep EDITO
EDITOR=/usr/bin/vim

No i jest. Zmienną EDITOR można było do niedawna ustawić również w pliku /etc/rc.conf jednak zalecane jest definiowanie jej w pliku ~/.bashrc (lub odpowiedniku) bądź utworzenia pliku /etc/env.d/99editor i ustawienie tam zmiennych (jak w powyższym przykładzie).

- ustawienie aktywnej jvm
W tym wypadku mamy możliwość ustawienia wersji wirtualnej maszyny java, którą będziemy używać. Możemy dokonać wyboru na poziomie systemu lub użytkownika. Zdefinujmy aktywny jvm na poziomie systemu:

# eselect java-vm list
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Available Java Virtual Machines:
[1] sun-jdk-1.4
[2] sun-jdk-1.5 system-vm
[3] sun-jdk-1.6


a co to - 'shell-init: error retrieving current directory: getcwd'? Może się zdarzyć jeśli uruchamiamy polecenie będąc w katalogu, który został wcześniej usunięty (weszliśmy do katalogu - ktoś w innej sesji go usunął)
Dobra lećmy dalej:

ny ~ # java -version
java version "1.5.0_15"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_15-b04)
Java HotSpot(TM) Client VM (build 1.5.0_15-b04, mixed mode)
ny ~ # eselect java-vm set system 3
ny ~ # java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)

Jak widać zmieniłem ustawienia jvm na poziomie systemu. Po ustawieniu w ten sposób jvm następuje automatyczne przełączenie aktualnie aktywnego jvm - wersja się zmieniła bez żadnych dodatkowych zabiegów.
Każdy użytkownik może zmienić używanego jvm - można to zrobić tak:

k@ny ~ $ java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)
k@ny ~ $ eselect java-vm set user 2
k@ny ~ $ java -version
java version "1.5.0_15"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_15-b04)
Java HotSpot(TM) Client VM (build 1.5.0_15-b04, mixed mode)
k@ny ~ $ eselect java-vm list
Available Java Virtual Machines:
[1] sun-jdk-1.4
[2] sun-jdk-1.5 user-vm
[3] sun-jdk-1.6 system-vm


Użytkownik po zmianie używa java'y Suna w wersji 1.5 natomiast systemowy jvm jest ustawiony na wersję Sun JDK 1.6.
Dla ciekawskich pozostawiam temat w jaki sposób te zmiany są realizowane w systemie - jak to się automagicznie dzieje (być może sam też to kiedyś opiszę). Trochę ciekawych informacji na temat java w Gentoo można znaleźć tu.

- zmiany w portage - moduł news/news-tng. Niedawno dodano do portage tzw. newsy - wiadomości mające informować nas o ważnych zmianach w funkcjonowaniu pakietów w portage i samego portage'a.
Sprawdźmy jak to działa:

ny ~ # eselect news-tng
Usage: eselect news-tng

Standard actions:
help Display help text
usage Display usage information
version Display version information

Extra actions:
count Display number of news items
new Count unread news items (default)
all Count all news items
list List news items
purge Purge read news
read ... Read news items
new Read unread news items (default)
all Read all news items
item Number of item (from 'list' action)
--raw Output in raw format
unread ... Mark read news items as unread again
all Mark all news items as unread
item Number of item (from 'list' action)
ny ~ # eselect news-tng list
News items:
[1] 2009-04-06 (unread) Migration from teTeX to TeXLive
[2] 2009-04-18 (read) Generation 1 Java Setup Deprecated


Mam 2 wiadomości - 1 przeczytaną i 1 nieprzeczytaną. Przeczytajmy zatem wiadomość 2:

# eselect news-tng read 1
2009-04-06-tetex
Title Migration from teTeX to TeXLive
Author Christian Faulhammer
Author Ulrich Müller
Author Alexis Ballier
Posted 2009-04-06
Revision 1

teTeX is obsolete and has been unsupported upstream since May of 2006.
All users who still have teTeX installed should uninstall it and install
TeXLive using the upgrade guide accessible at the following URL:
http://www.gentoo.org/proj/en/tex/texlive-migration-guide.xml

tandetny ~ # eselect news-tng list
News items:
[1] 2009-04-18 (read) Generation 1 Java Setup Deprecated
[2] 2009-04-06 (read) Migration from teTeX to TeXLive


Jak widać informacje pozyskiwane tym źródłem mogą być po pierwsze użyteczne, po drugie pozwolą nam oszczędzić wiele bólów związanych z tym, że przeoczyliśmy jakąś ważną informację bo pakiet podczas instalacji nie poinformował nas o jakiejś ważnej zmianie (nie musimy śledzić, poszukiwać informacji po forach) ponieważ portage po każdej aktualizacji poinformuje nas w podsumowaniu ile mamy nowych newsów.
To jak dla mnie kolejna zaleta Gentoo - zintegrowane z systemem zarządzania pakietami ważne informacje o zmianach/nowinkach/sposobie konfiguracji oraz doskonała dokumentacja - jak widać na przykładzie dostajemy link do dokumentu opisującego zasady migracji z teTeX do TeXLive.


- zmiany profilu systemu Gentoo - moduł profile. Zasada użycia jest podobna, o tym czym są profile w Gentoo opowiem wkrótce.

- zmiany ustawień skryptów startowych - moduł rc - co startować w danym runlevelu o co nie. O runlevelach i ich specyficznej implementacji w Gentoo - wkrótce.

- zmiana aktywnego interpretera Ruby, Python - odpowiednio moduły ruby, python - podobnie jak w wypadku jvm.

Pozostałe pozostawiam do testowania we własnym zakresie. Z wartych zainteresowania wymieniłbym postgresql, kernel, rails, bash-completion, opengl.

poniedziałek, 6 lipca 2009

Portage - wyświetlanie informacji o zmianach

Dzisiaj krótko. Portage wśród swoich możliwości ma śledzenie zmian wprowadzanych między kolejnymi wydaniami dowolnego pakietu - tzw. changelogi. Jeśli chcemy być na bieżąco - to oprócz widocznych zmian we flagach (opcja --verbose) - możemy wyświetlić informacje o zmianach w funkcjonalności pakietu. Wśród licznych opcji narzędzia emerge mamy przełącznik --changelog (-l). Zaprezentuję to na przykładzie pakietu apache:

emerge -p --changelog apache

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild U ] www-servers/apache-2.2.11-r2 [2.2.11]

*apache-2.2.11-r2

07 Jul 2009; Benedikt Böhm +apache-2.2.11-r2.ebuild:
fix #276707, #276792

07 Jul 2009; Richard Freeman apache-2.2.11-r1.ebuild:
amd64 stable - 276589

06 Jul 2009; Brent Baude apache-2.2.11-r1.ebuild:
Marking apache-2.2.11-r1 ppc64 and ppc for bug 276589

06 Jul 2009; Jeroen Roovers apache-2.2.11-r1.ebuild:
Stable for HPPA (bug #276589).

*apache-2.2.11-r1

05 Jul 2009; Benedikt Böhm -apache-2.2.9-r1.ebuild,
+apache-2.2.11-r1.ebuild:
fix #263588, #265547, #231913, #268154, #271470, #272951, #276426

02 May 2009; Jeroen Roovers apache-2.2.11.ebuild:
Stable for HPPA (bug #265705).

26 Apr 2009; Raúl Porcel apache-2.2.11.ebuild:
arm/ia64/s390/sh/sparc stable wrt #265705

26 Apr 2009; Brent Baude apache-2.2.11.ebuild:
Marking apache-2.2.11 ppc for bug 265705

23 Apr 2009; Markus Meier apache-2.2.11:
amd64/x86 stable, bug #265705

23 Apr 2009; Tobias Klausmann apache-2.2.11:
Stable on alpha, bug #265705

21 Apr 2009; Brent Baude apache-2.2.11.ebuild:
Marking apache-2.2.11 ppc64 for bug 265705

23 Jan 2009; Raúl Porcel apache-2.2.10.ebuild:
alpha/arm/ia64/s390/sh stable wrt #252432

09 Jan 2009; Brent Baude apache-2.2.10.ebuild:
Marking apache-2.2.10 ppc for bug 252432

07 Jan 2009; Brent Baude apache-2.2.10.ebuild:
Marking apache-2.2.10 ppc64 for bug 253432

04 Jan 2009; Markus Meier apache-2.2.10.ebuild:
amd64/x86 stable, bug #252432

04 Jan 2009; Friedrich Oslage apache-2.2.10.ebuild:
Stable on sparc, bug #252432

01 Jan 2009; Guy Martin apache-2.2.10.ebuild:
hppa stable, #252432


Jak widać emerge wyświeli nam wszystkie zmiany jakie zaszły pomiędzy aktualnie zainstalowaną wersją pakietu (2.2.11) a najnowszą, zalecaną do instalacji.

To tyle. Polecam w wolnym czasie samodzielne poszukiwania w man emerge.