Archive for category Debian/Ubuntu

Instalacja Javy 7 w Ubuntu 11.04


W wersji 12.04 Ubuntu można Javę 7 zainstalować dużo prościej, korzystając z repozytoriów PPA. Wystarczy dodać odpowiednie repozytorium i zainstalować Javę:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

Java zostanie pobrana ze strony Oracle, zainstalowana i odpowiednie powiązania zostaną automatycznie ustawione.

Więcej można przeczytać tutaj: Install Oracle Java in Ubuntu via PPA repository.

Java w wersji 7 został wydana jakiś czas temu, ale ciągle nie ma odpowiednich pakietów do instalacji w Ubuntu. Pewnie pojawią się wraz z edycją 11.10, ale czekać tak długo nie mam ochoty :).

Instalacja nowej wersji Javy sprowadza się do wykonania kilku kroków, jedyną niedogodnością jest konieczność ręcznego pilnowania nowych wydań JDK.

  1. Pobranie pakietu z Java, najlepiej ze strony Oracle: Java SE Development Kit 7 Downloads. Mój plik z JDK nazywa się jdk-7-linux-x64.tar.gz.
  2. Rozpakować archiwum:
    tar xzvf jdk-7-linux-x64.tar.gz

    Zostanie utworzony katalog jdk1.7.0 a w nim Java w wersji 7.

  3. Przenieść rozpakowane archiwum do katalogu /usr/lib/jvm/ pod nazwą java-7-oracle, gdzie znajdują się dostępne wersje JVM w systemie.

    Ten i pozostałe kroki muszą być wykonane z uprawnieniami użytkownika root. Należy więc wcześnie zmienić konto lub używać polecenie sudo.

    mv jdk1.7.0 /usr/lib/jvm/java-7-oracle
  4. Ustawić odpowiedniego użytkownika oraz uprawnienia – właścicielem powinien być root a możliwość odczytu i wykonywania aplikacji powinni mieć wszyscy użytkownicy. Nie jest to krok być może konieczny, ale przy niektórych ustawianiach jego brak może uniemożliwić innym użytkownikom korzystania z Javy.
    chown -R root.root /usr/lib/jvm/jdk1.7.0/java-7-oracle

    Jeżeli jednak umask jest ustawiony na bardziej restrykcyjną wartość (w moim przypadku 007) to pojawi się problem: zwykły użytkownik nie będzie mógł ani uruchomić ani nawet odczytać katalogu z Javą. Można to poprawić przy użyciu prostej instrukcji:

    chmod -R a+rX /usr/lib/jvm/java-7-oracle
  5. W Ubuntu domyślne implementacja Javy (jak i wielu innych aplikacji) jest ustawiana przy pomocy polecenia update-alternatives. Mechanizm ten pozwala na zdefiniowania wielu rożnych aplikacji dostarczających daną funkcjonalność (np. wiele wersji Javy) oraz wybranie aplikacji, która będzie uruchamiana domyślnie.

    W przypadku polecenia java można sprawdzić jakie są jego różne implementacje:

    # update-alternatives --config java

    There are 3 choices for the alternative java (providing /usr/bin/java).

      Wybór       Ścieżka                                 Priorytet  Status
    ------------------------------------------------------------
      0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      tryb auto
      1            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      tryb ręczny
    * 2            /usr/lib/jvm/java-6-sun/jre/bin/java       63        tryb ręczny

    W moim przypadku mam zainstalowane dwa różne JDK, z czego domyślnie ustawiona jest wersja Suna (teraz już Oracla).

    Można teraz dodać implementację Java 7:

    update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/jre/bin/java 3

    Numer 3 oznacza kolejny numer po ostatniej dostępnej wersji JVM.

    Teraz pozostaje tylko wydanie polecenia:

    update-alternatives --config java

    A teraz mały test: wywołanie poleceń java oraz javac:

    # java -version
    java version "1.7.0"
    Java(TM) SE Runtime Environment (build 1.7.0-b147)
    Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)

    # javac -version
    javac 1.6.0_26

    Jak widać domyślnie została wywołana wersja Javy 7, natomiast wywołanie kompilator ciągle odwołuje się do wersji 6. Poradzić sobie można z tym definiując kolejną alternatywę a następnie ją ustawiając. Natomiast ilość plików binarnych które trzeba ustawić oraz stron MAN, które należy zmienić jest znaczna. Można to sprawdzić przy pomocy polecenia:

    update-java-alternatives -v -l java-6-sun
  6. Najlepszym sposobem zmiany wersji JDK w przypadku Ubuntu będzie użycie polecenia update-java-alternatives. Pozwoli ona na zmianę domyślnej implementacji wszystkich plików wykonywalnych oraz powiązanych z nimi stron MAN. Niestety, trzeba je odpowiednio skonfigurować, zanim zacznie działać poprawnie.

    Pierwszym krokiem będzie dodanie odpowiednich alternatyw dla wszystkich plików binarnych. Można to zrobić przy pomocy prostego skryptu o nazwie update-alternatives-java-7. Powstał on na bazie odpowiednich skryptów po instalacyjnych wykonywanych podczas instalacji OpenJDK w systemie.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #!/bin/bash

    # instalacja JRE-headless

    priority=100
    basedir=/usr/lib/jvm/java-7-oracle
    basediralias=/usr/lib/jvm/java-7-oracle
    jdiralias=java-7-oracle
    mandir=/usr/lib/jvm/jdk1.7.0/man
    srcext=1.gz
    dstext=1.gz

    jre_tools='java keytool pack200 rmid rmiregistry unpack200 orbd servertool tnameserv'
                                                                                                                                                                                                                               
        for i in $jre_tools; do                                                                                                                                                                                                
            unset slave1 slave2 || true                                                                                                                                                                                        
            if [ -e $mandir/man1/$i.$srcext ]; then                                                                                                                                                                            
                slave1="--slave \                                                                                                                                                                                              
                    /usr/share/man/man1/$i.$dstext \                                                                                                                                                                            
                    $i.$dstext \                                                                                                                                                                                                
                    $mandir/man1/$i.$srcext"
                                                                                                                                                                                       
            fi                                                                                                                                                                                                                  
            update-alternatives --verbose \                                                                                                                                                                                    
                --install \                                                                                                                                                                                                    
                /usr/bin/$i \                                                                                                                                                                                                  
                $i \                                                                                                                                                                                                            
                $basediralias/jre/bin/$i \                                                                                                                                                                                      
                $priority \                                                                                                                                                                                                    
                $slave1 $slave2                                                                                                                                                                                                
        done                                                                                                                                                                                                                    
        update-alternatives --verbose \                                                                                                                                                                                        
            --install /usr/bin/jexec jexec $basediralias/jre/lib/jexec $priority                                                                                                                                                
                                                                                                                                                                                                                               
                                                                                                                                                                                                                               
    # instalacja JRE

    jre_tools='policytool ControlPanel java_vm javaws jcontrol'

        for i in $jre_tools; do
            unset slave1 slave2 || true
            if [ -e $mandir/man1/$i.$srcext ]; then
                slave1="--slave \
                   /usr/share/man/man1/$i.$dstext \
                   $i.$dstext \
                   $mandir/man1/$i.$srcext"

            fi
            update-alternatives --verbose \
                --install \
                /usr/bin/$i \
                $i \
                $basediralias/jre/bin/$i \
                $priority \
                $slave1 $slave2
        done

    # instalacja JDK


    jdk_tools='appletviewer apt extcheck idlj jar jarsigner javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc'


        for i in $jdk_tools; do
            unset slave1 slave2 || true
            if [ -e $mandir/man1/$i.$srcext ]; then
                slave1="--slave \
                   /usr/share/man/man1/$i.$dstext \
                   $i.$dstext \
                   $mandir/man1/$i.$srcext"

            fi
            update-alternatives --verbose \
                --install \
                /usr/bin/$i \
                $i \
                $basediralias/bin/$i \
                $priority \
                $slave1 $slave2
        done

    W skrypcie należy zwrócić szczególną uwagę na definicję odpowiednich ścieżek dostępu. Po jego wykonaniu zostaną zdefiniowanie odpowiednie alternatywy dla odpowiednich plików, ale nie zostaną one jeszcze uaktywnione.

    Konfiguracja update-java-alternatives sprowadza się do zdefiniowania odpowiedniego pliku konfiguracyjnego. Należy utworzyć (lokalizacja i nazwa pliku jest ważna) plik: /usr/lib/jvm/.java-7-oracle.jinfo o następującej zawartości:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    name=java-7-oracle
    alias=java-7-oracle
    priority=100
    section=non-free

    jre ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel
    jre java /usr/lib/jvm/java-7-oracle/jre/bin/java
    jre java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm
    jre javaws /usr/lib/jvm/java-7-oracle/jre/bin/javaws
    jre jcontrol /usr/lib/jvm/java-7-oracle/jre/bin/jcontrol
    jre keytool /usr/lib/jvm/java-7-oracle/jre/bin/keytool
    jre pack200 /usr/lib/jvm/java-7-oracle/jre/bin/pack200
    jre policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool
    jre rmid /usr/lib/jvm/java-7-oracle/jre/bin/rmid
    jre rmiregistry /usr/lib/jvm/java-7-oracle/jre/bin/rmiregistry
    jre unpack200 /usr/lib/jvm/java-7-oracle/jre/bin/unpack200
    jre orbd /usr/lib/jvm/java-7-oracle/jre/bin/orbd
    jre servertool /usr/lib/jvm/java-7-oracle/jre/bin/servertool
    jre tnameserv /usr/lib/jvm/java-7-oracle/jre/bin/tnameserv
    jre jexec /usr/lib/jvm/java-7-oracle/jre/lib/jexec
    jdk appletviewer /usr/lib/jvm/java-7-oracle/bin/appletviewer
    jdk apt /usr/lib/jvm/java-7-oracle/bin/apt
    jdk extcheck /usr/lib/jvm/java-7-oracle/bin/extcheck
    jdk idlj /usr/lib/jvm/java-7-oracle/bin/idlj
    jdk jar /usr/lib/jvm/java-7-oracle/bin/jar
    jdk jarsigner /usr/lib/jvm/java-7-oracle/bin/jarsigner
    jdk javac /usr/lib/jvm/java-7-oracle/bin/javac
    jdk javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc
    jdk javah /usr/lib/jvm/java-7-oracle/bin/javah
    jdk javap /usr/lib/jvm/java-7-oracle/bin/javap
    jdk jconsole /usr/lib/jvm/java-7-oracle/bin/jconsole
    jdk jdb /usr/lib/jvm/java-7-oracle/bin/jdb
    jdk jhat /usr/lib/jvm/java-7-oracle/bin/jhat
    jdk jinfo /usr/lib/jvm/java-7-oracle/bin/jinfo
    jdk jmap /usr/lib/jvm/java-7-oracle/bin/jmap
    jdk jps /usr/lib/jvm/java-7-oracle/bin/jps
    jdk jrunscript /usr/lib/jvm/java-7-oracle/bin/jrunscript
    jdk jsadebugd /usr/lib/jvm/java-7-oracle/bin/jsadebugd
    jdk jstack /usr/lib/jvm/java-7-oracle/bin/jstack
    jdk jstat /usr/lib/jvm/java-7-oracle/bin/jstat
    jdk jstatd /usr/lib/jvm/java-7-oracle/bin/jstatd
    jdk native2ascii /usr/lib/jvm/java-7-oracle/bin/native2ascii
    jdk rmic /usr/lib/jvm/java-7-oracle/bin/rmic
    jdk schemagen /usr/lib/jvm/java-7-oracle/bin/schemagen
    jdk serialver /usr/lib/jvm/java-7-oracle/bin/serialver
    jdk wsgen /usr/lib/jvm/java-7-oracle/bin/wsgen
    jdk wsimport /usr/lib/jvm/java-7-oracle/bin/wsimport
    jdk xjc /usr/lib/jvm/java-7-oracle/bin/xjc

    Teraz jest już dostępna nowa wersja JVM w systmie:

    # update-java-alternatives -l
    java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk
    java-6-sun 63 /usr/lib/jvm/java-6-sun
    java-7-oracle 100 /usr/lib/jvm/java-7-oracle

    Pozostaje ustawić Jave 7 jako domyślną implementację JVM:

    update-java-alternatives -v -s java-7-oracle

Źródła

Tags: ,

Instalacja Oracle Javy w Ubuntu Natty (11.04)

Standardowo w Ubuntu Java w wersji od Oracla (czyli dawana Sunowska) jest dostępna w repozytorium partner. Jednak w przypadku Ubuntu Natty (w wersji alfa) niestety jej tam jeszcze nie ma, prawdopodobnie zostanie umieszczona już po premierze wersji stabilnej. Na szczęście, łatwo można ją zainstalować przy wykorzystaniu dodatkowych repozytoriów, wystarczy wydać polecenie:

sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update

I zainstalować Javę:

sudo apt-get install sun-java6-jdk

Tags:

Instalacja lokalnego pakietu w połączeniu z rozwiązywaniem zależności (polecenie gdebi)

Jedną z bardziej irytujących rzeczy podczas instalacji nowego pakietu przy użyciu polecenia dpkg jest brak rozwiązywania zależności. Powoduje to, że zamiast zainstalować pakiet musimy ręcznie doinstalowywać pakietu z repozytorium.

Brakuje możliwości takiej instalacji pakietu jak robi to polecenie yum:

yum localinstall nazwa_pakietu.rpm

Polecenie to zainstaluje wybrany pakiet jednocześnie rozwiązując zależności przy użyciu dostępnych repozytoriów.

Użycie polecenia dpkg może wyglądać następująco (próba instalacji Picasy w Ubuntu):

# dpkg -i picasa_3.0-current_amd64.deb
Zaznaczenie poprzednio niezaznaczonego pakietu picasa.
(Odczytywanie bazy danych ... 299273 files and directories currently installed.)
Rozpakowanie picasa (z picasa_3.0-current_amd64.deb) ...
dpkg: problemy z zależnościami uniemożliwiają skonfigurowanie picasa:
 picasa zależy od libc6-i386 (>= 2.2); jednakże:
  Pakiet libc6-i386 nie jest zainstalowany.
 picasa zależy od ia32-libs; jednakże:
  Pakiet ia32-libs nie jest zainstalowany.
 picasa zależy od lib32asound2; jednakże:
  Pakiet lib32asound2 nie jest zainstalowany.
 picasa zależy od lib32z1; jednakże:
  Pakiet lib32z1 nie jest zainstalowany.
dpkg: błąd przetwarzania picasa (--install):
 problemy z zależnościami - pozostawiony nieskonfigurowany
Przetwarzanie wyzwalaczy dla gconf2...
Wystąpiły błędy podczas przetwarzania:
 picasa

W przypadku dystrybucji opartych o Debiana można użyć polecenia gdebi. Pozwoli ono na zainstalowanie pakietu i jednoczesne rozwiązanie jego zależności. Instalacja Picasy przy użyciu tego narzędzia wygląda tak:

# gdebi picasa_3.0-current_amd64.deb
Reading package lists... Done
Building dependency tree        
Reading state information... Done
Building data structures... Done
Building data structures... Done  
Wymaga instalacji poniższych pakietów:
ia32-libs  lib32asound2  lib32bz2-1.0  lib32gcc1  lib32ncurses5  lib32stdc++6  lib32v4l-0  lib32z1  libc6-i386
Image management application from Google
 Picasa is software that helps you instantly find, edit and share all

Jak widać od razu zostaje zaprezentowana lista dodatkowych pakietów do instalacji, jak się zgodzimy na ich instalację to zostaną pobrane i zainstalowane.

Źródła

Tags: , ,

Problemy z siecią wifi po aktualizacji systemu do Ubuntu 10.10

Podkusiło mnie i zaktualizowałem Ubuntu do wersji 10.10 dobry miesiąc przed wydaniem. Generalnie poszło bez jakiś wielkich problemów, ale po restarcie systemu okazało się, że przestała mi poprawnie funkcjonować łączenie z siecią wifi.

Podczas próby nawiązywania połączenie otrzymywałem z aplikacji Wicd komunikat mówiący o podaniu błędnego hasła. Oczywiście, hasło jak najbardziej było poprawne. Po jakiś kombinacjach, restartach połączenie wróciło — ale po kilku sekundach następowało ponowne rozłączenie i próba inicjalizacji sieci, i tak bez przerwy.

Przejrzałem masę różnych forów, błędów i różnych rozwiązań, ale nic nie pomagało. Nawet próba ręcznej konfiguracji sieci czy też reinstalacji Wicd.

Przy kolejnej próbie przypomniałem sobie o pewnym wynalazku o nazwie network-manager, z którym rozstałem się już dawno temu. Sprawdziłem co się z nim dzieje i okazało się to strzałem w dziesiątkę. Usługa ta została podczas aktualizacji zainstalowana, uruchomiona i w najlepsze przeszkadzająca.

Teraz to wszystko graniczyło się do dwóch kroków:

  1. Zatrzymanie usługi:
    $ sudo stop network-manager
  2. Wyłączenie uruchamiania tej usługi podczas startu komputera, czyli należy zmienić plik /etc/init/network-manager.conf. Poniższy skrypt dokona odpowiedniej modyfikacji (zakomentuje linijki odpowiedzialne za start usługi), a oryginalny plik zapisze pod nazwą /etc/init/network-manager.conf.old (plik ten może potem zostać skasowany):
    $ sudo sed -i.old -e '/start/,+1s/^/#/' /etc/init/network-manager.conf

Nauczka dla mnie: jak nie używasz jakiegoś domyślnego rozwiązania, bądź przygotowany na problemy po aktualizacjach.

Tags: , ,

Konfiguracja serwera NFS 3 w Debianie

NFS jest często używanym sieciowym systemem plików. Jego implementacja jest domyślnie dostępna praktycznie we wszystkich dystrybucjach Linuksa, więc bardzo łatwo go zintegrować z systemem plików po stronie gościa.

W przypadku Debiana instalacja jest dosyć prosta, sprowadza się do zainstalowania odpowiedniego pakietu oraz zdefiniowania eksportowanych udziałów.

Serwer NFS jest umieszczony w pakiecie o nazwie nfs-kernel-server, więc pierwszym krokiem jest jego instalacja:

# aptitude install nfs-kernel-server

Konfiguracja udostępnianych udziałów jest przechowywana w pliku /etc/exports, więc należy tam umieścić odpowiednie wpisy:

/exports 192.168.0.0/24(rw,no_subtree_check)

Powyższy wpis powoduje, że udział /exports będzie dostępny dla wszystkich łączących się z sieci 192.168.0.0/24 w trybie odczytu i zapisu.

Aby uruchomić serwer NFS należy teraz wywołać skrypt startowy:

# /etc/init.d/nfs-kernel-server start

Podczas startu serwera na Debianie Lenny wystąpił mi następujący błąd (związany z używaniem nowszego jądra niż standardowo instalowane z dystrybucją):

Not starting NFS kernel daemon: no support in current kernel.

Aby rozwiązać problem, należy zmodyfikować skrypt startowy i zakomentować linię [cii]69[/cci]:

66
67
68
69
70
# See if our running kernel supports the NFS kernel server
if [ -f /proc/kallsyms ] && ! grep -qE 'init_nf(sd|     )' /proc/kallsyms; then
        log_warning_msg "Not starting $DESC: no support in current kernel."
#       exit 0
fi

Opis błędu można znaleźć na stronach Debiana: nfs-kernel-server: init script incompatible with kernel 2.6.32

Tags: , , ,