mc - "tehnikai" segítség kellene

 ( malvin | 2016. november 9., szerda - 12:34 )

Adott egy Linux alapú média box.
Tettem rá egy Morton Commandert: a /opt-ba került, (temérdek directory és szimbolikus link).

Átmásoltam cp -r -el a /hdd-re: a /hdd/opt/bin/mc így is működött.
Ezután lecseréltem a rendszert:
Linux uniboxhde 3.14.21 #1 SMP Thu Jul 7 19:05:59 CEST 2016 mips GNU/Linux
aminek következtében természetesen az /opt megszűnt.

És így már nem működik a /hdd/opt/bin/mc : No such file or directory.
Visszamásolva ismétműködik.

Hogyan lehetne "kicsikarni belőle", hogy mi a baja, mert ha már ott van a /hdd-n, akkor miért is foglalná a Flash-t.

u.i. gondolom valamelyik link nem relatív (../) hanem abszolút (/), piszok macerás lenne végignézni.

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ő.

OFF:
Ma nem csak az USA-ban történnek furcsa dolgok.., kicsit mintha itt is álomvilág lenne
ON:
Morton Commander, ezt még nem hallottam:-)
Leírnád kicsit érthetőbben, mit szeretnél? Tettem rá egy mc-t a /opt-ba, és lecseréltem a rendszert... Linux-nál azért lehet, hogy ennek vannak kötöttségei. Ahogy indítottál, nem vagyok benne biztos, hogy ezt figyelembe vetted. Miért természetes, hogy megszűnt a /opt? Mit másoltál vissza, hova?
Debian hogy jön a képbe?

akkor "visszafelé" válaszolva:

nem igazán foglalkozom UNIX-okkal, Linux-okkal, (inkább csak "használom" őket), de azt sajnos már tapasztaltam, hogy ami az egyik rendszerben "így van", az a másikban meg "másként". És miután az uname azt írta ki, hogy "GNU/Linux", és ez az egyetlen topic, aminek a nevében ez szerepel, ezért itt kérdeztem.

Mivel az új box sw. újra flash-elte a box-ot, értelemszerűen megszűnt a /opt, ami az mc installálásakkor keletkezett (nem "én tettem" az /opt-ba, hame installáláskor "került az /opt-ba". És ha tudsz valami "kötöttségről", ami szerint egy opcionális sw. csak a root-ban lévő opt directory-ból tud futni, azt megoszthanád velem.

A commander nevét "én álmodtam", (nekem "határozottan rémlett", hogy volt/van ilyen):
Norton Commander, Volkov Commander, GNOME Commander, Midnight Commander, ...
Valószínűleg a Norton (nc)-ből és a Midnight (mc)-ből "alkottam" a Morton-t.
De ez a problémán nem változtat.

Én a mount/felcsatolás koncepciójának elolvasását javasolnám. Magyarul is találsz erre bőven leírást.
És ha már arra jársz, olvass utána az /etc/fstab nevű fájl funkciójának is.

Ha jól tippelek, akkor erre célzol:
/etc/fstab options:
exec - Engedélyezi a bináris fájlok végrehajtását a fájlrendszeren.
noexec - Tiltja a bináris fájlok végrehajtását a fájlrendszeren.

nos, cat /etc/fstab
rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbdevfs /proc/bus/usb usbdevfs noauto 0 0
tmpfs /var/volatile tmpfs defaults 0 0
usbfs /proc/bus/usb usbfs defaults 0 0

én nem látok sem exec-et, sem noexec-et (igaz /hdd-t sem!), de "szerencsére" a mount-ban benne van
/dev/sda1 on /media/hdd type ext4 (rw,relatime,data=ordered)

De ha erről lenne szó, akkor a /hdd/opt/bin/mc (/hdd -> media/hdd) akkor sem működne, ha az /opt a root-ban is benne van, mivel a
ls -l /hdd/opt/bin
-rwxr-xr-x 1 root root 1032536 Feb 18 2012 mc
már alapból nem hajtódna végre.
Márpedig így megy!

Attól tartok, én is eljutottam oda, hogy nem értem a leírásodat.
Konkrétan a /hdd/opt/bin/mc-ről a topicindítóban azt írod, hogy nincs, itt meg hogy van.

Mindegy, feltételezve az utóbbit, és azt, hogy egyáltalán nincs /opt a rendszereden, viszont az mc úgy van fordítva, hogy ott akar élni, készíts egy szimlinket így:

ln -s /hdd/opt /opt
vagy
ln -s /media/hdd/opt /opt

- Tehát nem Debian-ról van szó ( ott egyébként alap a /opt könyvtár, ezért nem triviális a megszűnése)
- Nem tudjuk, hogy milyen linux van a cuccodon, vagy egyáltalán milyen cucc az..
- Nem tudjuk, hogy installáltad fel az mc-t oda ( felettél találomra egy lefordított csomagot valahogy, fordítottál forrásból, van a boxodon futó linuxhoz készített mc csomag? ) Nem feltétlenül a hely a kötöttség, hanem hogy hogy és mire van fordítva és a lib-eket hol keresi pl.
- Totál nem érthető, mi a /hdd , ez hogy jön a képbe, ezt te csináltad vagy az adott cuccon futó linux-nak valami saját hülyesége? Az install után miért kellett oda másolni az opt tartalmát.
Szóval ez nehéz szülés lesz.., gyanítom.

En eloszor mordor commandernek olvastam kerestem is Sauron-t a mondat vegen aztan elkezdtem elolrol olvasni :D

Szerintem érthető, főleg ha valaki figyelembe veszi, hogy ez egy célrenszer(mediabox), "cél Linux"-al. De még 1x:

Volt a midnight-commander_4.7.0.9-1_mipsel.ipk. Ezt installáltam.
Ennek következtében keletkezett a rendszerben a /opt (addig nem volt).

Amikor le szándékoztam cserélni a rendszert, gondoltam, hogy az mc remélhetőleg az új rendszerben is fog működni (egyszer már simán átmásoltam egy totál másmilyen box-ra (igaz, ott is a /opt-ra), és működött). Szóval, lementettem a HDD-re: /dev/sda1, ami mountolva van a /media/hdd-re, és amire még mutat egy /hdd link is: így lett a /hdd/oppt.

Tehát a /hdd/opt/bin/mc létezik.
A "No such file or directory" (azt gondoltam ezzel a "tradicionális" unix hibajelzéssel már mindenki találkozott), ugyebár nem azt jelenti, hogy "nincs ey a file", hanem csak annyit, hogy "valami probléma van": nincs exec attribútum, valahol valamilyen library hiányzik, stb. ...

Ezután jött az az 5let: maradjon csak az mc a HDD-n.
Na ez az ami nem működik.
De szerintem megoldható. Én is arra gondoltam, hogy ha nem az /opt-ban van, akkor valamit nem ott keres ahol az van. Pontosabban a /opt-ban keresi, és nem a /hdd/opt-ban.
Így a kérdésem úgy is feltehető: hogyan lehet lehetőleg egysyerűen megállapítani, hogy mi ez a valami? (mondjuk valamilyen eszközzel, amit én nem ismerek).

Mert volna pl. egy "faváágó" módszer: egyenként kitörlök mindent ay /opt-ból, és amikor a /hdd/opt/bin/mc nem szólal meg (No such file or directory), akkor megvan.
De azt gondoltam, van ilyesmire kifinomultabb módszer.

Itt dupla p van a könyvtár névben, csak itt írtad el?

" így lett a /hdd/oppt."

Csak itt. És remélem csak 1x. (kb. 100x jól írtam)
A cp -r /opt /hdd nem is tud hibázni!

Hát, ennyi nehézség esetén én szerintem azt mondanám, hogy hagyom azt az mc-t, ami nem megy, és inkább újra telepíteném a csomagból, menjen fel az /opt alá és kész. Nem tudjuk, milyen rendszer ez, és mi van a csomagban, de a telepítés nem feltétlenül csak a /opt alá firkál és nem feltétlenül csak új fájlokat másol a rendszeredre. Simán lehet, hogy valahol máshol valami hiányzik.

Ha azon a fájlrendszeren kevés a helyed, akkor a telepítés után átmásolnám a hdd-re, és ahogy fent már írták, létrehoznék egy symlinket, hogy úgy tűnjék, mintha továbbra is a /opt alatt lenne.
Vagy esetleg a /hdd/opt könyvtárat felmountolnám a /opt alá.

akkor megint nem fogalmaztam érthetően:
nem kell újra telepíteni: ha a az /opt-ot visszaállítom, (visszamásolom a /hdd/opt-ot /opt-ként, akkor működik.

Az /opt -> /hdd/opt "ígéretesnek" tűnik, de azért már q...va kíváncsi vagyok, hogy az mc miért csak az /opt-ból működik.

u.i. bejött :)

Mert a fordításkor úgy drótozták össze.

Már szinte érteni vélem a dolgot!
Korábban volt az /opt fájlrendszerben szétszórva egy mc, most meg ugyanez /hdd/opt alatt van, és így nem indul a /hdd/opt/bin/mc
Valóban, most jöhet a barbatrükk:

cd /
test -d ./opt && echo 'Előbb tüntetsd el a /opt-ot'
ln -s hdd/opt ./opt

az első sorra magam is "rájöttem", :)
a másodikat meg már más is mondta, és meg is megcsináltam: ld. az u.i.-ot az előző hsz.-ben.

De a kérdésem továbbra is áll:
van a unix/linux-ban valami normális módszer annak megállapítására, hogy mi is hiányzik, amikor a shell csak annyit mond: No such file or directory?

strace -p PID

Ahol a PID a process id, amit akarsz debug-olni, pld a Midnight Commander pid-je.
Itt latszodnak az eleresi utak, hogy mit probal megnyitni.

Szerintem te egyszerubb megoldast keresel ennel.

Sakk-matt,
KaTT :)

Ha tényeg a shell írja ki, akkor az pont azt jelenti, hogy nincs ott az adott fájl (vagy könyvtár).

Ha jól értem, konkrétan meghívtad azt a bináris mc-t azzal a teljes elérési úttal, ahol az volt, mire kiírta "a shell", hogy nincs ott "valami".
Stimmel?
Ha igen, akkor a kiírást elkövető nem a shell volt, hanem éppen az a bináris.

Hogy mit keresett, és nem talált, azt ki lehet (vagy nem) következtetni azzal, ha a programodat így hívod meg:

strace /bla/bla/bla/mc
vagy
ltrace /bla/bla/bla/mc

Rengeteg borzalmat fog kiírni a std hibacsatornára, amit érdemes fájlba irányítani és elemezni. Az elemzés arról szól, hogy a borzalomban a vége felől előre haladva olyan részt találni, ami sikertelen fájlnyitást/keresést sejtet.

Kérdés, hogy arra a boxra fel tudod-e tenni ezeket az eszközöket.

Itt kérdőjeles a hasznossága, de általános esetben az
ldd /bla/bla/bla/program
sokat mesél arról, hogy a hívott binárisnak milyen rutinkönyvtárak kellenének a futáshoz; melyiket hol találja és melyiket sehol.

Valami ilyesmire gondoltam (volna!). Mint írtam, leginkább csak "használom" a rendszert, ezért ezt a strace/ltrace lehetőséget nem ismertem.

A volna meg azt jelenti, hogy ebben a spéci Linux-ban ezek sajnos nincsenek (Command not found), de ha legközelebb újra bootolom a PC-met, akkor kipróbálom egy feltehetően teljesebb értékű UBUNTU-ban.
Vagy arra is "fel kell tenni"?

Köszi a válaszokat.

Nagyon szívesen!

És igen, fel kell tenni, mert nem olyan csomag részei, amelyek nélkül ne létezhetne a rendszer, ezért ha nem kéred célirányosan, nem kerülnek fel.

Viszont nem agysebészet hozzájuk jutni:

apt-get install strace ltrace

ha látni akarod, hogy mivel próbálkozott a shell, akkor:
set +x

Aztán itt van még ez:
ldd /hdd/opt/bin/mc