[Megoldva] Link programra nem müködik

 ( develru | 2013. augusztus 4., vasárnap - 14:23 )

Van a home könyvtáramban egy program, azt szeretnem, hogy parancssorból az elérési útvonal megadása nélkül tudjam indítani. Ha ubuntu alatt csinálok egy szoft linket a /usr/bin-be akkor működik. Ugyanez viszont nem működik opensuse (12.3) alatt.

Mi helyes eljárás opensusen?

Update: http://hup.hu/node/126008#comment-1632015

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Két tippem van:
1. Valamiért a SuSE noexec opcióval mountolja a home-odat
2. SElinux szól bele, azzal viszont nem tudom, mit lehetne kezdeni.
Sajnos mióta a Novell kezébe került a SuSE, azóta kerülöm nagy ívben, szóval ezek tényleg csak tippek.

Jelenlegi megoldásnak készítettem egy aliast a bashrc-ben.

És így működik?
Akkor a mount -o noexec kicsukható.
Milyen változat? 32 v. 64 bit? (felraknám virtualboxba, hogy kipróbáljam én is)
És milyen fájlrendszer van rajta? Btrfs vagy ext4?

Igen ez működik. Opensuse 12.3 64 bit, nem hiszem, hogy számítana, de mindenféle csili-vili DE helyett openbox-ot használok. A fájlrendszer pedig ext4.

Amiről olvastam, hogy nem szereti ha a program egy másik partíción van, mint a link, de ha a programot átmásolom /opt-ba, és onnan linkelem, akkor sem működik.

Ha symlinket használsz, akkor mennie kell.
Hardlinket nem lehet partíciók között, mert az csak az inode-okkal machinál.
A symlink meg letesz egy bejegyzést az általad megadott útvonallal.

Nálam működik, openSUSE 12.3 x86-64, leforgattam egy hello world-öt, aztán sudo ln -s /home/****/a.out /usr/bin/hellow, sudo chmod o+x /usr/bin/hellow, hellow.

BlackY

Pont ez ami nálam nem megy, és nem értem miért. De csak ezért nem fogom az egészet újra rakni. És egyébként több programmal is próbáltam, szóval nem egyedi eset.

Ír valamit, amikor nem működik? Még ha noexec is a partíció, ahol van, ha teljes útvonallal megpróbálod elindítani a programot, akkor is legalább egy Permission denied-ot kapnod kéne.

#mount | grep /windows/C
/dev/sdb3 on /windows/C type fuseblk (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096)
#sudo ln -s /windows/C/a.out /usr/bin/hellow2
#/usr/bin/hello /* <- ez még az előző hozzászólásomból maradt itt */
Hello World!
#/usr/bin/hellow2
bash: /usr/bin/hellow2: Engedély megtagadva
#ls -la /usr/bin | grep hellow
lrwxrwxrwx 1 root root 20 aug 4 20.31 hellow -> /home/*****/a.out
lrwxrwxrwx 1 root root 16 aug 6 10.58 hellow2 -> /windows/C/a.out

BlackY

Én a ~/bin-be szoktam rámolgatni, úgy simán megy.

--
openSUSE 12.2 x86_64

Ez sem megy, de mivel az /usr/bin benne van a PATH-ban, így ott is meg kellene találnia.

A következő volt a probléma, elég kezdő problémának tűnik, de nem emlékszem, hogy ez ne működött volna Ubuntun.

Ahogy először így csináltam a linket:
ln -s binary /usr/bin

Aztán így a működőkepés:
ln -s /home/develru/dir/binary /usr/bin

Javítsatok ki ha tévedek, de más disztrók alatt ez nem így van. Miért kell explicit megadni a teljes elérési utat?

Én mindig teljes elérési utat adok meg, nem gondolkodtam még el a dolgon, viszont most kipróbáltam.
Ahány gépem van, mindegyiken így működik a symlink létrehozása. Még openbsd-n is. :)

Működik az így is, úgy is, csak mást mutat így, és mást úgy (speciális esetben lehet ugyanaz a kettő).

A relatív megadás a relokálhatóság (akár komplett könyvtáraké) fegyvertárának lényeges eleme. Érdemes számolni vele, mielőtt az ember mountonmount csomóvá tenné a fájlrendszerét.

Akkor erre rosszul emlékeztem, de most akkor megjegyzem.

"A következő volt a probléma, elég kezdő problémának tűnik, de nem emlékszem, hogy ez ne működött volna Ubuntun.

Ahogy először így csináltam a linket:
ln -s binary /usr/bin"

Biztosan nem működött (vagyis nem így hoztad létre a szimlinket), ui. a szimlink betű szerint azt tartalmazza, ami a linknév előtt szerepel. Esetedben ez azt jelentené, hogy van egy /usr/bin/binary nevű linked, ami erre mutat: binary - vagyis a saját könyvtárában lévő, binary nevű fájlra, magyarul önmagára. Szingularitásnak még nem az igazi, szkripthívásnak már nem az.

- o -

Egyébként a *nix etikett ősi oláh szokásnak tartja a /usr/bin magáncélú turkálását, amitől sorvad a gerinc, és vakságot okoz. Ha felteszel egy csomagod, ami tartalmaz egy /usr/bin/binary nevű fájlt, és furcsán kezd viselkedni a "szkripted", be fogod látni az illemszabályok jelentőségét.

Ha nem felel meg se a PATH-ban szereplő könyvtárban elhelyezés, sem ~/binary néven hívás, és egyéb konformista megoldások, akkor a /usr/local/bin lehet a kijelölt hulladéklerakó hely.

Akkor átrakom a /usr/local/bin-be.

De ha van ötleted a probléma jobb megoldására, minden kreatív kritikát szívesen fogadok.

Szóval van egy program, amit akár parancssorból kell indítani, akár egy 3. program indít, egyszerűen csak az alkalmazás nevével ("binary") akarja indítani.

Parancssoros megoldás lehet az alias. Globálisabb a PATH-ban való elhelyezés. De mindkettő konfliktust okoz, (ill. PATH esetén nem az elvárt program indul)ugyanúgy mint a /usr/bin esetén.