Nowe posty

Autor Wątek: Budowa skryptu podmieniającego pliki systemowe  (Przeczytany 1569 razy)

pikaczu

  • Gość
Budowa skryptu podmieniającego pliki systemowe
« dnia: 2021-05-05, 07:33:16 »
Potrzebuję zbudować jakiś mini programik bądź skrypt do terminala który będzie w pełni zautomatyzowany.
Potrzebuję czegoś typu KLIKAM IKONKĘ i wszystko z automatu się wykonuje.
Chciałbym stworzyć paczkę która podmieniałaby pliki systemowe a także "coś dziwnego".

Zacznę od plików systemowych czyli sprawa nr.1...

- jest sobie folder o nazwie PLIKI
- w środku znajdują się pliki przede wszytkim graficzne: svg, png, jpg, gif

Chciałbym napisać prosty skrypt do terminala który po uruchomieniu:
- dałby dostęp do roota (po podaniu hasła)
- podebrałby pliki z folderu PLIKI
- skopiowałby te pliki w ściśle określone miejsca (np. /usr/share/icons  albo /usr/share/themes)
- wykonałby inne instrukcje jak update-icon-cache, upadte-grub oraz reboot

Powyższe to jedno a ta wcześniej opisana "dziwna rzecz" to:
sprawa nr. 2

Wytłumaczę na przykładzie pliku fstab o co mi chodzi...
Jest sobie fstab w którym widnieją przykładowe wpisy:
UUID=D061-E445                            /boot/efi      vfat    umask=0077 0 2
UUID=e538e50a-5b3e-4d4f-aeec-26a7c201fed3 /              ext4    defaults,noatime,discard 0 1
tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0

Chciałbym zbudować jakiś zautomatyzowany skrypt do terminala, który po uruchomieniu:
- otworzy edytor tekstu z prawami roota
- doda enter na końcu dowolnego wpisu dowolnym pliku
- dopisze do pliku wcześniej zaprogramowany zestaw znaków
- zapisze wyedytowany plik

i w efekcie końcowym powstanie coś takiego:

UUID=D061-E445                            /boot/efi      vfat    umask=0077 0 2
UUID=e538e50a-5b3e-4d4f-aeec-26a7c201fed3 /              ext4    defaults,noatime,discard 0 1
tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0
myramdisk  /tmp/ramdisk  tmpfs  defaults,size=4096m,x-gvfs-show  0  0

Powyższe to tylko przykład lecz chciałbym nauczyć się edycji plików za pomocą zautomatyzowanych skryptów a potem połączyć to wszystko z "pierwszą sprawą". Chodzi mi o zbudowanie zestawu takich niby to programików które bardzo szybko umożliwią konfigurację konkretnego systemu, np. instalujemy czystego Debiana, Ubuntu, Fedorę czy Manjaro a następnie po użyciu W/W mamy szybciuteńko przekonfigurowany system.


Offline pavbaranov

  • Users
  • Guru
  • *****
  • Wiadomości: 878
    • Zobacz profil
Odp: Budowa skryptu podmieniającego pliki systemowe
« Odpowiedź #1 dnia: 2021-05-05, 08:40:20 »
Automatyzm w zakresie plików systemowych źle wróży temu systemowi :)
To co chcesz zrobić w "sprawa nr 1" rozwali Ci system. Co najmniej w przypadku Archa (i pochodnych), po wykonaniu, nie dokonasz jego aktualizacji.
Prawidłowo coś takiego robisz poprzez:
1. dostarczenie tych wystrojów do katalogu ~/.local/share (w odpowiednie miejsce), lub
2. zbudowanie paczki z takimi wystrojami, nazwanie jej w sposób indywidualny i tak zbudowanej paczki zainstalowanie w systemie.
« Ostatnia zmiana: 2021-05-05, 08:42:39 wysłana przez pavbaranov »

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3047
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Budowa skryptu podmieniającego pliki systemowe
« Odpowiedź #2 dnia: 2021-05-05, 10:08:41 »
A do drugiego nie potrzebujesz edytora. Do tego właśnie są przeznaczone programy typu cat/awk/sed/grep/cut/sort/uniq (ewenualne w akcie desperacji Perl).
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

pikaczu

  • Gość
Odp: Budowa skryptu podmieniającego pliki systemowe
« Odpowiedź #3 dnia: 2021-05-05, 11:11:07 »
Czyli nie zrobię czegoś w deseń roboty pod "cmd" w windows?
Chodzi mi o proste polecenia typu copy,paste,delete... z uprawnieniami roota i w automacie.

Dlaczego ma mi system rozdupcyć?
Jeśli (przykładowo) w /usr/share/icons wiem że jest folder papirus-maia a w nim folder 32x32 a w nim ikona o nazie network-cell-4.svg
i wiem że te ścieżki i nazewnictwo nie zmieniły się od lat...
to dlaczego automatyczna podmiana obrazka (ikony) ma rozwalić system?
Przecież gdy skrypt USUŃ/KOPIUJ wykona się to na miejscu nadal zostają te same pliki (nazewnictwo) które wcześniej było.
Po akualizacji cache ikon nie powinno nic się rozjechać jeśli nazewnictwo i miejsce umieszczenia nowo skopiowanych plików będzie identyczne.

Moim zdaniem w linuxach jest przeogromny burdel dot. właśnie ikon.
Zestaw /usr/share/icons zawiera ponad 170MB różnych ikonek które z powodu responsyności są powielane wiele razy.
Moim zdanie DE powinno w locie sobie ustawiać odpowiednią wielkość ikony tworząc z ikony 128x128 np. ikonkę 32x32 czy 16x16 tyle że wtedy takie DE to uruchamiałoby się pół godziny.

Dziwi mnie też, dlaczego większość programów pod linuxem używa ikonek systemowych a nie swoich, zastanawiam się kto coś takiego wymyślił. Usunie człowiek pewien pakiet z systemu i duża liczba programów (nie mówię o systemie) rozdupca się.

Wiecie o co mi w tym wszystkim chodzi?
Ano o to że aby przerobić wygląd jakiejś dystrybucji tak aby przypominała np. WINDOWS w całości - trzeba zająć się ponad 12000 plików które seryjnie są w każdym systemie. Bez przeróbki ikonka po ikonce a potem bez ich powielania nie ma szans dopracować system tak, aby to wszystko działało.

Dziwią mnie takie rozwiązania, albowiem całość porównuję do windows a nim ktoś wymyślił że każdy zewnętrzny program ma w instalatorze swoje ikony (te które później używa np. przy uruchomionym programie wewnątrz siebie). Żadko jakiś program łapie ikonki z systemu a w linuxie ma to miejsce cały czas. Usuwamy jakiś zestaw ikon np. Papirus i sporo programów które biorą stamtąd ikony już nie działa prawidłowo.
Niby to jest fajne rozwiązanie bo system używa mniej ram i czasu procesora gdy trzeba wrzucić gotową ikonę o odpowiedniej wielkości w jakieś miejsce w jakimś programie ... no ale próba zbudowania nowego pakietu tak aby system wyglądał tak jak konkretny użytkownik chce aby wyglądał graniczy z cudem.
Mamy np. ikonkę NETWORK. Jest ona powielona wiele razy ze względu na rozmiar. Zaczyna się chyba od 8x8, 16x16 i po przez 32x32 czy 64x64 śmiga aż do 256x256. Ilość tych ikonek następnie powielona jest na ilość pakietów, Papirus-Dark, Papirus, Papirus-Maya i tak dalej. Chcąc przygotować jedną wielką szatę graficzną (jasna, ciemna) trzeba przerobić około 122000 elementów znajdujących się w /usr/share/icons.

Dzisiaj sprawdziłem jak wygląda zabawa z tymi niby gotowymi pakietami i powiem szczerze, że chyba każdy projekt w 100% nie jest ukonczony. Po zastosowaniu różnych wersji dostępnych w systemie (download) zawsze zaczynają się krzaki bo po prostu po chwili zaczyna brakować ikonek na ekranie gdzieś pod jakimś paskiem menu i podobnymi.

Zatem, dlaczego developerzy w menedżerku pobierania pozwalają na udostępnianie takich niegotowych projektów?



Offline pavbaranov

  • Users
  • Guru
  • *****
  • Wiadomości: 878
    • Zobacz profil
Odp: Budowa skryptu podmieniającego pliki systemowe
« Odpowiedź #4 dnia: 2021-05-05, 15:20:59 »
@pikaczu - Mam dla Ciebie jedną radę: skoro rozwiązania z Windows Ci się podobają, na siłę chcesz linuksa (dowolnego) do Windows upodobnić, to szkoda Twojego (i naszego czasu) - używaj Windows. Nie chce mi się Ci tłumaczyć dlaczego dowolna dystrybucja, dowolne DE nie jest i nie zachowuje się jak to, co lubisz. Weź pod uwagę tylko, że:
1. nie każdy użytkownik chce mieć linuksa wyglądającego jak Windows,
2. nie każdy użytkownik chce mieć linuksa zachowującego się jak Windows,
3. nie każdy użytkownik chce mieć linuksa skonstruowanego jak Windows,
4. mnóstwo rozwiązań, o których piszesz (ikony, wystroje itp.) są zastrzeżone przez MS i ktoś, kto obecnie takie dostarcza dla linuksa robi to na własne ryzyko; zasadniczo nie wolno mu tego robić (upowszechniać) i działa co najmniej na skraju prawa (jeśli go nie narusza),
5. sposób działania tych wystrojów jest zgodny ze standardem przyjętym w linuksie (XDG) - m.in. po to, by ikony tworzone z myślą o jednym DE nadawały się do wykorzystania w innym DE.

Przyjmij też do wiadomości, że istnieją 2-3 zespoły tworzące takie wystroje:
1. "oficjalny", ten który odpowiada za całe środowisko,
2. niekiedy są one robione przez deweloperów danej dystrybucji,
3. różnych społecznościowych twórców, którzy lepiej lub gorzej radzą sobie z ich tworzeniem (ba, niektórzy z nich są takimi, jak choćby Ty, któremu nie chce się nawet sięgnąć do dokumentacji i "wiedzą lepiej"); pośród tych są bardzo różne i w różnym stopniu ukończone - niektóre doskonałe, niektóre nie.
Niestety - mając uprawnienia root - możesz w systemie zrobić dowolną rewoltę. Za jej zrobienie obciążać możesz wyłącznie siebie.
A reszty nie chce mi się tłumaczyć. Polecam mimo wszystko sięgnąć po dokumentację tworzenia wystrojów choćby dla jednego z DE, których chcesz używać.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2757
  • 1709
    • Zobacz profil
Odp: Budowa skryptu podmieniającego pliki systemowe
« Odpowiedź #5 dnia: 2021-05-05, 15:38:45 »
Może faktycznie jest coś w twojej " plaźmie " nie dopracowane.

1. System się nie powinien zepsuć z powodu braku ikonek.
1.1 Albo się nie wyświetla ikonka,
1.2 Albo pojawia się ikonka zastępcza --> czarne okienko sugerujące Tobie że coś jest nie tak z ikonkami.

2. Zakładam że już przejrzałeś  kody wszystkie potrzebne kody źródłowe jak to jest zbudowane.
Bo w KDE / plaźmie to może trochę się różnić do mojego środowiska Mate.
Żeby wszystko działało, konstrukcja musi być taka sama jak tych instalowane domyślnie w KDE / plaźmie.

3. Do własnego użytku nie potrzebujesz przerabiać ikonek na różne rozdzielczości ekranu.

Próbuj, bo ktoś testować musi i czasami na błędach też trzeba się uczyć, najwyżej rozwalisz system na Virtualboxie ;-)
Ale rady także weź pod uwagę.
Powinno wystarczyć wspomniane przez Ciebie .svg ( Chyba że coś w plaźmie jest nie tak )
Dlatego że nowszy typ czyli .svg  ( choć nie jest bez wad, mniej / bardziej ) to potrafi się skalować.
Dla innych, lepiej przygotować .png  lub co tam jest.

4. Do testów można ikony instalować w katalogu domowym
Pewnie wiesz, ale jak coś możesz poczytać.
https://forum.linux.pl/index.php/topic,25598.msg137619.html#msg137619
https://forum.linux.pl/index.php/topic,24122.msg130606.html#msg130606

5. Skrypt. Pewnie tez znasz, ale jak coś masz.
Tam jest w bashu napisany https://github.com/tele1/UplosLinux/blob/main/WIKI/Create.own.icons.md
Może Ci sie przyda. Sam poradnik może się różnić od tego na plazmę.

6. Główne forum KDE
Na głównym forum powinno być coś więcej. https://forum.kde.org/index.php?sid=1ebe151c01e79c3ad1f971174e9f271b
Przepraszam, nie siedzę tam, to nie pomogę.
W razie czego masz translatory on-line i słowniki.

Nasze społeczeństwo jest  / pokolenia są w trakcie transformacji językowej z rosyjskiego na angielski.
Cieszmy się że dokumentacja nie jest po chińsku lub hiszpańsku których zazwyczaj nie znamy.
 https://pl.wikipedia.org/wiki/Lista_najcz%C4%99%C5%9Bciej_u%C5%BCywanych_j%C4%99zyk%C3%B3w_%C5%9Bwiata

7. Ciekawostka: Idea debugowania w KDE
https://forum.kde.org/viewtopic.php?f=14&t=38828

8. Skrypt automatyzujący
To napisz. Porady w https://forum.linux.pl/index.php/topic,26148.0.html
może Ci wystarczą.

8.1 " otworzy edytor tekstu z prawami roota ".
Jeśli większość komend wymaga uprawnień root,
to po prostu uruchom skrypt z prawami root, bez bawienia się w komendy sudo lub su w skrypcie.

8.2. Mam nadzieję że nie chodzi Ci o automatyczne edytowanie pliku przy pomocy edytora.
To zbyt skomplikowane. Można prościej, z terminala edytować plik i wyświetlić.
Do automatycznego klikania to służą różne auto-klikery które były pisane w Pythonie kiedyś i pod Linuxem teraz ciężko znaleźć.
Można też wymusić klikanie przy pomocy komendy xdotool, tylko wspomniałem że do edycji pliku to zbędne.

8.3 Zanim zaczniesz używać skryptu bash z root to polecam stworzyć sobie folder np. dev lub test
i tam skopiować plik konfiguracyjny i na nim testować.

Może taki przykład
#!/bin/bash



ECHO_ZIELONE(){
echo " "
echo -e "\e[0;32m $@ \e[0m"
echo " "
}


PLIK_GRUBA=$(cat /etc/default/grub)


ECHO_ZIELONE "Tu zobaczysz zawartosc starego pliku:"


while read LINIA ; do
# Wyswietli nam dana linie.
echo "$LINIA"

# Edytujemy linie do własnych potrzeb i zapisujemy do zmiennej "NOWA_LINIA"
if [[ "$LINIA" == 'GRUB_TIMEOUT=10' ]] ; then
NOWA_LINIA="GRUB_TIMEOUT=15"
else
NOWA_LINIA=$(echo "$LINIA")
fi

# Zapisujemy pojawiajace sie nowe linie do zmiennej NOWE_LINIE
NOWE_LINIE=$(echo -e "${NOWE_LINIE}\n${NOWA_LINIA}")
done <<< "$PLIK_GRUBA"

# Usuniecie pustej linii na poczatku
NOWE_LINIE=$(grep -v -e '^$' <<< "$NOWE_LINIE")

echo " "
echo "========="

ECHO_ZIELONE "Tu zobaczysz zawartosc nowego nie zapisanego pliku:"

echo "$NOWE_LINIE"

i powodzenia !  :D

Edytowane.
I staraj się warunkować polecenia np.
Najpierw sprawdzić czy plik istnieje i zakończyć skrypt błędem jeśli plik nie istnieje.
żeby nie okazało się że  coś nie działa, a skrypt wykonuje się dalej i nie wiadomo co robi.
« Ostatnia zmiana: 2021-05-05, 15:50:20 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline pavbaranov

  • Users
  • Guru
  • *****
  • Wiadomości: 878
    • Zobacz profil
Odp: Budowa skryptu podmieniającego pliki systemowe
« Odpowiedź #6 dnia: 2021-05-05, 16:10:07 »
1. System się nie powinien zepsuć z powodu braku ikonek.
1.1 Albo się nie wyświetla ikonka,
1.2 Albo pojawia się ikonka zastępcza --> czarne okienko sugerujące Tobie że coś jest nie tak z ikonkami.
To podzielę się swoim doświadczeniem z pewnym wystrojem ikon, który lata temu próbowałem zaaplikować do Plazmy. Otóż część plików, które tam były, było dowiązaniami symbolicznymi, które prowadziły do jakichś ikon, które ów zestaw miał dostarczać. Zasadniczym słowem jest tu: miał. Ikon tych w zestawie nie było. Efektem było to, że Plazma oszalała. Praktycznie nie dawało się na niej pracować (w części przypadków obciążenie procesora próbującego coś z tym fantem wymyślić sięgało 100% i praca stawała się praktycznie niemożliwa).
W innym przypadku - wadliwie stworzony wystrój próbował też odwołać się do czegoś, czego w zestawie nie było (na sztywno zapisane w jednym z plików ścieżki prowadzące donikąd) i jedyne co zobaczyłem to czarny ekran z kursorem.
Niby obecnie Plazma jest już mniej czuła na takie typu rzeczy, jednakże w ten sposób daje się ją zepsuć. Jak jest z innymi DE - nie wiem.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2757
  • 1709
    • Zobacz profil
Odp: Budowa skryptu podmieniającego pliki systemowe
« Odpowiedź #7 dnia: 2021-05-05, 17:14:50 »
Można też użyć sed do edycji plików
przykład

#!/bin/bash

ECHO_ZIELONE(){
echo " "
echo -e "\e[0;32m $@ \e[0m"
echo " "
}

PLIK_GRUBA=$(cat /etc/default/grub)

ECHO_ZIELONE "Tu zobaczysz zawartosc starego pliku:"
echo "$PLIK_GRUBA"

echo " "
echo "========="

ECHO_ZIELONE "Tu zobaczysz zawartosc nowego nie zapisanego pliku:"
echo "$PLIK_GRUBA" | sed 's/GRUB_TIMEOUT=10/GRUB_TIMEOUT=15/g'

Lub sed z opcją " i " żeby od razu podmienić wartość w pliku.
Ale to zamieni wszystkie wystąpienia słowa " GRUB_TIMEOUT=10 "
sed -i 's/GRUB_TIMEOUT=10/GRUB_TIMEOUT=15/g'  nazwa_pliku

Większe możliwości daje
- użycie pętli " while " we wcześniejszym przykładzie w celu dotarcia do konkretnej linii ( bezpieczniejsze )
- lub użycie wyrażeń regularnych,  http://mediologia.pl/wyrazenia-regularne/8-1-wyrazenia-regularne-polecenia-grep-sed-find
« Ostatnia zmiana: 2021-05-05, 17:26:20 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

pikaczu

  • Gość
Odp: Budowa skryptu podmieniającego pliki systemowe
« Odpowiedź #8 dnia: 2021-05-06, 08:53:33 »
"poczyta" w weekend i powie co z tego wyszło