Copyright © 2003-2004 AddUser-NG Development Team
Abstrakt
Dokument zawiera opis użytkowania (budowy, założeń, możliwości oraz konfiguracji) programu AddUser-NG. Jeżeli chcesz dowiedzieć się jak osiągnąć najlepszą funkcjonalność używająć tego programu, ten dokument jest przeznaczony dla Ciebie.
Spis treści
Spis przykładów
Spis treści
AddUser-NG jak sama nazwa wskazuje jest nową/kolejną/odmienną wersją skryptu adduser. Został tak nazwany ze względu na podobną funkcjonalność do wyżej wspomnianego skryptu. Mimo to, filozofia, budowa i założenia jakie stawialiśmy sobie przy tworzeniu naszej wersji, były zupełnie inne. Czy lepsze? Oceń sam.
Dla osób, które nie są zaznajomione ze skryptem adduser, można przybliżyć AddUser-NG w ten oto sposób: jest to program przeznaczony dla administratorów systemów *nixowych, służący do zakładania kont systemowych.
Pierwszą i podstawową przyczyną, dla której powstał AddUser-NG, jest fakt, iż nie ma (w naszym mniemaniu) nigdzie dostępnego, dobrego programu o podobnej funkcjonalności (bądź o nim nie wiemy). Poza tym, jak każdy projekt, także i ten, przyniósł nowe doświadczenia, nieprzespane noce, no i oczywiście... świetną zabawę.
AddUser-NG jest wolnym oprogramowaniem, rozumianym w sensie takim, iż może być on rozpowszechniany bądź/oraz modyfikowany na zasadach licencji GNU GPL wersja 2 (bądź też według Twojego uznania, wersji późniejszej).
Kopia licencji jest dostępna pod tym adresem: http://www.gnu.org/copyleft/gpl.html
Autorami programu są (kolejność alfabetyczna):
Ten rozdział opisuje sposoby instalacji AddUser-NG
Zanim zaczniesz instalację, musisz zainstalować następujące moduły perla:
Config::IniFiles (pakiet Debianowy: libconfig-inifiles-perl)
Getopt::Mixed (pakiet Debianowy: libgetopt-mixed-perl)
XML::Simple (pakiet Debianowy: libxml-simple-perl)
Term::ReadLine::Gnu (pakiet Debianowy: libterm-readline-gnu-perl)
oraz ponadto:
Cdk, jeżeli zamierzasz używać interfejsu użytkownika „cdk” (pakiet Debianowy: libcdk-perl)
Quota, jeżeli zamierzasz używać pluginu „Quota” (pakiet Debianowy: libqouta-perl)
Aby zainstalować AddUser-NG ze źródeł, wykonaj następujące czynności:
Ściągnij najnowsze źródła programu. Możesz tego dokonać w tradycyjny sposób:
ze strony www projektu: http://adduser.linux.pl/download/
po przez anonimowy ftp: ftp://ftp.adduser.linux.pl/
bądź też przez anonimowy dostęp do repozytorium BitKeepera :
bash$
bk clone bk://bk.adduser.linux.pl/stable AddUser-NG
Jeżeli źródła były ściągane z www lub ftp, rozpakuj je:
bash$
bzcat AddUser-NG-current.tar.bz2 | tar x
Przejdź do katalogu ze źródłami:
bash$
cd AddUser-NG
Następnie wydaj polecenie jako użytkownik root:
bash#
make
Spowoduje ono zainstalowanie programu wraz z jego plikami w systemie.
Domyślnie prefix
w jakim instalowany jest
AddUser-NG ma wartość:
/usr
, a więc sama aplikacja
wykonywalna będzie mieścić się w:
/usr/sbin/adduser-ng
. Możesz
to zmienić, zmieniająć wartość
PREFIX
przy wydawaniu polecenia
make, a więc:
bash#
make PREFIX=/usr/local
co spowoduje zainstalowanie programu w
/usr/local/sbin/adduser-ng
.
Podobna sytuacja jest z
prefixem dla plików
konfiguracyjnych. Domyślnie prefix
ustawiony jest na /
,
a więc pliki konfiguracyjne są instalowane w katalogu
/etc/adduser-ng
. Aby zmienić
to zachowanie, użyj opcji CONFIG_PREFIX
,
podczas instalacji, a więc:
bash#
make PREFIX=/usr/local CONFIG_PREFIX=/usr/local
AddUser-NG posiada także dodatkowe wtyczki, oraz pełną dokumentacje (w czasie instalacji instalowana jest tylko dokumentacja dot. wtyczek).
Jeżeli chcesz mieć zainstalowane dodatkowe wtyczki, wydaj polecenie (ponownie jako root):
bash#
make install_all_plugins
Oczywiście, możesz także użyć innej wartości
PREFIX
jeżeli tego chcesz.
Podobnie, jeżeli chcesz zainstalować całą dokumentację, wydaj polecenie:
bash#
make install_docs
Aby zainstalować AddUser-NG z pakietów Debiana wykonaj następujące czynności:
Dodaj następujące linie do pliku:
/etc/apt/sources.list
, w
zależności od tego, jaką posiadasz dystrybucję:
# AddUser-NG dla dystrybucji stable |
deb http://zaron.debian.pl/debian stable main |
# AddUser-NG dla dystrybucji testing |
deb http://zaron.debian.pl/debian testing main |
# AddUser-NG dla dystrybucji unstable |
deb http://zaron.debian.pl/debian unstable main |
następnie wykonaj te oto polecenia jako root:
|
|
Od tej chwili, możesz się cieszyć AddUser-NG na swoim komputerze.
Spis treści
Projektując AddUser-NG, postawiliśmy sobie następujące wytyczne:
modularność
możliwość wyboru interfejsu użytkownika
elastyczna konfiguracja
Wszystkie wyżej wymienione wytyczne zostały spełnione (mamy nadzieję). Dzięki temu program nie ma z góry określonego sposobu działania. To użytkownik decyduje (kształtuje) w jaki sposób ma się zachowywać. Omówmy teraz po kolei w jaki sposób zostało to zrealizowane.
Rozszerzają funkcjonalność programu (tak naprawdę sam AddUser-NG posiada jedynie umiejętność ładowania wtyczek, wszystkie podstawowe operacje jak dodawanie użytkownika, grupy, odbywa się natomiast za pomocą standardowych wtyczek dostarczanych razem z programem).
Konfigurując AddUser-NG, użytkownik wybiera, które wtyczki mają być ładowane oraz konfiguruje je. Dokładny proces konfiguracji opisany jest w podrozdziale: „Konfiguracja”.
A więc jak można się domyśleć, cała funkcjonalność programu opiera się na wtyczkach. Warto więc wiedzieć chociaż podstawowe informacje na temat sposobu funkcjonowania wtyczek.
Po załadowaniu wtyczek przez program, dla każdej z nich (w kolejności określonej przez użytkownika), wykonywane są następujące czynności:
Każda z wtyczek jest konfigurowana, czyli ustalane są wartości dla każdej z opcji jakie wtyczka posiada. Jeżeli jakaś opcja wtyczki nie została określona w pliku konfiguracyjnym grupy, użytkownik zostaje zapytany o nią przez UI (interfejs użytkownika).
Jeżeli w procesie konfiguracji, wystąpi błąd, program po prostu kończy działanie, nie dokonując żadnych zmian.
Po skonfigurowaniu wszystkich wtyczek, następuje właściwe działanie programu, czyli wykonanie przez każdą wtyczkę powierzonych jej zadań (tzw. „wykonywanie wtyczek”). Jest to główny proces w działaniu programu, w tym oto momencie, użytkownik jest dodawany, ustawiana jest mu quota, itd..
Jeżeli w jakimkolwiek momencie tego procesu
wystąpi błąd, przerywane jest wykonywanie dalszych
wtyczek, oraz zostaje uruchomiony proces cofania
zmian. Ma on za zadanie wykonanie dla każdego pluginu
(w odwrotnej kolejności, począwszy od pluginu,
który się nie powiódł), metody
rollback
, która cofnie dokonane
zmiany. Nie wchodząc w szczegóły programistyczne,
powinineś po prostu wiedzieć, że gdy coś się nie
powiedzie, AddUser-NG,
po prostu cofa wykonane zmiany w systemie.
W standardowej dystrybucji programu, dostarczane są następujące wtyczki:
GroupAdd - wtyczka ta, jest odpowiedzialna za dodawanie grupy podczas dodawaniu użytkownika
UserAdd - odpowiedzialna za dodawanie użytkownika
PasswdUser - ustawia hasło nowo dodanemu użytkownikowi
Wtyczki te dają jedynie podstawową funkcjonalność i aby ją rozszerzyć dostępne są dodatkowe wtyczki (np. wtyczka „Quota”) dostarczane jako osobne pakiety źródłowe (oraz pakiety Debiana), tak aby każdy mógł wybrać te, które go interesują. Jest także możliwość napisania swoich własnych wtyczek, szczegółowy opis tej procedury dostępny jest w dokumentacji dla developerów.
Dokładny opis wszystkich wtyczek oraz ich opcji można znaleźć w katalogu dokumentacji programu.
Interfejs użytkownika w programie AddUser-NG, służy do odpytywania o wartości dla opcji danej wtyczki. Użytkownik zostanie poproszony o podanie wartości dla danej opcji przez program, w momencie kiedy opcja ta nie ma określonej wartości w pliku konfiguracyjnym grupy. Więcej na ten temat, w podrozdziale: „Pliki grup (konfiguracja pluginów)” oraz: „Interfejsy użytkownika”
Jak już wcześniej w tym dokumencie zostało wspomniane, AddUser-NG, posiada wiele interfejsów użytkownika. Zostały one zaimplementowane również w postaci wtyczek, stąd też nic nie stoi na przeszkodzie aby napisać własny. Wraz z programem dostępne są następujące interfejsy: batch, readline, cdk. Pierwszy z nich, odpowiada standardowemu, *nixowemu trybowi „command line”, czyli pobierania opcji w wierszu poleceń. Drugi zaś przypomina powłokę systemową bash, czyli posiada mechanizm dokończeń (ang. completitions), historię, itd... Trzeci natomiast, jest oparty o okienka konsolowe, które przypominają znany program dialog. Użytkownik podczas konfiguracji, może określić, który interface preferuje i zamierza używać.
AddUser-NG, posiada bardzo elastyczną konfigurację, która pozwoli zautomatyzować proces dodawania kont systemowych, prześledźmy więc jej możliwości.
Plik ten, jest konfiguracją samego programu, nie jego zachowania, miejscem skąd program pobiera informacje o lokalizacji swoich plików (dokumentacji, katalogu z grupami, itd). Nie służy natomiast do konfiguracji wtyczek. Do tego służą „pliki grup” (o których jest następny podrozdział).
Praktycznie rzecz biorąc, po instalacji programu, jedyną opcją jaką użytkownik powinien zmieniać w tym pliku, jest wybór interfejsu użytkownika, pozostałe opcje, powinny pozostać nienaruszone, chyba, że naprawdę wiesz co robisz.
Plik ten posiada składnię „dosini”, a więc:
[GrupaOpcji] # komentarz opcja_1 = wartość ... opcja_N = wartość ...
[GrupaOpcji]
w przypadku tego pliku jest
jedna, nosi nazwę [adduser]
i
nie powinna być zmieniana.
groups_dir
- opcja
ta, określa katalog w którym znajdują
się pliki
konfiguracyjne grup
default_ui
- opcja
ta, określa
interfejs użytkownika, który ma
być używany do komunikacji z
użytkownikiem
documentation_dir
-
opcja ta określa katalog, w którym
przechowywana jest dokumentacja każdej
z wtyczek.
W systemach *nixowych, naturalnym faktem jest przynależność danego użytkownika do danej/danych grup systemowych. AddUser-NG, posiada podobną filozofię, używając jako swą główną konfigurację „plików grup”. Fakt ten, każdy może tłumaczyć sobie w różny sposób. Grupa AddUser-NG, może być traktowana jako grupa pluginów uruchomianych podczas dodawania użytkownika, bądź też grupa systemowa, dla której zakładane jest konto. Najlepszym sposobem uświadomienia sobie czym jest plik grupy, jest przykład, a więc, przejdźmy do dalszego omawiania.
Pliki grup, znajdują się w katalogu oznaczonym przez opcję
groups_dir
w głównym pliku konfiguracyjnym.
Zazwyczaj jest to katalog
/etc/AddUser-NG/groups/
.
Nazwa pliku grupy może być dowolna, wystarczy, iż
użytkownik będzie ją pamiętał, ponieważ jako jeden z
parametrów wywołania programu, wymagane jest podanie nazwy
grupy do której użytkownik ma przynależeć (czyli nazwy
pliku grupy).
Plik grupy, posiada również jak w przypadku głównego pliku konfiguracyjnego składnię „dosini”, z tym, że ma ona w tym przypadku następującą postać:
[Nazwa_Pliginu_Do_Załadowania_przez_program] # komentarz jakaś_opcja_tego_pluginu = wartość # a ta opcja ma przypisane słowo kluczowe inna_opcja_np_login = %(main.login) # ta opcja jest zakomentowana, więc program się o nią zapyta # opcja = wartość # ta opcja ma pustą wartość, i tak ma być, program się # nie zapyta o nią, po prostu przyjmie tę pustą wartość opcja = [Drugi_w_kolejności_ładowany_plugin] jakaś_opcja_drugiego_pluginu = wartość [Trzeci] opcja = %(Drugi_w_kolejności_ładowany_plugin.jakaś_opcja_drugiego_pluginu) ...
Analizując przykład, instancja [NazwaPluginu]
, oznacza, iż AddUser-NG
ma załadować plugin o nazwie „NazwaPluginu”.
Po wystąpieniu tej instancji, następuje konfiguracja danego
pluginu, o składni:
opcja = wartość
- czego chyba
nie trzeba tłumaczyć
opcja = %(SŁOWO_KLUCZOWE)
-
AddUser-NG obsługuje specjalne słowa kluczowe, o których
za chwilę
# komentarz
- wszystko co
znajduje się po znaku „#” jest
traktowane jak komentarze i pomijane
Kolejność występowania instancji „[NazwaPluginu]” jest ważna! To w jakiej kolejności począwszy od początku dokumentu występują nazwy pluginów, implikuje kolejność w jakiej zostaną skonfigurowane, a następnie „wykonane”.
Jak wyżej zostało wspomniane, AddUser-NG wspiera słowa kluczowe, które występują jako wartość dla opcji pluginu. Ogólnie postać słowa kluczowego wygląda następująco:
%(Nazwapluginu.Opcja)
-
co oznacza: pobierz wartość
opcji „Opcja” pluginu „
Nazwapluginu” oraz podmień ją, a
więc słowo kluczowe %(Plugin.Opcja)
będzie podmienione porządaną
wartością. np:
Przykład 3.1. Przykład słowa kluczowego
%(UserAdd.home_dir)
będzie zastąpione katalogiem domowym zakładanego użytkownika
%(Nazwapluginu.Opcja-wartośćnumeryczna)
-
co oznacza: pobierz
„wartośćnumeryczna” początkowych
znaków opcji „Opcja” pluginu
„Nazwapluginu” oraz podmień ją.
np:
Przykład 3.2. Przykład słowa kluczowego (pobierającego znaki początkowe)
%(UserAdd.comment-1)
będzie zastąpione pierwszym znakiem komentarza (Gecos)
%(Nazwapluginu.Opcja+wartośćnumeryczna)
-
co oznacza: pobierz „wartośćnumeryczna
” końcowych znaków opcji „Opcja
” pluginu „Nazwapluginu”
oraz podmień ją, np:
Przykład 3.3. Przykład słowa kluczowego (pobierającego znaki końcowe)
%(GroupAdd.group_name+3)
będzie zastąpione trzema końcowymi znakami nowo utworzonej grupy dla użytkownika
Istnieją ponad to, dwa dodatkowe słowa kluczowe, które nie są częścią żadnego z pluginów:
%(main.group)
- to słowo
kluczowe jest podmieniane z wartością
nazwy pliku grupy (bądź też w innym
rozumieniu po prostu grupy), do której ma
zostać dodany użytkownik. Inaczej mówiąc
jest to po prostu wartość pierwszego
parametru podawanego przy
uruchomieniu programu.
%(main.login)
- to słowo
kluczowe natomiast, jest wartością loginu
użytkownika, który jest właśnie tworzony
(inaczej, jest to
drugiego parametru podawanego przy
uruchomieniu programu.
Oczywiście i do tych słów kluczowych, mogą również być stosowane operatory wyłuskania znaków „-” i „+”.
Przykład 3.4. Wykorzystanie pozostałych słów kluczowych
[UserAdd] # to jest przydatne dla osób które zakładają bardzo dużo kont i chcą je # grupować alfabetycznie home_dir = %(main.login-1)
Istotne jest, aby zrozumieć, iż dana wartość musi być wcześniej określona przez program aby słowo kluczowe mogło być wykorzystane. Rozważmy to na przykładach. Weźmy np. pod uwagę, taki oto plik konfiguracyjny:
Przykład 3.5. Przykład prawidłowego wykorzystania słów kluczowych
[UserAdd] # słowo kluczowe %(main.login) jest określone automatycznie, po starcie # programu, a więc możemy je stosować w każdym momencie home_dir = /home/%(main.login) # opcja 'home_dir' występuje powyżej, a więc słowo kluczowe # %(UserAdd.home_dir) także jest już w tym momencie określone, możemy więc # je stosować comment = %(UserAdd.home_dir)
Jak wynika z komentarzy zawartych w przykładzie, tak
zadeklarowany plik grupy, jest prawidłowy. Oczywiście
należy go traktować z przymrużeniem oka, ponieważ
definiuje, iż jako komentarz dla nowo zakładanego
użytkownika, należy użyć wartości jego katalogu
domowego, ale chodzi tu jedynie o przykład.
Dla kontrastu, przyjżyjmy się teraz źle
zadeklarowanemu plikowi:
Przykład 3.6. Przykład błędnego wykorzystania słów kluczowych
# najpierw zostanie skonfigurowany (i wykonany) plugin dodawania grupy # systemowej [GroupAdd] # nazwa nowo dodawanej grupy, wykorzystuje jako słowo kluczowe wartość opcji # 'comment' pluginu 'UserAdd', co jest błędne, ponieważ opcja ta, nie posiada # jeszcze określonej wartości, jako że, plugin 'UserAdd' będzie skonfigurowany # później (po tym pluginie), na co wskazują następujące linie group_name = %(UserAdd.comment) # załaduj plugin UserAdd, z tym że, zostanie on dopiero skonfigurowany po # skonfigurowaniu pluginu GrouAdd, na co wskazuje kolejność występowania tych # pluginów w tym pliku [UserAdd] # dopiero teraz zostanie określona wartość tej opcji, co powoduje błędne # skonfigurowanie pliku grupy comment = Użytkownik %(main.login), grupy %(main.group)
Myśle, iż komentarze wykorzystane w przykładzie,
również rozjaśniły dlaczego ten plik został
zadeklarowany błędnie.
A więc wiesz już jak skonfigurować AddUser-NG, nie pozostaje więc nic innego jak zabrać się za tworzeniw własnych grup, zanim jednak, pozwól udzielić sobie kilka rad.
Mimo tego, iż każdy plugin może być załadowany w dowolnym momencie (jak widziałeś, Ty decydujesz o kolejności ładowania pluginów), dobrze przyjętą praktyką będzie, jeżeli:
przy konfiguracji takiej, że zakładana jest
dla każdego użytkownika osobna grupa (jak to
robi np. adduser), jako
pierwszy ładuj zawsze plugin GroupAdd
(grupa musi przecież istnieć,
zanim dodany będzie użytkownik), a następnie
ładuj będzie plugin UserAdd
(czyli właściwe dodawanie użytkownika).
Jeżeli nawet nie zakładasz osobnej grupy
każdemu nowemu użytkownikowi (nie potrzebny
jest wtedy plugin GroupAdd
), to
jako pierwszą w konfiguracji umieszczaj zawsze
wtyczkę UserAdd
(będzie wtedy
jako pierwsza ładowana, czyli konfigurowana i
„wykonywana”. Przestrzeganie
tego uchroni Cię przed nieporządanymi błędami
(np. ustawianie quoty przez wtyczkę
Quota
jeszcze nieistniejącemu
użytkownikowi).
Spis treści
AddUser-NG posiada następującą składnię wywołania:
adduser-ng
[[-h] | [--help]] [[-u] | [--user-interface]] [[-S] | [--skip]] [[-v] | [--verbose]] [[-V] | [--version]] group_name
login
Opcje programu:
[[-h] | [--help]]
Wyświetlaj pomoc i wyjdź.
[[-u] | [--user-interface]]
Użyj innego interfejsu użytkownika, niż zdefiniowany w konfiguracji.
[[-S] | [--skip]]
Jeśli jakaś wtyczka zwróci informację, że już wcześniej została wykonana, to po cichu ją pomiń.
[[-v] | [--verbose]]
Wyświetlaj więcej komunikatów podczas pracy programu (pomocne praktycznie jedynie developerom, lub osobą, które chcą dowiedzieć się co dokładnie dzieje się w danym momencie działania programu).
[[-V] | [--version]]
Wyświetl wersję programu i zakończ działanie.
Parametry wywołania
O interfejsach użytkownika, zostało już dużo powiedziane w rozdziale poświęconemu możliwościom AddUser-NG. Teraz, skoro wiesz już nieco więcej o konfiguracji, należałoby uściślić wszystkie pojęcia.
Interfejs użytkownika w AddUser-NG, służy do komunikowania się z użytkownikiem. Jest on wywoływany w momencie, jeżeli, opcja jakiegoś z pluginów wymaga konfiguracji, czyli, albo jej wartość nie jest określona w pliku grupy, bądź też jest po prostu zakomentowana. W takim wypadku, użytkownik zostanie poinformowany: jaka to opcja, do jakiego pluginu należy, zostanie wyświetlona pomoc dotycząca tej opcji oraz jej domyślna wartość (jeżeli takową dana opcja posiada). Następnie użytkownik zostanie poproszony o wpisanie wartości dla tej opcji. Jeżeli w tym momencie użytkownik przerwie wywołanie programu, AddUser-NG, po prostu zakończy działanie, nie dokonując żadnych zmian w systemie.
Ponad to, interfejs użytkownika, zostaje wywołany przez
program w momencie pojawienia się błędów, czyli w celach
informacyjnych, a przy podaniu opcji -V | --verbose
, wyświetlane są komunikaty na temat przebiegu
działania.
W zależności od interfejsu, zachowanie dotyczące pobierania, wyświetlania danych, jest różne, dlatego warto je teraz omówić.
UI: readline
W przypadku interfejsu readline (domyślnego) pobieranie danych działa podobnie jak w przypadku powłoki systemowej. Wyświetlana jest pomoc dotycząca danej opcji, oraz prompt (czyli „znak zachęty”), który jest nazwą danej opcji. Dodatkowo, jeżeli opcja posiada domyślną wartość, zostanie ona automatycznie umieszczona jako wartość odpowiedzi, tak aby użytkownik zatwierdził ją wciskając „ENTER”.
Interfejs tan posiada historię wprowadzonych wartości, wystarczy, iż użytkownik naciśnie „strzałkę w górę” a kolejno pojawiać się będą poprzednio wpisane wartości.
UI: cdk
To UI, wyglądem przypomina program dialog i podobnie także się zachowuje. Podczas korzystania z tego UI wyświetlane są okna dialogowe, które posiadają: tytuł będący nazwą pluginy / nazwa opcji, oraz pomoc dotyczącą danej opcji. Poza tym, jeżeli opcja posiada domyślą wartość, zostanie ona wyświetlona. Przy odpowiedzi, która posiada domyślną wartość wystarczy wcisnąć „ENTER” (nic nie wpisując jako odpowiedź), a jako odpowiedź zostanie wykorzystana automatycznie wartość domyślna.
UI: batch
Jest specjalne UI, które nie posiada ani wyglądu, nic nie wyświetla, ani nie pobiera bezpośrednio od użytkownika żadnych danych. Zostało ono pomyślane jako pomoc przy pisaniu skryptów z wykorzystaniem programu AddUser-NG. Przy użyciu tego UI, należy korzystać z następującej składni:
bash#
adduser-ng Nazwa_pluginu.Opcja=wartość Nazwa_innego_pluginu.Opcja_tego_pluginu=inna_wartość grupa nazwa_użytkownika
Chyba składnia jest jasna, mimo wszystko, zilustruję to jeszcze na przykładzie:
Przykład 4.2. Przykład wykorzystania UI batch
bash#
adduser-ng UserAdd.comment="Dodany przez UI batch" PasswdUser.passwd=qwerty123456 klienci ala
W przypadku tego UI, jeżeli dla danej opcji nie zostanie podana wartość, a posiada ona wartość domyślą, zostanie ona automatycznie wykorzystana.
Oto lista najczęściej zadawanych pytań oraz odpowiedzi na nie:
5.1. | Gdzie znajdę najnowszą wersję programu: |
Skorzystaj z adresów, podanych w procesie instalacji ze źródeł, bądź też, jeżeli jesteś użytkownikiem systemu Debian GNU/Linux, zainstaluj pakiety a przy uaktualnianiu systemu, zawsze będziesz posiadał najnowszą wersję. | |
5.2. | W pakiecie adduser występuje także deluser, więc przez analogię, czy istnieje DelUser-NG ? |
Prawdę mówiąc, sam AddUser-NG, przez to, iż posiada
mechanizm cofania zmian jakie wprowadził, jest już
wstępnie przygotowany, aby usuwać użytkownika, którego
założył. Upraszczając, wystarczyło by przecież wykonać
metodę
| |
5.3. | Dlaczego używacie BitKeepera a nie CVS? |
Ponieważ BitKeeper jest o niebo lepszy! Jeżeli nie używałeś go nigdy, spróbuj a nie pożałujesz. Ja sam (autor tych słów), bardzo, ale to bardzo sceptycznie podchodziłem do niego (wręcz się wzbraniałem od niego), do póki nie utworzyłem pierwszego repozytorium... ;) | |
5.4. | Dlaczego wspierane są tylko pakiety Debiana? |
A jednak w Debianie się da. |