Pierwszy rpm

Przykładowym programem będzie: GNU Screen

Sprawdzamy wersję zainstalowaną w systemie:

kris@sphinx:~> screen -v
Screen version 4.00.02 (FAU) 5-Dec-03

z wersją w internecie. Na stronie producenta znajduje się nowsza wersja, która aktualnie nie jest jeszcze spaczkowana. Tak więc pobieramy kod *.tar.gz http://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz, rozpakowywujemy, poprawiamy kod źródłowy na swój i wydajemy kolejno komendy:


Logujemy się do root:
su -

W celu stworzenia rpm, wydajemy komendę:
# checkinstall

która przebiega mniej więcej tak:
checkinstall 1.6.1, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
           This software is released under the GNU GPL.             

The package documentation directory ./doc-pak does not exist. 
Should I create a default set of package docs?  [y]: y        

Preparing package documentation...OK

Please write a description for the package.
End your description with an empty line or EOF.

**** RPM package creation selected ***

This package will be built according to these values: 

1 -  Summary: [ Package created with checkinstall 1.6.1 ]
2 -  Name:    [ screen ]                                 
3 -  Version: [ 4.0.3 ]                                  
4 -  Release: [ 1 ]                                      
5 -  License: [ GPL ]                                    
6 -  Group:   [ Applications/System ]                    
7 -  Architecture: [ i386 ]                              
8 -  Source location: [ screen-4.0.3 ]                   
9 -  Alternate source location: [  ]                     
10 - Requires: [  ]                                      
11 - Provides: [ screen ]                                

Enter a number to change any of them or press ENTER to continue: 

Installing with make install...

========================= Installation results ===========================
./etc/mkinstalldirs /usr/bin `sed < config.h -n -e '/define SCREENENCODINGS/s/^.*"\([^"]*\)"/\1/p'`
cd doc ; make installdirs                                                                          
make[1]: Entering directory `/home/kris/bin/screen-4.0.3/doc'                                      
./../etc/mkinstalldirs /usr/man/man1 /usr/info                                                     
mkdir /usr/info                                                                                    
make[1]: Leaving directory `/home/kris/bin/screen-4.0.3/doc'                                       
if [ -f /usr/bin/screen-4.0.3 ] && [ ! -f /usr/bin/screen-4.0.3.old ]; \                           
                then mv /usr/bin/screen-4.0.3 /usr/bin/screen-4.0.3.old; fi                        
/usr/bin/install -c screen /usr/bin/screen-4.0.3                                                   
chown root /usr/bin/screen-4.0.3 && chmod 4755 /usr/bin/screen-4.0.3                               
chown: cannot access `/usr/bin/screen-4.0.3': No such file or directory                            
make: [install_bin] Error 1 (ignored)                                                              
if [ -f /usr/bin/screen ] && [ ! -f /usr/bin/screen.old ]; then mv /usr/bin/screen /usr/bin/screen.old; fi
rm -f /usr/bin/screen                                                                                     
(cd /usr/bin && ln -sf screen-4.0.3 screen)                                                               
cp ./utf8encodings/?? `sed < config.h -n -e '/define SCREENENCODINGS/s/^.*"\([^"]*\)"/\1/p'`              
cd doc ; make install                                                                                     
make[1]: Entering directory `/home/kris/bin/screen-4.0.3/doc'                                             
./../etc/mkinstalldirs /usr/man/man1 /usr/info                                                            
/usr/bin/install -c -m 644 ./screen.1 /usr/man/man1/screen.1                                              
make screen.info                                                                                          
make[2]: Entering directory `/home/kris/bin/screen-4.0.3/doc'                                             
make[2]: `screen.info' is up to date.                                                                     
make[2]: Leaving directory `/home/kris/bin/screen-4.0.3/doc'                                              
if test -f screen.info; then d=.; else d=.; fi; \                                                         
        if test -f $d/screen.info; then \                                                                 
        for f in $d/screen.info*; do /usr/bin/install -c -m 644 $f /usr/info;done; \                      
        if /bin/sh -c 'install-info --version' >/dev/null 2>&1; then \                                    
          install-info --info-dir=/usr/info $d/screen.info; \                                             
        else true; fi; \                                                                                  
make[1]: Leaving directory `/home/kris/bin/screen-4.0.3/doc'                                              
if [ -d /usr/lib/terminfo ]; then \                                                                       
                PATH="$PATH:/usr/5bin" tic ./terminfo/screeninfo.src; \                                   
                chmod 644 /usr/lib/terminfo/s/screen*; \                                                  
termcap entry (./terminfo/screencap) should be installed manually.                                        
You may also want to install ./etc/etcscreenrc in /usr/etc/screenrc                                       

======================== Installation successful ==========================

Copying documentation directory...

Copying files to the temporary directory...OK

Compressing man pages...OK

Building file list...OK

Building RPM package...OK

NOTE: The package will not be installed

Erasing temporary files...OK

Deleting doc-pak directory...OK

Writing backup package...OK

Deleting temp dir...OK


 Done. The new package has been saved to

 You can install it in your system anytime using:   

      rpm -i screen-4.0.3-1.i386.rpm


Dla systemu openSUSE szukamy gotowej paczki w /usr/src/packages/RPMS/i386 oraz instalujemy nowe oprogramowanie.
# rpm -Uvh /usr/src/packages/RPMS/i386/screen-4.0.3-1.i386.rpm
Preparing...                ########################################### [100%]
   1:screen                 ########################################### [100%]

Sprawdzamy ponownie dostępną wersję screen w systemie:
sphinx:/home/kris/bin/screen-4.0.3 # screen -v
Screen version 4.00.03 (FAU) 23-Oct-06

Tak więc możemy zacząć korzystać z gotowego programu.

# screen -h
Use: screen [-opts] [cmd [args]]
 or: screen -r [host.tty]

-a            Force all capabilities into each window's termcap.
-A -[r|R]     Adapt all windows to the new display width & height.
-c file       Read configuration file instead of '.screenrc'.
-d (-r)       Detach the elsewhere running screen (and reattach here).
-dmS name     Start as daemon: Screen session in detached mode.
-D (-r)       Detach and logout remote (and reattach here).
-D -RR        Do whatever is needed to get a screen session.
-e xy         Change command characters.
-f            Flow control on, -fn = off, -fa = auto.
-h lines      Set the size of the scrollback history buffer.
-i            Interrupt output sooner when flow control is on.
-l            Login mode on (update /var/run/utmp), -ln = off.
-list         or -ls. Do nothing, just list our SockDir.
-L            Turn on output logging.
-m            ignore $STY variable, do create a new screen session.
-O            Choose optimal output rather than exact vt100 emulation.
-p window     Preselect the named window if it exists.
-q            Quiet startup. Exits with non-zero return code if unsuccessful.
-r            Reattach to a detached screen process.
-R            Reattach if possible, otherwise start a new session.
-s shell      Shell to execute rather than $SHELL.
-S sockname   Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title      Set title. (window's name).
-T term       Use term as $TERM for windows, rather than "screen".
-U            Tell screen to use UTF-8 encoding.
-v            Print "Screen version 4.00.03 (FAU) 23-Oct-06".
-wipe         Do nothing, just clean up SockDir.
-x            Attach to a not detached screen. (Multi display mode).
-X            Execute <cmd> as a screen command in the specified session.

Screen ma następujące opcje komend:

       -a   włącz wszystkie właściwości (z pewnymi wyjątkami) w termcapie każdego okna, nawet jeśli screen musi przerysowywać części wyświetlacza aby  zaimplementować  daną

       -A   Dostosuj  rozmiary  wszystkich  okien do rozmiaru bieżącego terminala.  Domyślnie, screen próbuje odtworzyć stare rozmiary swojego okna podczas podwieszania pod
            terminale zmiennej wielkości (te z "WS" w swoim opisie, np.  suncmd lub jakiś xterm).

       -c plik
            przesłoń domyślny plik konfiguracyjny "$HOME/.screenrc" plikem plik.

       -d|-D [pid.tty.host]
            nie uruchamia screen, lecz odłącza pracującą gdzie indziej sesję screen.  Ma to taki sam efekt jak wpisanie "C-a d" z terminala sterującego screen'a.   -D  jest
            odpowiednikiem  klawisza  odłączenia  zasilania  (power detach).  Jeśli żadna sesja nie może być odłączona, opcja ta jest ignorowana. W połączeniu z -r/-R można
            osiągnąć ciekawsze efekty:

       -d -r   Podłącz na nowo (reattach) sesję, a jeśli to konieczne, najpierw ją odłącz.

       -d -R   Podłącz na nowo sesję, a jeśli to konieczne, najpierw ją odłącz, lub nawet utwórz.

       -d -RR  Podłącz na nowo sesję, a jeśli to konieczne, odłącz ją lub utwórz. Użyj pierwszej sesji jeśli dostępnych jest więcej niż jedna.

       -D -r   Podłącz na nowo sesję, a jeśli to konieczne, najpierw odłącz i wyloguj się zdalnie.

       -D -R   Podłącz tu i teraz. Znaczy to: jeśli sesja działa, to podłącz na nowo. Jeśli to konieczne, najpierw odłącz i zdalnie się wyloguj. Jeśli nie działała,  utwórz
               ją i poinformuj użytkownika. Jest to ulubiony sposób autora.

       -D -RR  Podłącz tu i teraz. Cokolwiek to znaczy, po prostu to zrób.

            Uwaga: Zawsze jest dobrym pomysłem sprawdzenie statusu twoich sesji z pomocą "screen -list".

       -e xy
            określa, że znak komendy to x, a znak generujący literalny znak komendy to y. Domyślnym ustawieniem jest "C-a" i `a', co może być przekazane jako "-e^Aa".  Pod-
            czas tworzenia sesji screen opcja ta ustawia domyślny znak komendy. W sesji wieloużytkownikowej, wszyscy dodani użytkownicy rozpoczną  z  tym  znakiem  komendy.
            Jednak  podczas  podłączenia do już działającej sesji, opcja ta zmienia tylko znak komendy podłączającego się użytkownika.  Opcja ta jest równoważna odpowiednio
            komendom "defescape" lub "escape".

       -f, -fn, i -fa
            włącza lub wyłącza albo wchodzi w "automatyczny tryb przełączania" kontroli przepływu. Może to być też zdefiniowane poprzez "defflow" w pliku .screenrc.

       -h num
            Ustawia bufor przewijania historii na num linii.

       -i   powoduje, że klawisz przerwania (zwykle C-c) przerywa wyświetlanie natychmiast gdy włączona jest kontrola przepływu.  Zobacz komendę "defflow" z  .screenrc  dla
            szczegółów.  Używanie tej opcji nie jest zalecane.

       -l i -ln
            włącza/wyłącza tryb zgłoszeniowy (dla odświeżania /var/run/utmp).  Można to zdefiniować też poprzez komendę "deflogin" pliku .screenrc.

       -ls i -list
            nie  uruchamia  sesji  screen, lecz drukuje listę łańcuchów pid.tty.host określających twoje sesje screen.  Sesje oznaczone jako `detached' (odłączone) mogą być
            wznowione z pomocą "screen -r". Te, zaznaczone jako `attached' (podłączone) działają i mają terminal sterujący. Jeśli sesja działa w trybie wieloużytkownikowym,
            jest  zaznaczona jako `multi'. Sesje oznaczone jako `unreachable' (nieosiągalne) żyją albo na innych hostach, albo są `martwe'.  Sesja nieosiągalna jest uważana
            za martwą jeśli jej nazwa odpowiada albo nazwie hosta lokalnego, albo podanemu parametrowi. Zobacz flagę -r dla opisu konstruowania porównań.  Sesje  zaznaczone
            jako `dead' (martwe), powinny być sprawdzane i usuwane.  Zapytaj administratora jeśli nie jesteś pewien. Sesje usuwa się opcją -wipe.

       -L   mówi  screenowi  że twój automarginesowy terminal ma zapisywalną ostatnią pozycję ekranu.  Możesz to ustawić również w swoim .screenrc, podając `LP' w komendzie

       -m   powoduje, że screen ignoruje zmienną środowiskową $STY. "screen -m" wymusza tworzenie nowej sesji, niezależnie od tego, czy  screen  jest  wywołany  z  wewnątrz
            innej sesji screen czy nie. Flaga ta ma specjalne znaczenie w połączeniu z opcją `-d':

       -m -d   Uruchom screen w trybie "odłączonym". Tworzy to nową sesję, lecz nie podłącza do niej.  Jest to przydatne dla skryptów startowych systemu.

       -m -D   To również uruchamia screen w trybie "odłączonym", lecz nie rozwidla nowego procesu. Komenda kończy działanie gdy kończy się sesja.

       -O   wybiera  bardziej optymalny tryb wyjściowy dla twojego terminala niż prawdziwy VT100 (tyczy się tylko terminali automarginesowych bez `LP').  Może to być ustaw-
            ione w twoim .screenrc przez podanie `OP' w komendzie "termcap".

       -q   Powstrzymuje drukowanie komunikatów o błędach. W połączeniu z "-ls", kod wyjścia jest  następujący:  9  wskazuje  katalog  bez  sesji.  10  wskazuje  katalog  z
            pracującymi,  lecz  niepodłączalnymi  sesjami.  11 (lub więcej) wskazuje na jedną (lub więcej) nadających się do użycia sesji.  W połączenie z "-r", kod wyjścia
            jest następujący: 10 oznacza, że nie ma sesji do wznowienia. 12 (lub więcej) oznacza, że istnieją 2 (lub więcej) sesje do  wznowienia  i  że  powinieneś  podać,
            którą wybrać. W innych wypadkach "-q" nie daje efektu.

       -r [pid.tty.host]
       -r właścicielsesji/[pid.tty.host]
            wznawia  odłączoną  sesję  screen.   Nie  można  podawać  żadnych  innych  opcji  (poza  kombinacjami  z  -d/-D),  choć może być wymagany opcjonalny przedrostek
            [pid.]tty.host (w celu rozróżnienia wielu odłączonych sesji screen).  Druga postać jest używana do podłączenia do sesji screen innego użytkownika, który pracuje
            w trybie wieloużytkownikowym. Oznacza to, że screen powinien szukać sesji w katalogu innego użytkownika. Wymaga to setuid-root.

       -R   próbuje  wznowić  pierwszą odłączoną sesję screen, którą znajdzie. Po sukcesie wszystkie inne opcje linii komend są ignorowane.  Jeśli żadna z odłączonych sesji
            nie istnieje, uruchamiana jest nowa sesja z użyciem podanych opcji, zupełnie jakby -R nie zostało podane. Opcja ta jest  ustawiana  domyślnie  gdy  screen  jest
            uruchamiany jako powłoka zgłoszeniowa.

       -s   ustawia  domyślną  powłokę  na podany program. Normalnie używana jest wartość zmiennej środowiskowej $SHELL (lub "/bin/sh" jeśli jej nie zdefiniowano).  Może to
            być też zdefiniowane poprzez komendę "shell" pliku .screenrc.

       -S nazwasesji
            Podczas tworzenia nowej sesji, opcja ta może być użyta do podania znaczącej nazwy sesji. Nazwa ta identyfikuje sesję dla akcji "screen  -list"  i  "screen  -r".
            Podmienia domyślny przyrostek [tty.host].

       -t nazwa
            ustawia tytuł (a.k.a.) dla domyślnej powłoki, lub podanego programu.  Zobacz też komendę "shelltitle" pliku .screenrc.

       -v   Wydrukuj numer wersji.

       -wipe [dopasowanie]
            robi  to samo co "screen -ls", lecz usuwa sesje zamiast zaznaczać je jako martwe ('dead').  Nieosiągalna sesja jest uważana za martwą, jeśli jej nazwa odpowiada
            nazwie hosta lokalnego, lub jakiegoś jawnie podanego parametru. Zobacz opis flagi -r dla opisu konstruowania dopasowań.

       -x   Podłącz do nieodłączonej sesji screen.  (Tryb wielowyświetlaczowy).

Domyślne wiązania klawiszy:

       C-a '
       C-a "       (select)      Zapytaj o nazwę okna, do którego chcesz się przełączyć, lub o jego numer.

       C-a 0       (select 0)
        ...           ...
       C-a 9       (select 9)
       C-a -       (select -)    Przełącz na okno numer 0 - 9 lub na puste okno.

       C-a tab     (focus)       Przełącz ogniskowanie wejścia na następny region.

       C-a C-a     (other)       Włącz poprzednio wyświetlane okno.  Zauważ, że to połączenie  jest  równoważne  dwukrotnemu  wpisaniu  znaku  komendy  (chyba  że  jest  to
                                 przesłonięte). Na przykład, jeśli używasz opcji "-e]x", ta komenda stanie się "]]".

       C-a a       (meta)        Wyślij znak komendy (C-a) do okna. Zobacz komendę escape.

       C-a A       (title)       Zezwól użytkownikowi ustawić nazwę dla bieżącego okna.

       C-a b
       C-a C-b     (break)       Wyślij do okna przerwanie (break).
       C-a C-b     (break)       Wyślij do okna przerwanie (break).

       C-a B       (pow_break)   Otwórz na nowo linię terminala i wyślij przerwanie (break).

       C-a c
       C-a C-c     (screen)      Utwórz nowe okno z powłoka i przełącz się na nie.

       C-a C       (clear)       Wyczyść ekran.

       C-a d
       C-a C-d     (detach)      Odłącz screen od tego terminala.

       C-a D D     (pow_detach)  Odłącz i się wyloguj.

       C-a f
       C-a C-f     (flow)        Włącz, wyłącz, lub ustaw automatyczny przepływ.

       C-a F       (fit)         Zmień rozmiar okna na obecny rozmiar regionu.

       C-a C-g     (vbell)       Włącza tryb wizualnego dzwonka screen'a.

       C-a h       (hardcopy)    Zapisz twardą kopię bieżącego okna do pliku "hardcopy.n".

       C-a H       (log)         Rozpoczyna/kończy raportowanie bieżącego okna do pliku "screenlog.n".

       C-a i
       C-a C-i     (info)        Pokaż informację o tym oknie.

       C-a k
       C-a C-k     (kill)        Zniszcz bieżące okno.

       C-a l
       C-a C-l     (redisplay)   Całkowicie odśwież bieżące okno.

       C-a L       (login)       Włącz slot zgłoszeniowy tego okna. Dostępne tylko jeśli screen jest skonfigurowany do odświeżania bazy utmp.

       C-a m
       C-a C-m     (lastmsg)     Powtórz ostatnią wiadomość, wyświetloną w linii komunikatów.

       C-a M       (monitor)     Włącza monitorowanie bieżącego okna.

       C-a space
       C-a n
       C-a C-n     (next)        Przełącz na następne okno.

       C-a N       (number)      Pokaż numer (i tytuł) bieżącego okna.

       C-a backspace
       C-a h
       C-a p
       C-a C-p     (prev)        Przełącz na poprzednie okno (odwrotne do C-a n).

       C-a q
       C-a C-q     (xon)         Wyślij control-q do bieżącego okna.

       C-a Q       (only)        Skasuj wszystkie regiony poza bieżącym.

       C-a r
       C-a C-r     (wrap)        Włącz ustawienie zawijania linii (line-wrap) bieżącego okna (włącz automatyczne marginesy okna).

       C-a s
       C-a C-s     (xoff)        Wyślij do bieżącego okna control-s.

       C-a S       (split)       Podziel bieżący region na dwa nowe.

       C-a t
       C-a C-t     (time)        Pokaż informację systemową.

       C-a v       (version)     Wyświetl wersję i datę kompilacji.

       C-a C-v     (digraph)     Wstaw dwuznak.

       C-a w
       C-a C-w     (windows)     Pokaż listę okien.

       C-a W       (width)       Włącz 80/132 kolumny.

       C-a x
       C-a C-x     (lockscreen)  Zablokuj (lock) ten terminal.

       C-a X       (remove)      Zabij bieżący region.

       C-a z
       C-a C-z     (suspend)     Zwieś screen.  Twój system musi obsługiwać kontrolę zadań w stylu BSD.

       C-a Z       (reset)       Zresetuj terminal wirtualny na jego wartości "power-on".

       C-a .       (dumptermcap) Zapisz plik ".termcap".

       C-a ?       (help)        Pokaż wiązania klawiszowe.

       C-a C-\     (quit)        Zabij wszystkie okna i zakończ screen.

       C-a :       (colon)       Wejdź do trybu linii komend.

       C-a [
       C-a C-[
       C-a esc     (copy)        Wejdź w tryb kopiowania/przewijania.

       C-a ]       (paste .)     Zapisz zawartość bufora wklejania na kolejkę standardowego wejścia bieżącego okna.

       C-a {
       C-a }       (history)     Kopiuj i wklej poprzednią linię (komend).

       C-a >       (writebuf)    Zapisz bufor wklejania do pliku.

       C-a <       (readbuf)     Wczytuje plik wymiany screena do bufora wklejania.

       C-a =       (removebuf)   Usuwa plik, używany przez C-a < i C-a >.

       C-a ,       (license)     Pokazuje, skąd screen pochodzi, dokąd poszedł i dlaczego możesz go używać.

       C-a _       (silence)     Rozpoczyna/kończy monitorowanie bieżącego okna na nieaktywność.

       C-a *       (displays)    Pokaż listing wszystkich obecnie podłączonych wyświetlaczy.

Więcej w systemowym

man screen