Potrebna pomoc oko skripte

Trentno pisem jednu skriptu i zapeo sam totalno. Nadam se da ime neko solidno upoznat sa shell skriptama. Problem je kod kopiranja foldera.

cp -r /etc/folder/* $HOME/moj_folder/			   #ovo radi i kopira sve pronadjene stvari u /home/stefan/moj_folder/

sudo mkdir /etc/neki_folder/                  #ok, ovo radi...
sudo cp -r $HOME/moj_folder/* /etc/neki_folder/		 #ali ovo nece, dok ako stavim
sudo cp -r /home/stefan/moj_folder/* /etc/neki_folder/	  #onda radi

Zasto u jednom smeru prepoznaje putanju do $HOME, a u drugom ne? Googlao sam ali nista. Inace nije problem u privilegijama za pisanje u /etc, posto teram skriptu sa gksudo i ukucam sifru pa onda moze da pise po /. Ima li ko ideju ili sam ja nesto mnogo lose shvatio? HELP :slight_smile:

Cudno, bas isprobah kod mene i sve radi kako si hteo, uzeh ovaj tvoj kod i samo ga malo izmenih:

#!/bin/bash
cp -r /etc/folder2/* $HOME/moj_folder2/					
sudo mkdir /etc/neki_folder2/				  
sudo cp -r $HOME/moj_folder2/* /etc/neki_folder2/

Sacuvao sam ga u $HOME-u

Zatim sam ga chmodovao na:


sudo chmod 755 tvojskript

I pokrenuo:

sudo ./tvojskript

probaj ovako (ako vec nisi) pa da vidimo…

O veliki Manitu, hvala ti za kisu, chmod 755 je odradio posao! Mada bih se mogao zakleti da sam probao to, mozda sam nesto bezze promasio u kucanju. :slight_smile: Uh… zaheba me finale lige sampinjona, do sad bih zavrsio skriptu… cim zavrsim kacim rezultate, nadam se da ce jos nekome biti korisni.

Desava se :slight_smile: U svakom slucaju objavi rezultate ovde, deljenje bash skripti me uvek nekako podseca na stare dobre dane kada su se ljudi zanimali sa BASIC-om na svojim komodorima, spektrumima, galaksijama, itd… i pravili zanimljive programcice i igrice koje su medjusobno delili i usput ucili… Bilo je tu raznih kreativnih i zanimljivih projekata :slight_smile: Dosta kvalitetnih programera je osvanulo bas iz tog doba.A onda je nekako sve otislo u drugom pravcu. Drago mi je sto su GNU/Linux sistemi ocuvali taj duh i naravno visestruko ga unapredili.

Problem je bio jer je skripta bila pod $HOME okriljem pa nije imala odgovarajuca prava. Skoro sam zavrsio skriptu… Imam problem oko administratorskih privilegija skripte. Kad je teram sa gksudo ili sudo onda mu je $HOME bas home itu kopira (sto se vidi sa nautilusom sa administratorskim pravima) a ne /home/stefan/. Dok za neke druge stavke su skripti potrebna root prava (za pianje po /etc/). A taman sam mislio da je gotovo… probacu sutra sa $HOME/$USER/ pa ce valjda da stavi gde treba, ne mogu vise, pola 4 ujutru, bem ti budalastinu&budalu=mene. :slight_smile:

Da, mora da se chmoduje na 755, to jest da bude i executable da bi radila kako valja.

Sto se ovog drugog tice, hmm… Znam da kada uradis echo u root terminalu za $HOME rezultat bude “/root” a za $USER bude “root”. Sto je i logicno. U ostalim slucajevima treba da vodi ka korisniku u njegovo putanju u home-u. Ne znam sto ti izbacuje samo /home… Postuj ovde ako odustanes pa cu pogledati kod mene.

U svakom slucaju srecno! :slight_smile:

Ma djavo da ga nosi. Ja sam skriptu zavrsio i radi. Ali kako… e sad tu pocinju problemi sa root privilegijama. Inace, ideju za skriptu sam dobio pre par nedelja kad sam oborio sistem nepovratno i onda sam morao sve nanovo (podesavanja, software i ostalo), pa sam hteo da napravim skriptu koja ca, kada skockam sve kako meni odgovara, da napravi backup trenutnih podesavanja i svog instaliranog softvera i da po potrebi (ako opet ubijem sistem) sve to vrati na klik, a softver koji sam onda imao instaliran ponovo instalira (povuce sa neta, ne da pravi backup od 500+MB). Ceo backup svih podesavanja je tezak oko 400KB, kompresovan u tar.gz tezak oko 35KB.

Skripta ima za cilj da u $HOME/Backup Settings prekopira ona podesavanja koja cekirate na ponudjenoj listi (PPAs, .gconf, bashrc, listu instaliranog softvera, DNS, DHCP, hosts i crontab su za sada ponudjeni). I to radi, ali dvojako. Ako teram sa (gk)sudo skripta.sh onda ih stavi u root/home umesto u /home/stefan/, a ako samo poteram skripta.sh onda ih stavi gde treba u $HOME/Backup Settings. To je backup deo skripte i on ne zahteva root privilegije jer kopira podesavanja u $HOME. Problem je sto za restore deo skripte su potrebne root privilegije jer pise po /etc/. Posto sam hteo da se u prvom prozoru nudi backup ili restore obe stvari moraju da se nalaze u istoj skripti (cuj, moraju, ne moraju ali je tako pametnije, cini mi se). Napravio skriptu tako da ima 2 funkcije: backup() i restore() u okviru kojih ima dosta manjih funkcija i komandi. I kada se na pocetku izabere backup ili restore jedna od te dve funkcije se izvrsava u skripti. S tim da se restore funkcija nece izvrsiti ako nema foldera $HOME/Backup settings/ vec kaze da nije nasla nikakav backup i zatvori se.

Znaci problem je ocigledan: backup deo ne radi kako treba ako je pod root privilegijama (snima u /root), a restore ne radi bez root privilegija. Mozda bi resenje bilo da je razdvojim u 2 skripte backup.sh i restore.sh, ali ovako kako je sad je mnogo preglednije i lakse za eventualne ispravke i dodavanje novih opcija.

Ima link za skriptu na kraju poruke (password je mint). Skripta se nalazi u /backup/usr/bin/backup.sh, a ima i install.sh skript koji je stavi u /usr/bin/ i napravi i Backup.desktop u /usr/share/applications/ kao i ikonicu (pescani sat), tako da se onda moze pokretati iz Menu>Accessories>Backup, tj. instalira je kao aplikaciju, da ga tako nazovem. Jedini dependency je dselect koji instalira softver koji nedostaje sa backupovane liste softvera, ali install.sh je resava i nudi instalaciju dselect ili prekida instalaciju backup-a. Okacio bih je ovde kao kod, ali je bas dugacka (364 linije) a na forumu kodovi idu celom duzinom pa bi pojelo stranicu celu (nema vise scroll u kodu, ne znam zasto). Da, i attachment ne dozvoljava da okacim backup.zip tako da sam je uploadovao na 2shared. Nadam se da cemo naci neko resenje jer mislim da bi ovaj alatcic bio koristan i drugima ne samo meni.

*skripta je proverena, kod mene sam je terao 100 puta i restore deo i backup deo i kao root i kao user, nije opasna po sisitem :slight_smile: moj je i dalje ziv i sva podesavanja rade i dalje.

http://www.2shared.com/file/KmAA3-OT/backup.html

Skidam skriptu čim budem mogao (vidim da je trenutno ispunjen limit pa mora kasnije) pa ću malo kasnije baciti oko na kod i videti sta se može uraditi. Imam par ideja ali ajd prvo da pogledam pa onda da dalje filozofiram.

E ovako prijatelju, testirao sam kod sebe skript, kasnije ću ti poslati neka sitnija poboljšanja, ali o tome malo kasnije, dakle rezultati testiranja:

sudo backup – radi kako treba (backup i restore). Dakle, smešta backup u $HOME korisnika sa “povišenim” privilegijama, odakle ih i vraća gde treba. Dakle radi onako kako je i predviđeno.

gksu/gksudo backup – Takođe radi radnju (dakle backup i restore)… Međutim… Umesto da smešta backup u $HOME korisnika sa “povišenim” privilegijama on ih kopira u folder root-a , dakle /root. I to bi bila jedina razlika… Što koliko sam shvatio radi i tebi…

Sa gksu dobijaš istu vrednost $HOME varijable kao da pokrećeš program u root terminalu (#) a ne kao da ga pokrećeš kao korisnik sa povišenim privilegijama (sudo)…

Ovo mi je čudno s obzirom da je GKSU grafički front end za SUDO… Hmm…

Jesi probao da ga pokreneš sa čistim sudo ili samo sa gksu?

Inače, fina skripta :slight_smile: Još malo da se doradi i biće super

Znam da radi sa sudo i meni je bilo nejsno zasto sa gksudo se ponasa kao root. Ali sad znam. :slight_smile: A revo i zasto (izvod iz man gksu):

This manual page documents briefly gksu and gksudo

gksu is a frontend to su and gksudo is a frontend to sudo. Their pri‐
mary purpose is to run graphical commands that need root without the
need to run an X terminal emulator and using su directly.

Notice that all the magic is done by the underlying library, libgksu.
!!! Also notice that the library will decide if it should use su or sudo as !!!
backend using the /apps/gksu/sudo-mode gconf key, if you call the gksu
command. You can force the backend by using the gksudo command, or by
using the --sudo-mode and --su-mode options.

If no command is given, the gksu program will display a small window
that allows you to type in a command to be run, and to select what user
the program should be run as. The other options are disregarded, right
now, in this mode.

Iz nekog razloga on odlucuje da pokrece kao su, a ne sudo (one ! sam ja dodao). Probao i sam i da izmenim Backup.desktop u

Exec=gksudo --preserve-env backup

da sacuva current enviroment, ali to samo delimicno resava svar jer sada Backup Settings smesta u $HOME gde treba, ali je owner root, sto je i logicno jer je folder napravo proces sa sudo privilegijama. Pokusao sam da dodam u skripti komandu

sudo chown -R $USER:$USER $HOME/Backup Settings/

posle pozivanja fukcije backup ali chown se ne snalazi u ovom slucaju sa $ varijablama, dok ista komanda kroz terminal radi. Znaci nesto ovde nije kako treba, valjda cu skontati sta mu je.

Inace install.sh je imala problem u petlji za proveravanje postojanja dselect paketa, pa sam ispravio i okacio gore novi link, a da ne bi skidao ponovo evo kao kod pa ako budes testirao samo prelepi preko stare install.sh

[CODE]#!/bin/bash
#Install script

sudo echo

if [ -f /usr/bin/dselect ]
then

sudo cp ./usr/bin/backup /usr/bin/
sudo cp -r ./usr/share/applications/* /usr/share/applications/
sudo cp -r ./usr/share/icons/hicolor/192x192/apps/* /usr/share/icons/hicolor/192x192/apps/

sudo zenity --info --text “Applicaton Backup installed successfully!”

else

zenity --question --text=“You need dselect for Backup to work. Do you want to install it now?”

if [ $? == 0 ]
then
sudo apt-get install dselect | zenity --text-info --height=700 --width=450 --title “Installing dselect. Press OK when done…”

sudo cp ./usr/bin/backup /usr/bin/
sudo cp -r ./usr/share/applications/* /usr/share/applications/
sudo cp -r ./usr/share/icons/hicolor/192x192/apps/* /usr/share/icons/hicolor/192x192/apps/
fi

sudo zenity --info --text “Applicaton Backup installed successfully!”
fi

exit 0[/CODE]

Edit: Da zlo bude grdje i konfuznije, kad pokrenem gksu-properties vidim da kod mene gksu pokrece sudo a ne su!? O svasta. Zasto onda ne radi

sudo chown -R $USER:$USER $HOME/Backup Settings/

jos sam sa ga sa --preserve-env naterao da upamti $HOME i $USER. Ospice dobijam…

E, ali problem je u tome sto sa -k (to jest --preserve-env) on upamti $HOME ali $USER je i dalje root…

No jos uvek ne odustajem :slight_smile: