piątek, 28 sierpnia 2009

Polecenie watch - jak go używać?

Polecenie watch okazuje się często bardzo przydatnym narzędziem w codziennej praktyce administratorskiej. Pozwala nam ono wykonywać cyklicznie komendę podaną jako parametr w wywołaniu watch wyświetlając jej wynik za każdym razem na nowym ekranie:

watch [opcje] polecenie

Pozwala to w dość skuteczny sposób śledzić zmiany zachodzące pomiędzy kolejnymi wykonaniami polecenia.

Przejdźmy do praktyki. Prześledźmy zmiany pamięci dostępnej w systemie:

# watch -n 1 free


Co 1 sekundę wykonujemy polecenie free (wyświetla statystyki pamięci dostępnej w systemie - o tym innym razem).
Polecenie watch pozwala nam na więcej - możemy śledzić zmiany zachodzące w wyniku wykonania między dwoma kolejnymi wywołaniami (opcja -d):

# watch -n 1 -d free


Możemy też użyć wartości =cumulative przy opcji -d - zaznaczone będą wszystkie zmiany jakie zachodzą między wywołaniami polecenia - zmiany te będą kumulowane - nie zostaną skasowane jak w wypadku użycia samej opcji -d

# watch -n 2 free -d=cumulative free


Inne przykłady zastosowania komendy watch:

- śledzenie liczby przerwań (o przerwaniach innym razem)
# watch -n1 -d 'cat /proc/interrupts'


- śledzenie procesów ZOMBIE w systemie - no tak nie całkiem do końca ale powinno zadziałać (o procesach innym razem)

# watch -n2 "ps auxw | grep 'defunct' | grep -v 'grep' | grep -v 'watch'"


grep -v odfiltrowuje linie zawierające tekst pasujący do wzorca - stosuje się to często przy wyszukiwaniu konkretnego procesu w systemie gdy chcemy odfiltrować proces grep w zwróconym wyniku:

# ps ax|grep cron|grep -v grep

Zadanie - Jak inaczej można odfiltrować grep z listy procesów?

- śledzenie nawiązanych połączeń:

# watch -n 1 -d "netstat -tpanl | grep ESTABLISHED"


Zastosowań znajdzie się pewnie mnóstwo - ja często używam watch przy poleceniu dd w celu sprawdzenia ile danych zostało skopiowanych za jego pomocą. Polecenie dd wyświetla aktualny stan kopiowania tylko w momencie gdy proces dd otrzyma sygnał SIGUSR1 (polecam man dd):

# watch -n 2 'kill -SIGUSR1 $pid


$pid określa numer procesu dd w systemie (trzeba go wcześniej zidentyfikować).

Debian - Bash auto uzupełnianie - problemy

Jeżeli jako zwykły użytkownik przy używaniu tabulatora w celu autouzupełnienia tekstu (np. nazwy katalogu) pojawia się nam taka lub podobna linijka:

cd /ho-sh: <( compgen -d -- '/ho' ): No such file or directory


(w tym wypadku chciałem przejść do katalogu /home bez wpisywania całej nazwy a jedynie poprzez wpisanie pierwszej litery 'h' a później naciśnięcie klawisza TAB)

to problemem jest używany przez nasz shell - używamy shella innego niż Bash. Najprostszym rozwiązaniem jest zmiana w pliku /etc/passwd shella na bash (ambitnym pozostawiam analizę narzędzia compgen).

Zobaczmy to a przykładzie. Wyszukam informacje o użytkowniku w pliku passwd:

# grep user1 /etc/passwd
user1:x:1001:1001:Ordinary user:/home/user1:/bin/sh


Każda linijka w tym pliku definuje jednego użytkownika systemowego. Konkretne informacje o użytkowniku oddzielone są dwukropkiem - i oznaczają kolejno:
- nazwę użytkownika
- skrót hasła lub x jeśli skrót jest przechowywany w bezpiecznym pliku - /etc/shadow
- numeryczny identyfikator użytkownika (bodajże typu int) - uid
- numeryczny identyfikator grupy głównej (domyślnej - też typu int) użytkownika - gid
- katalog domowy użytkownika
- opis użytkownika - pełna nazwa - ciąg pozwalający odszyfrować po co i przez kogo jest używany dany login
- domyślny shell użytkownika

Jak widać user1 używa shella sh - żeby wyeliminować opisany błąd należy edytorem tekstowym z poziomu administratora zmienić wpis dotyczący shella z /bin/sh na /bin/bash i już.

A co jeśli nie mamy uprawnień roota?
Można użyć polecenia chsh będąc zalogowanym na swoim koncie:

#chsh -s /bin/bash


Możemy używać tego polecenia również z poziomu administratora jeśli nie chcemy edytować pliku ręcznie - polecenie jako argument może przyjąc login użytkownika, na którym chcemy dokonać zmiany (polecam man chsh).

Jak sprawdzić aktywny shell?
Za pomocą zmiennej shella $0
# echo $0
-bash


Pliki konfiguracyjne, którym warto się przyjrzeć:
/etc/shadow
/etc/login.defs
/etc/shells

Jako zadanie domowe pozostawiam pytania:
Jak działa chsh?
Dlaczego skróty haseł zaleca się trzymać w osobnym pliku /etc/shadow?
Do czego służy polecenie getent?

czwartek, 20 sierpnia 2009

svn: Can't convert string from 'UTF-8' to native encoding:

Ostatnio mi się przydarzył taki błąd. Występuje on gdy klient dostanie z repozytorium plik z nazwą zawierający znak w UTF-8, którego nie jest w stanie zaprezentować używając lokalnego kodowania znaków. W takim wypadku należy odpowiednio zmienić używane kodowanie znaków:

$ export LC_CTYPE=pl_PL.UTF-8
$ locale
LANG=
LC_CTYPE=pl_PL.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=


W moim przypadku zadziałało. Warto to ustawić na stałe. W Gentoo mamy do tego katalog /etc/env.d.
Jako lekturę polecam przewodnik lokalizacji Gentoo

środa, 19 sierpnia 2009

Oracle - jak włączyć tryb ARCHIVELOG?

Domyślnie po instalacji tryb archiwizowania redo logów jest wyłączony co oznacza, że w momencie zapełnienia wszystkich wolumenów redo logów następuje ich rotacja - najstarszy redo log jest czyszczony a następnie zrzucane do niego wykonane transakcje.
Żeby nie stracić tych informacji warto włączyć tryb archivelog (to nie jedyny powód dla którego warto to zrobić - o tym następnym razem).
Włączę konsolę oracle'a:

$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Aug 19 07:33:05 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL>

Teraz w konsoli sprawdźmy w jakim trybie są archiwizacja redo logów:

SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG


Teraz włączę archivelogi. W tym celu należy na początek wyłączyć bazę danych:

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.


Teraz zamontujemy bazę - nie będzie ona jeszcze dostępna z zewnątrz.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 268435456 bytes
Fixed Size 1258364 bytes
Variable Size 243272836 bytes
Database Buffers 20971520 bytes
Redo Buffers 2932736 bytes
Database mounted.


Możemy ustawić tryb pracy z archiwizowaniem redo logów:
SQL> alter database archivelog;

Database altered.


Następnie otwieramy bazę danych:

SQL> alter database open;

Database altered.


Sprawdźmy czy się udało:

SQL> select log_mode from v$database;

LOG_MODE
------------
ARCHIVELOG


Jak najbardziej.

Zobaczmy czy działa proces archiwizacji redo logów (arch):

SQL> show parameter log_archive_start

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_start boolean FALSE


Jak widać nie działa. W celu uruchomienia go ręcznie można użyć komendy:
SQL> alter system archive log start;

System altered.


Zobaczmy w widoku procesów oracle czy działa jakiś archiwizator:
SQL> select * from v$archive_processes;

PROCESS STATUS LOG_SEQUENCE STAT
---------- ---------- ------------ ----
0 ACTIVE 0 IDLE
1 ACTIVE 0 IDLE
2 STOPPED 0 IDLE
3 STOPPED 0 IDLE

Działają dwa. Czyli ok.
Teraz należałoby ustawić automatyczny start procesów archiwizacji. Musimy to zrobić w pliku init.ora. Należy dodać poniższe linijki:
log_archive_dest = /var/lib/oracle/archivelog/
log_archive_format = %S.arc
log_archive_start = true


Ważne! Żeby wykonywać te polecenia muszę być zalogowany z uprawnieniami SYSDBA lub SYSOPER.

poniedziałek, 17 sierpnia 2009

Narzędzia pomocnicze do zarządzania pakietami w Gentoo

Dziś wspomnę o dwóch pakietach znajdujących się w portage'u a stworzonych w celu ułatwienia zarządzania pakietami - są to app-portage/gentoolkit oraz app-portage/portage-utils.
Obydwa pakiety posiadają dobrą dokumentację, której nie zamierzam tutaj przekopiowywać - pozwolę sobie jedynie skomentować ewentualnie rozszerzyć fragmenty, które moim zdaniem mogą być dla początkującego użytkownika Gentoo nieczytelne.
Obydwa pakiety dostarczają zbliżoną funkcjonalność jeśli chodzi o zarządzanie pakietami, jednak pod względem szybkości bezwzględnie lepszy jest portage-utils w całości napisany w C.
W przypadku pakietu portage-utils po zainstalowaniu warto pamiętać o dodaniu synchronizacji bazy ebuildów za pomocą narządka q-reinitialize (/etc/portage/postsync.d). W tym celu należy uczynić ten plik wykonywalnym;

# chmod u+x /etc/portage/postsync.d/q-reinitialize


Informację tą powinniście zobaczyć po zainstalowaniu pakietu, więc raczej ciężko ją przegapić. Od tej pory po każdej synchronizacji portage'a nastąpi przebudowanie cache'u narządka portage-utils.
Zaglądnijmy na chwilę do pliku q-reinitialize:

# cat /etc/portage/postsync.d/q-reinitialize
[ -x /usr/bin/q ] && /usr/bin/q -qr


Wiele to tu się nie dzieje no bo i po co (KISS!). Nawias kwadratowy to polecenie służące do sprawdzenia typów plików i porównywania wartości zmiennych. W tym wypadku sprawdzamy czy plik q jest wykonywalny (-x). W kolejnym kroku ale tylko i wyłącznie wtedy gdy można uruchomić plik q wykonujemy reinicjalizację cache'u. Operator && to nic innego jak operatror logiczny AND - służy nam w tym wypadku do czegoś co lubię nazywać leniwym uruchamianiem - tzn. uruchomienia drugiego polecenia tylkw w wypadku gdy pierwszy człon (przed operatorem) wykona się prawidłowo tj. zwróci wartość 0.
Przyjrzyjmy się teraz wykorzystaniu narzędzi, o których nie wspomina dokumentacja Gentoo (jak wspomniałem nie zamierzam powielać treści):
- qlop - analizator logów emerge (/var/log/emerge.log)
Pozwala na wyciąganie wielu przydatnych informacji z logów emerge.
Historia synchronizacji portage:
# qlop -s


Historia instalacji:
# qlop -l


- qpkg - zarządzanie skompilowanymi pakietami
# qpkg --clean

czyści nieużywane paczki binarne
# qpkg --eclean

czyści paczki, których nie ma już w drzewie portage

Na dziś to tyle. Następnym razem muszę wspomnieć o narzędziach: glsa-check, revdep-rebuild, genlop oraz o sposobach odczytu informacji poinstalacyjnych.

piątek, 14 sierpnia 2009

Ograniczenie czasowe w skryptach shellowych - komenda timeout

Ostatnio potrzebowałem użyć jakiegoś sposobu do wymuszenia ograniczenia czasowego na wykonanie komendy w skrypcie. Wynikiem moich poszukiwań było zastosowanie komendy timeout. W Gentoo jest ona dostarczana wraz z pakietem 'sys-apps/coreutils'. Jak jej używać?

# timeout 3s find /home -name *pdf

Jeżeli polecenie podane jako argument komendy timeout nie wykona się w ciągu 3 sekund zostanie ono zakończone.
Domyślnie do uruchomionego procesu wysyłany jest sygnał TERM (o sygnałach już wkrótce) - co wymusza na procesie zakończenie działania. Jeśli potrzebujemy możemy wybrać dowolny z dostępnych sygnałów - trzeba jednak mieć na uwadze, że jedynie sygnał nr 9 (SIGKILL) wymusza na procesie zamknięcie. Syganły definujemy poprzez parametr -s po którym podajemy nr sygnału lub jego nazwę:

# time timeout -s9 3s find / -name *pdf

Czas po jakim nastąpi wysłanie sygnału do procesu (bo to chyba słuszniejsza definicja tego co się dzieje) możemy określić w sekundach (s), godzinach (h) lub dniach (d).

Nasuwa się pytanie w jaki sposób sprawdzać czy komenda się zakończyła czy została przerwana?
Można to zweryfikować za pomocą statusu wyjścia $?. Jeśli nastąpił timeout wartość zmiennej wynosi 124 - w pozostałych wypadkach będzie to status zakończenia zwrócony przez wykonane polecenie.

Jak można inaczej zaimplementować timeout w skrypcie? Mi przychodzi do głowy takie rozwiązanie:

# polecenie & sleep 10 && kill %1 && fg

Jak to działa? Pozostawiam to póki co czytelnikowi jako zadanie domowe.

środa, 12 sierpnia 2009

Vista - udziały administracyjne - jak włączyć?

Musimy wyedytować rejestr a dokładniej dodać do gałęzi HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System klucz "LocalAccountTokenFilterPolicy" typu DWORD i ustawić jego wartość 1.

Vista - konto administrator

Ostatnio potrzebowałem odblokować domyślnie zablokowane konto administratora w viście.

1. Uruchom cmd jako administrator
2. Wykonaj net user administrator /active:yes

i już

Sudo - jak umożliwić użytkownikowi przełączenie na konto root?

Na początku pozwolę sobie stwierdzić, że można to zrobić pewnie na milion sposobów - no może trochę przesadziłem - ale na pewno jest ich trochę - i w tym tkwi piękno linuxa.
Najpierw zastanówmy się o co chodzi w tym zadaniu tak naprawdę? Upraszczając - jeśli użytkownik może się przełączyć na konto roota to de facto nadajemy mu uprawnienia administracyjne. Jak to zrobić? Można np. stworzyć grupę i nadać członkom tej grupy uprawnienia do uruchamiania wszystkich poleceń systemowych. Często korzystam z gotowej "receptury" w /etc/sudoers:

#visudo
# Uncomment to allow people in group wheel to run all commands
%wheel ALL=(ALL) ALL

i już. Członkowie grupy wheel mają teraz uprawnienia administracyjne. Wystarczy dodać odpowiednie osoby do grupy wheel poprzez edycję /etc/groups lub wywołanie groupmod lub gpasswd lub ...

# gpasswd -a fares wheel
Adding user fares to group wheel


Teraz już z konta fares możemy przejśc na root:
fares@ny $ sudo su -



I to tyle. Czekam na wasze rozwiązania w komentarzach.

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.