e-Deklaracje Linux

09 Apr 2012 09:57

Z jakiegoś powodu Ministerstwo Finansów zdecydowało się wypuścić swoją aplikację do rozliczania PIT-u. To dobry pomysł, ale technologicznie trochę nietrafiony, bo zdecydowali się skorzystać ze wszystkiego co daje Adobe: Flash (instalator), AIR (aplikacja), Reader (w sumie nie wiadomo do czego, do jakiegoś podpisywania dokumentów, czy czegoś w tym stylu, w każdym razie dziwne rozwiązanie Adobe).

Instalator na stronie Ministerstwa (aplet Flash) działał nawet całkiem nieźle jakiś czas temu na Ubuntu 11.10. U rodziców zainstalował się również dobrze. Instalował po kolei, najpierw AIR-a, potem aplikację. Adobe Readera trzeba było zainstalować samemu (no ale mamy to jako pakiet w Ubuntu — w repozytorium partner, więc w miarę spoko).

Dzisiaj zdecydowałem się zainstalować owy program na Xubuntu 12.04. Instalator dostępny przez WWW zawiódł. Nie potrafił zainstalować AIR-a. Po ściągnięciu (co trochę trwało) pisze, że ściąganie nie powiodło się i, żeby spróbować ponownie. No to próbuję, ale od razu (bez próby ściągania ponownie) pokazuje ten sam błąd. Wyczyściłem różne katalogi, które wydawały mi się powiązane z tym, odpaliłem od nowa przeglądarkę, uruchamiam instalator i dzieje się to samo.

Zajęło mi to dość długo, bo w międzyczasie wtyczka Flash (która o dziwo w sumie od dłuższego działa spoko) co kilka minut ulegała awarii.

Koniec końców nie udało mi się zainstalować "automatycznie" e-deklaracji. Próbuję manualnie. Ze strony ministerstwa wchodzę na stronę Get AIR, gdzie od razu wita mnie tekst, że na Linuksa nie ma Adobe AIR i mogę tylko sobie ściągnąć jakieś stare wersje. No to szukam, znalazłem wersję 2.6. Uruchamiam ściągnięty plik (instalator). Po zaakceptowaniu, pojawia się błąd: nie mam zainstalowanego GNOME keyringa ani KDE Walleta. No faktycznie nie używam, no to szybciutko chcę zainstalować pakiet gnome-keyring, ale się okazuje, że on już jest zainstalowany. W desperacji próbuję zainstalować KDE Wallet (co oznaczało instalację pakietu kde-runtime), ale to jak można się domyślić też nie pomogło. Podobnie jak ustawienie w XFCE, żeby uruchamiał usługi KDE i GNOME przy starcie.

Poszukiwania w Internecie doprowadziły mnie do pliku Deb z Adobe AIR:

http://airdownload.adobe.com/air/lin/download/latest/adobeair.deb

(czemu nie było tego na stronie Adobe AIR?). Instalacja przez dpkg przebiegła bez problemów, natomiast ważne będzie za moment to, że jest to AIR-a wersja 32-bitowa.

Ze stony ministerstwa ściągnąłem plik aplikacji AIR i spróbowałem go instalować. Okazuje się, że jest to tak proste jak dwukrotne kliknięcie ikonki. Faktycznie pojawia się instalator, pyta się o lokalizacje instalowanego programu, coś tam rozpakowuje i pokazuje błąd o numerze 1 (i żadnego wyjścia diagnostycznego). Próbuję uruchomić to samo z linii komend, ale tam też nie pokazuje się nic.

Zdesperowany uruchamiam instalator przez strace, żeby zobaczyć co konkretnie próbuje zrobić instalator, co go wysypuje, ale w gąszczu milionów wywołań gettimeofday i mprotect ciężko coś znaleźć. Nawet po odgrepowaniu tych śmieciowych linii nie ma nic konkretnego. A może? Znalazłem coś. Log aplikacji instalatora. Zaglądam szybko do niego, ale dużo ciekawego się nie dowiedziałem. Próbuję różnych przełączników instalatora AIR (okazało się, że w katalogu /tmp/air.XXXX są wołania instalatora z przełącznikami), no ale żadnego tropu nie łapię.

Gdzieś w logu znalazłem w końcu, że instalator aplikacji musi być uruchomiony jako root. To już coś. Uruchamiam przez sudo, ale wciąż pojawia się błąd. W logach ciekawa rzecz. Wyjście z dpkg, które narzeka, że adobeair nie jest w wersji przynamnniej 2.0.0.0 (a naprawdę jest zainstalowane w wersji 2.6.0.XXXX). Widać też, że AIR próbuje przez dpkg zainstalować pakiet setup.deb. Po ktrótkim poszukiwaniu znajduję ten plik w jednym z katalogów /tmp/FlashTmp.XXXX. Kopiuję sobie go, żeby nie zniknął i próbuję zainstalować. Ten sam błąd, to w logu, pakiet adobeair w wersji przynajmniej 2.0.0.0 nie zainstalowany. Uruchamiam z przełącznikiem —ignore-dependency=adobeair i po chwili mam zainstalowane e-Deklaracje z linkiem w menu systemowym.

Myślę, że Ministerstwo Finansów ułatwiłoby wszystkim życie, gdyby aplikacja do PIT-ów była w HTML5. Firefox jest na wszystkie systemy, które obecnie "wspierają" i na wiele innych platform.

Comments: 10

Ad Filtering On Adroid Phones

06 Apr 2012 21:44

Recently I installed a CM9-based Ice Cream Sandwitch ROM on my HTC Desire and it's cool, but I found one thing extremely frustrating: the ads. They are everywhere and slow things down. I haven't noticed them before, because I always used AdAway (and AdFree before that), but with this ROM those ad blockers refused to work.

The problem seems to be the /system/etc/hosts file is real file on flash filesystem and if modified it can be only as big as 2 kilobytes, so regular host-based ad-blocking can't be used here. For some reason creating symbolic link to /data also fails.

I though the ad blocking can be done differently — by DNS server. If we can't put much to /etc/hosts file, let's set up a DNS server (say dnsmasq) that reads the hosts-to-be-blocked file and returns 127.0.0.1 for them and act as a proxy-DNS server for every other domain. But there was problem in settings DNS server in Android settings. It seems the ROM has hardcoded OpenDNS servers and you can only override this per each WiFi network. No way to do this for 3G.

But then I found, the ROM comes with iptables executable (possibly from busybox, haven't really checked) and more interestingly iptables-capable kernel. After a bit of trial and error (and Google searching) I found commands to redirect all DNS traffic comming from the phone to one predefined server:

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 87.118.110.215
iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to-destination 87.118.110.215

The shell throws out one-line TODO (implement getprotobyname) errors but this is harmless to us. This is effective untill you flush iptables (with iptables -t nat -F) or reboot the phone.

At first I wanted to set up the ad-blocking DNS server myself, but I said, hey, someone just had to do it. I wasn't wrong, there were at least two relevant Google results for this: AdBarricade and FoolDNS. So you need to choose one and you're set.

But how do you compare those two? I mentioned I used AdAway and AdFree before and their block lists are very good (personal opinion), so I decided to download the hosts file generated by AdAway (it has the option to generate the hosts file anywhere, not just in plain /etc/hosts), shuffle it a bit and for top 1000 hosts check whether AdBarricade or FoolDNS block them. The results were:

FoolDNS (87.118.110.215): 744/1000 hosts blocked
AdBarricade (74.53.155.162): 234/1000 hosts blocked

For our purpose (measure by how many of AdAway-listed hosts are blocked) FoolDNS is a winner. That's why 87.118.110.215 was used in the iptables scripts above.

Once we have our DNS-based iptables-powered ad filtering, we may want to make it persistent. BCM ROM has a script that's called during boot process, it's /etc/boot.d/99bash and we can just append two abovementioned lines to it, to make the boot process run them each time the phone boots.

Comments: 0

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License