pitsa pisze: ↑03 sty 2020, 08:43
Lubisz pracować tylko jako root?
Od kiedy zainstalowałem pierwszego Linuksa, a było to naprawdę dawno temu, wszędzie i zawsze loguję się jako root, i wszystkie programy uruchamiam z uprawnieniami roota. ABSOLUTNIE NIGDY nie miałem z tego powodu ŻADNEJ AWARII. Hardware padał ze starości, ale raz postawione systemy pracowały latami ...
Nawiasem mówiąc NIGDY nie popełniłem takiego błędu, którego bym uniknął pisząc sudo przed każdym poleceniem.
Tak w ogóle, to ta debianowa paranoja jest kompletnym debilizmem i funkcjonuje na zasadach sekty, w której wszyscy wierzą wiarą tak głęboką, że się nie odważą na żadną herezję.
Sudo jako takie wymyślono po coś zupełnie innego, żeby można było dowolnemu użytkownikowi nadać prawa do uruchamiania NIEKTÓRYCH programów z prawami roota, żeby przysłowiowa małpa nie musiała wzywać administratora do błahych działań.
Natomiast do administracji systemu jest konto root i kto zna hasło roota, temu wolno WSZYSTKO.
Amen.
pitsa pisze: ↑03 sty 2020, 08:43
z punktu widzenia "świeżaka" i z konta użytkownika z pomocą sudo.
Tym razem, specjalnie dla Was, zrobiłem wszystko jak debianowy prawiczek, czyli bez aktywowania konta root. Po prostu doszedłem do wniosku, że jeżeli ma to być poradnik DLA WSZYSTKICH, no to także dla tych, którzy pracować jako root nie chcą, albo nie potrafią. Ale resztę napiszę dalej.
*************************************************************************************************************
Na początek kilka uwag natury ogólnej.
Po pierwsze, kompilacja to proces czasochłonny, więc warto użyć szybkiej maszyny. Szczególnie w przypadku kernela kompilator ma co mielić. To NAPRAWDĘ jest wielka różnica czy kompilacja będzie trwała dwadzieścia minut czy cztery godziny. Zrozumiesz to, gdy coś pójdzie nie tak i będziesz musiał zaczynać wszystko od początku. Co do zasady, to Linux tym się różni od Windows, że z dysku przełożonego do innego komputera system się uruchomi. Są oczywiście wyjątki, ale to wtedy gdy zainstalujesz własnościowe sterowniki, albo różnice w sprzęcie będą naprawdę ogromne. Dlatego na czas kompilacji warto dysk z docelowego komputera przełożyć do szybszej maszyny.
WAŻNA UWAGA : System operacyjny należy ZAWSZE instalować na docelowym sprzęcie, dopiero później można dysk przełożyć gdzieś indziej.
Po drugie, warto mieć do tej zabawy osobny dysk. Dzisiaj zupełnie nowy dysk HDD 250-320 GB można kupić poniżej 50 zł, a zupełnie nowy dysk SSD 128 GB poniżej 100 zł. Warto te pieniądze wydać, żeby sobie nie śmiecić w komputerze używanym do innych celów, oraz uniknąć katorgi z kopiowaniem megabajtów danych.
Po trzecie, zupełnie czymś innym jest instalacja programu z pakietu deb, a czymś innym jego kompilacja ze źródeł. W pierwszym przypadku musimy spełnić wyłącznie zależności samego programu, w drugim także zależności kompilatora. biorąc pod uwagę że zależności mają swoje zależności, sprawa się kończy na tym, że po zainstalowaniu systemu trzeba jeszcze doinstalować jakieś 500 MB softu, także zupełnie niepotrzebnego, jak choćby pakiety do tworzenia dokumentacji w językach których nie znamy. No ale tego uniknąć się nie da. Pocieszające jest to, że kiedy już skompilujemy program do pakietu deb, to możemy go zainstalować na gołym systemie pozbawionym tych wszystkich dodatków. Z powyższych powodów zalecam używanie polecenia apt-get zamiast apt. Różnica jest taka, że apt-get każdy pobrany pakiet zapisuje w folderze /var/cache/apt który to folder warto sobie backupować. Zasada jest taka, że gdy polecimy aptowi zainstalować jakiś pakiet, to on sprawdza czy takiego pliku nie ma w folderze /var/cache/apt. Jeśli znajdzie, to go bierze stamtąd zamiast ściągać z internetu. WAŻNE jest to, że zawartość tego folderu nie jest nigdzie sprawdzana czy zapisywana, czyli możemy tam robić dowolnie wszystko, usuwać pliki albo je dodawać i mieć tam totalny burdel, jeśli tylko lubimy. W szczególności, jeśli po zainstalowaniu systemu skopiujemy do /var/cache/apt pakiety z innej instalacji, to możemy uniknąć pobierania bez sensu gigabajtów danych. Natomiast jeśli na dysku zrobi się ciasno, to można ten folder bez żadnych obaw wyczyścić.
Teraz do roboty.
Potrzebujemy 20 GB wolnego miejsca na dysku i połączenie z internetem.
Najpierw należy się zdecydować który kernel, potem jaka dystrybucja Linuksa.
Kernele do wyboru mamy dwa - rtai i rt-preempt. Rtai jest lepszy ale trochę zacofany (<=4.14), rt-preempt daje gorsze rezultaty, ale jest dostępny w najnowszych wersjach kernela (>5.0).
Ja się zdecydowałem na 4.14.148-rtai-amd64, ponieważ wypowiedziałem wojnę jitterowi. Nawiasem mówiąc nie jest to oficjalna łata twórców rtai, tylko mocno przekombinowane rozwiązanie autorskie. Przekombinowane, bo wyłączono w nim dosłownie WSZYSTKO co psuło jitter, nawet tak użyteczne rzeczy jak obsługa kart graficznych Intela i Nvidii. Tak więc ten kernel nie na każdym sprzęcie będzie dobrym rozwiązaniem, raczej tylko ma jakichś platformach AMD z jakimś Radeonem, ale i tak warto go mieć choćby i tylko po to, żeby się dowiedzieć co nasza płyta i procesor potrafią ...
Wybór dystrybucji jest już prostszy, ma być w miarę nowa i taka którą znamy i lubimy. Ja pracuję na Xubuntu 18.04, co jest dobrym wyborem, bo to najnowsza dystrybucja LTE, czyli o długim wsparciu, która będzie aktualizowana jeszcze trzy lata, natomiast xfce4 to jest lekki i fajny menedźer okien, trochę przypominający starego Windowsa a trochę maca, każdy powinien się w nim odnaleźć. No i przede wszystkim nie ma tych kretyńskich kafli, które może się nadają do telefonu, ale na pewno nie do komputera.
Co do wyboru konkretnego pliku do instalacji, to na początku myślałem o starszej wersji, bo 18.04 startował z kernelem 4.15 a ja chcę instalować 4.14, więc bardzo blisko. Niestety teoria rozminęła się z praktyką, a zmarnowany dzień skutecznie wybił mi ten pomysł z głowy. Problem sprowadza się do tego, że co prawda pliki instalacyjne pierwszej wersji 18.04 są dostępne i oczywiście można z nich zainstalować system, ale REPOZYTORIA SĄ ZAKTUALIZOWANE do najnowszych wersji pakietów, które jakby tego było mało, potrafią mieć też zmienione nazwy. Krótko mówiąc burdel jest totalny, system zależności totalnie rozpieprzony, wielu pakietów nie da się ani zainstalować ani zaktualizować, programy nie chcą się kompilować, jak się skompilują to nie chcą się instalować, a w najlepszym razie nie będą działać prawidłowo.
DLATEGO JEDYNYM ROZWIĄZANIEM JEST INSTALACJA Z NAJNOWSZEGO PLIKU xubuntu-18.04.3-desktop-amd64.iso , a następnie jego natychmiastowa aktualizacja.
Procedury instalacji systemu opisywać nie będę, ale trzeba zauważyć że instalator ma dwie użyteczne funkcje : "wybór innego rozwiązania" który umożliwia ręczne partycjonowanie dysku, oraz zawartą tam opcję wyboru gdzie zainstalować GRUB. Użyteczność pierwszego jest oczywista, drugie się przydaje gdy już mamy na dysku zainstalowanego GRUBa i innego Linuksa, bo wybierając MBR partycji na której instalujemy system, on sam się nie uruchomi, ale też nie nadpiszemy poprzedniej konfiguracji. To już wyższa szkoła jazdy i nie miejsce na tłumaczenie, ale warto wiedzieć że taka możliwość istnieje.
Można też uruchamiając system z płyty lub USB (opcja "wypróbuj Xubuntu") zainstalować na live gparted (to tylko kilkaset kilobajtów do pobrania) i zmniejszyć/przesunąć istniejace partycje żeby zrobić wolne miejsce.
Jak pisałem potrzebna jest 20 GB partycja. Na mniejszej może się nie zmieścić wszystko czego potrzebujemy. Jeśli chcemy tej instalacji używać też do innych celów, to zalecam co najmniej 40 GB.
Instalator z automatu utworzy partycję swap albo plik swapfile w głównym folderze partycji. Co do zasady, współczesny Linux używa około gigabajta pamięci dla własnych celów, programy różnie, ale można przyjąć założenie, że jeżeli mamy w systemie co najmniej 2 GB RAM i nie będziemy robić rzeczy w rodzaju obróbki grafiki wielkoformatowej, to partycja/plik swap nigdy nie zostanie użyty i można go spokojnie usunąć. Trzeba tylko najpierw usunąć właściwą linię w /etc/fstab , a którą to się każdy domyśli.
W połowie pracy trzeba będzie system zrestartować i uruchomić już na nowym kernelu. Z zasady okno GRUB nie pokazuje się gdy mamy zainstalowany tylko jeden system i tylko jeden kernel. Czasem jednak zdarza się że nie pokazuje się także wtedy, gdy teoretycznie powinno. Można sobie z tym poradzić ale nie będę opisywał jak, rozwiązanie można znaleźć w necie.
Instalować będziemy kernel w starszej wersji niż domyślny, dostarczony w pliku iso, dlatego będzie on najprawdopodobniej ostatni na liście GRUBa. Kiedy pojawi się menu GRUB trzeba wejść w "opcje zaawansowane" i tam wybrać linię z kernelem 4.14.148-rtai-amd64. Nawiasem mówiąc, można wtedy wcisnąć zamiast <enter> <e> i przejść do edycji wiersza poleceń GRUBa. To jest sposób by jednorazowo dodać dodatkowe parametry, jak choćby magiczne isolcpus=<wartość>, co potrafi dawać zaskakujące efekty, ale o tym innym razem.
Jak pisałem na wstępie, postanowiłem wszystko zrobić jak debianowy prawiczek, bez logowania się na konto root, ale też bez debilnego klepania sudo przed każdym poleceniem. Służy do tego polecenie
Jest to tryb interaktywny, w którym po podaniu hasła użytkownika .... logujemy się na nieistniejące konto roota, ale tylko W TYM terminalu. Każde kolejne polecenie wydajemy już jako root i wykonujemy z uprawnieniami roota, aż do zamknięcia okna, albo wydania komendy
Jak widać, jest to kolejny dowód na totalny debilizm koncepcji sudo w debianie.
W Xubuntu można w terminalu używać myszy, działa zaznaczanie, kopiowanie i wklejanie, co ciekawe nawet pomiędzy oknami roota i oknami użytkownika bez przywilejów.
W poniższym kodzie są dwie bardzo długie linie. Jeśli skopiujemy je do edytora tekstu, a ten będzie miał ustawione zawijanie wierszy, to nie uda się tych linii skopiować w całości, tylko zostaną dodane znaki nowej linii, tam gdzie akurat edytor uzna za stosowne. Wtedy terminal po wklejeniu takiego dziwoląga wywali błąd. Jeśli ktoś chce, to sobie może te linie rozbić na kilka poleceń apt-get.
Pierwsze apt-get zaspokaja zależności kompilatora, drugie zaspokaja zależności linuxcnc2.9 i nie musimy go wykonywać jeśli planujemy instalację pakietów na innym systemie.
Linie zaczynające się od wget pobierają pliki z internetu, jeśli mamy te pliki pobrane wcześniej, to możemy je skopiować a pobieranie pominąć.
Folder ~/src wymyśliłem żeby było mniej pisaniny. Tylda oznacza katalog domowy użytkownika, czyli w tym wypadku będzie to /root/src . Nic nie stoi na przeszkodzie, żeby użyć dowolnie innego folderu.
Jest ważne by kompilując kernel ustawić (w uruchomionym menuconfig) lokalną wersję na -rtai-amd64 bo inaczej będą później problemy.
Wszystko kompiluje się do pakietów deb, z którymi możemy robić to co z pakietami deb robić można, w szczególności zainstalować je zupełnie gdzieś indziej.
O tym jak w tym kernelu włączyłem obsługę grafik Intela i915, GMA i HD będzie innym razem.
Ostatnia uwaga, ale BARDZO WAŻNA.
Zaraz po zainstalowaniu trzeba włączyć repozytoria pakietów z kodem źródłowym. Można to zrobić w trybie graficznym Menu_systemu->ustawienia-> "oprogramowanie i aktualizacje" (Software and upgrades) stawiając ptaszka przy "kod źródłowy" ("source code"), albo edytując plik /etc/apt/sources.list - należy w odpowiednich liniach usunąć wszystkie znaki poprzedzające deb-src, czyli je odkomentować. Jeśli tego nie zrobimy, kompilator wywali dość niejasny komunikat o błędzie i odmówi dalszej współpracy.
Linie zaczynające się od # to komentarze i nie należy ich wpisywać w terminalu, natomiast należy je UWAŻNIE PRZECZYTAĆ I SIĘ DO NICH ZASTOSOWAĆ.
Sprawdzałem kilka razy, mam nadzieję że żadnego błędu nie ma.
Kod: Zaznacz cały
# enable source code in apt sources list
sudo -i
apt-get update
apt-get dist-upgrade
apt-get install -y make gcc pkg-config build-essential libqt4-dev libssl-dev bin86 kernel-package libncurses5-dev flex bison libelf-dev at-spi2-core devscripts debhelper dh-python libudev-dev libxenomai-dev tcl8.6-dev tk8.6-dev libreadline-gplv2-dev asciidoc dvipng graphviz groff imagemagick inkscape python-lxml source-highlight texlive-font-utils texlive-lang-cyrillic texlive-lang-french texlive-lang-german texlive-lang-polish texlive-lang-spanish w3c-linkchecker python-dev python-tk libxmu-dev libgtk2.0-dev intltool autoconf libboost-python-dev libmodbus-dev libusb-1.0-0-dev yapps2 asciidoc-dblatex libglu1-mesa-dev libgl1-mesa-dev
mkdir ~/src
cd ~/src
wget -c https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.148.tar.xz
wget -c https://github.com/NTULINUX/RTAI/archive/master.zip
wget -c https://codeload.github.com/LinuxCNC/linuxcnc/zip/master
wget -c https://raw.githubusercontent.com/tuxcnc/tuxcnc/master/lcnc2.9-run-as-root.patch
mv master linuxcnc-master.zip
mv master.zip rtai-master.zip
tar -xvf linux-4.14.148.tar.xz
unzip linuxcnc-master.zip
patch -p1 < lcnc2.9-run-as-root.patch
unzip rtai-master.zip
mv linux-4.14.148 linux-4.14.148-rtai-amd64
cp ~/src/RTAI-master/ksrc/v4.14.148/*.patch ~/src/
cd linux-4.14.148-rtai-amd64
patch -p1 < ../0001*.patch
patch -p1 < ../0002*.patch
patch -p1 < ../0003*.patch
patch -p1 < ../0004*.patch
make menuconfig
# in the menu configuration select General Config -> Local version - append to kernel release -rtai-amd64
# save and exit menuconfig
make-kpkg -j9 --initrd kernel_image kernel_headers
cd ~/src
dpkg -i linux-headers-4.14.148-rtai-amd64_4.14.148-rtai-amd64-10.00.Custom_amd64.deb
dpkg -i linux-image-4.14.148-rtai-amd64_4.14.148-rtai-amd64-10.00.Custom_amd64.deb
reboot
#========================
# select kernel 4.14.148-rtai-amd64 at boot
#========================
sudo -i
cd ~/src/RTAI-master
./autogen.sh
./configure
debian/configure 4.14.148 rtai amd64
dpkg-buildpackage
cd ~/src
dpkg -i rtai-modules-4.14.148_5.2.3-linuxcnc_amd64.deb
cd ~/src/linuxcnc-master/src
./autogen.sh
cd ~/src/linuxcnc-master
debian/configure -r
dpkg-checkbuilddeps
# apt-get install ... if some packages missing
dpkg-buildpackage
cd ~/src
apt-get install bwidget freeglut3 libglade2-0 libgtkglext1 libgtksourceview2.0-0 libgtksourceview2.0-common libpango1.0-0 libpangox-1.0-0 libtk-img libvte-common libvte9 python-cairo python-configobj python-gi python-glade2 python-gobject-2 python-gst-1.0 python-gtk2 python-gtkglext1 python-gtksourceview2 python-olefile python-opengl python-pil python-pil.imagetk python-vte python-xlib tcl-tclreadline tclx8.4 python-serial
dpkg -i linuxcnc_2.9.0~pre0_amd64.deb
dpkg -i linuxcnc-dev_2.9.0~pre0_amd64.deb
exit