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:
./configure
oraz
make
Logujemy się do root:
su -
passwd:
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; \
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*; \
fi
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
./README
./FAQ
./INSTALL
./doc/
./doc/screen.info-3
./doc/make.help
./doc/screen.info-4
./doc/Makefile
./doc/README.DOTSCREEN
./doc/install.sh
./doc/Makefile.in
./doc/FAQ
./doc/screen.info
./doc/screen.1
./doc/screen.texinfo
./doc/screen.info-5
./doc/screen.info-1
./doc/screen.info-2
./doc/fdpat.ps
./doc/window_to_display.ps
./ChangeLog
./NEWS
./TODO
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
/usr/src/packages/RPMS/i386/screen-4.0.3-1.i386.rpm
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]
Options:
-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ą
funkcję.
-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
"termcap".
-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





