Thread View: pl.comp.lang.perl
2 messages
2 total messages
Started by Jarosław Lubczyński
Tue, 15 Nov 2011 14:30
Uruchamianie archiwów PAR - sposób rozpakowywania
Author: Jarosław Lubczyński
Date: Tue, 15 Nov 2011 14:30
Date: Tue, 15 Nov 2011 14:30
49 lines
3113 bytes
3113 bytes
Rozprowadzam swoje aplikacje w postaci archiwów PAR (z filtrem Crypto -
o ile ta informacja ma tu jakieś znaczenie). Metoda działa niemal bez
zarzutu, ale z drobnym wyjątkiem. Jak działanie sPARowanej (sorki ;) )
aplikacji zostanie przerwane (np. przez Ctrl-C) w trakcie rozpakowywania
archiwum, to taki program już się więcej nie uruchomi (no chyba, że
ręcznie usunę katalog /tmp/par-<user>/cache-<coś_tam> związany z
konkretnym archiwum). Pytanie brzmi: jak takiego zjawiska uniknąć?
Widzę dwie potencjalne możliwości:
1. Przejąć handlery sygnałów TERM lub/i INT (pewno jeszcze __DIE__, a
może i innych...) skryptu rozpakowującego (o ile to skrypt a nie kod
binarny...) i w ich obsłudze usuwać katalog, do którego archiwum się
rozpakowuje;
2. Opakować procedurę rozpakowującą tak by archiwum:
a) sprawdzało istnienie katalogu roboczego - jak dotąd;
b) rozpakowywało się do katalogu o innej nazwie niż wskazana;
c) na końcu rozpakowywania wykonywało rename na właściwą nazwę;
d) i dopiero wtedy uruchamiało właściwą aplikację.
Druga metoda wygląda na prostszą w realizacji - o ile znajdę właściwy
fragment kodu. Na razie próbuję grzebać po źródłach PAR::Packer'a ale w
tym wypadku jest to robota bardziej dla wróżki :).
Pierwsza metoda z kolei umożliwi posprzątanie po niedokończonym
rozpakowywaniu - ale póki co mam problem jak wyżej - nie znalazłem
modułu rozpakowującego, chociaż dopiero niedawno rozpocząłem
poszukiwania :).
Być może optymalne byłoby połączenie obydwu metod. W CPANie nie
znalazłem (nie potrafiłem się zapytać?) gotowego rozwiązania. Jest?
O uruchamianiu archiwów PAR 'w miejscu' (bez rozpakowywania) nawet nie
marzę, bo wymagałoby to - jak sadzę - sporego wsparcia ze strony systemu:
1. glibc (czytanie plików zanurzonych wewnątrz innych plików);
2. ld (dla zanurzonych analogicznie shared libs);
3. perl'a (uruchamianie zanurzonych modułów).
A może jednak się mylę i takie cuda są możliwe?
--
Pozdrawiam
Jarek Lubczyński
(eljot<NULL>90125 at gmail dot com)
Nawiasy trójkątne z zawartością zbędne są
There are 10 kinds of people:
Those who understand binary and those who don't
Re: Uruchamianie archiwów PAR - sposób rozpakowywania
Author: Jarosław Lubczyński
Date: Tue, 15 Nov 2011 16:30
Date: Tue, 15 Nov 2011 16:30
29 lines
2133 bytes
2133 bytes
W dniu 2011-11-15 15:30, Jarosław Lubczyński pisze: > [...] > > O uruchamianiu archiwów PAR 'w miejscu' (bez rozpakowywania) nawet nie > marzę, bo wymagałoby to - jak sadzę - sporego wsparcia ze strony systemu: > > 1. glibc (czytanie plików zanurzonych wewnątrz innych plików); > 2. ld (dla zanurzonych analogicznie shared libs); > 3. perl'a (uruchamianie zanurzonych modułów). > > A może jednak się mylę i takie cuda są możliwe? > Hmmm, po dłuższym namyśle wydaje misie, że wystarczyłoby wsparcie od strony glibc i brak oporów ze strony ld i perl'a. Jeżeli fopen (a potem fread, fseek, fclose - ale nie fwrite oczywiście) dałoby się wykonać na '/path/zip_file/file_in_zip' gdzie 'file_in_zip' oznaczałoby nazwę pliku spakowanego wewnątrz archiwum zip o nazwie '/path/zip_file' a ld i perl nie wnikałyby w to, co otwierają, tylko dalsza akcja zależna by była od zwracanego rezultatu z fopen(), to być może wystarczyłoby podłożenie własnego modułu .o do obsługi plików. Ktoś słyszał o takim rozwiązaniu? -- Pozdrawiam Jarek Lubczyński There are 10 kinds of people: Those who understand binary and those who don't
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads