Pypy, Cython, mingw-w64, static libpython3.4m.a.

Mój powrót do Pythona po kilkuletniej przerwie skończył się fascynacją. Po pierwsze Pypy – ale to szybkie i całkowicie zgodne z Pythonem! Po drugie Cython (opcja –embed) szok, udało mi się skompilować statyczne binarki skryptu aconv.py dla Linuksa i Windows (walczę jeszcze trochę z kodowaniem konsoli cmd w Windows, bo tu oczywiście są niemałe problemy z 16bit kodowaniem – muszę zrozumieć PyUnicode w Pythonie i Cythonie). Po trzecie: konfiguracja i działanie MSYS z mingw i mingw-w64 – niesamowity toolchain (instalowałem z win-builds), wszystko działa jak na Linuksie, trzeba tylko skonfigurować /c/mingw/msys/1.0/etc/fstab, czyli dodać c:\mingw /mingw, uruchamiać C:\MinGW\msys\1.0>msys.bat a potem konfigurację mingw-w64 (uwaga na kropkę) . /c/mingw/msys/1.0/opt/windows_32/bin/win-builds-switch 32 najlepiej dodać do ~/.bash_profile, ścieżka do gcc z mingw-w64 i bibliotek będzie się sama ustawiać po odpaleniu msys.bat.

Kompilację Pythona 3.4.2 ze statyczną i dynamiczną biblioteką libpython3.4m udostępniłem tutaj). Zbudowany po nałożeniu łatek z repo mingw-w64 i wykonaniu autoreconf-2.68.

W powyższym zipie zmodyfikowałem python/include/pyconfig.h w taki sposób, aby po dodaniu do wywołania gcc opcji -DPy_ENABLE_STATIC -static linkował z libpython3.4m.a, a bez tych opcji z libpython3.4m.dll:

#if defined Py_ENABLE_STATIC
#undef Py_ENABLE_SHARED
#else
#define Py_ENABLE_SHARED 1
#endif

PS: Aby interaktywny interpreter Pythona z tej kompilacji zadziałał, trzeba uruchomić polecenie:
. /c/mingw/msys/1.0/opt/windows_32/bin/win-builds-switch 32 w przeciwnym razie będzie mu brakować bibliotek.

Fuse / Hatari / Atari800 / Vice / Snes9x-gtk z padem na USB.

Testowałem ostatnio Fuse (emulator ZX Spectrum), Hatari (emulator ST), Atari800,  Vice (emulator Commodore) i Snes9x-gtk/zsnes (emulatory Super Nintendo). Ku mojemu zdziwieniu we wszystkich tych emulatorach idealnie działa pad Speedlink Thunderstrike, ktory jest przez system widziany jako standardowy joy, dostępny przez /dev/input/js0.

W Fuse, w opcjach Peripherials – > General włączamy interfejs Kempston, a potem w ustawieniach joysticka, wystarczy wybrać typ joya Kempston.

Fuse zasługuje na osobną wzmiankę, bo jest to chyba najlepszy emulator dla PC jaki widziałem do tej pory. Nie działała mi opcja –full-screen, pomimo że binarka fuse była zlinkowana z SDL. Okazało się, że aby fuse używał SDL do gui, trzeba kompilować z –with-sdl. Po dodaniu tej opcji program traci menu okienkowe, pojawia się za to menu ekranowe w stylu Spectrum 128K jak na powyższych screenach, obsługiwane za pomocą joysticka :).

Tak swoją drogą jakby ktoś miał zbędnego spectruma, chętnie przygarnę.

Atari800 dziala out-of-the-box (co mnie chyba najbardziej zdziwilo i ucieszylo), a w Hatari w ustawieniach joya trzeba wybrać „use real joystick”, emulator sam wykrywa pada.

Emulatory to dobra rzecz. Np jak tv jest okupowany przez żonę lub dzieci.

Slacko.

Zainstalowałem dziś na próbę na pendrajwie Slacko Puppy. Jak sama nazwa wskazuje – Puppy na bazie Slackware (i zgodny z nim). Oczywiście ma toto działać na Eee PC 901.

Działa sprytnie. Cały live-obraz zajmuje 160MB i Slacko ładuje go w całości do pamięci. Można dodawać oprogramowanie, można stworzyć własne iso na podstawie tego co w pamięci. Chyba się zaprzyjaźnimy.

Slacko_2014-08-16_021453

Jeden zauważony problem: firmware do karty wifi Ralink RT2860 nie może być dowiązaniem symbolicznym do /lib/modules/all-firmware/rt2x00/lib/firmware/rt2860.bin jak to sie zwykle robi. Trzeba go skopiować do /lib/firmware inaczej moduł go nie załaduje. Opis problemu znalazłem na forum Ubuntu (wpis sprzed 2 lat) więc to pewnie przypadłość kernela 3.4.82. W Archu ta karta działa a firmware jest podlinkowany jak wyżej.

Małe, kompletne distro w sam raz dla Eee PC

Effectus na starych linuksach.

Zdarza mi się ostatnio testować i kompilować (na prośbę przesympatycznego autora) Effectusa, czyli cross compiler Atari Action! na PC dla Linuksa.

Zastanawiałem się jak wypada kompatybilność statycznych binarek, które kompiluje na Archu. No i wg moich ustaleń na wszystkim co ma glibc w wersji 2 powinno działać.
Testy przeprowadziłem na dystrybucji którą znam i której kiedyś używałem: Slackware w wersjach 1.0.1, 2.2.1 i 7.0.

Wybór był nieprzypadkowy. Na początku myślałem, że wystarczy w kernelu obsługa formatu binarnego ELF. Slackware 1.0.1 z kernelem 0.99.12 jeszcze tego formatu nie obsługiwał. Kolejny, czyli Slackware 2.2.1 miał już kernel 1.2.1 czyli ELF na 100% obsługiwany. Segfaulty sugerowały, że to jednak libc się gryzie. Kiedyś dawno zrobiłem taki eksperyment na potrzeby dyskusji o ABI kernela i moje programiki działały z kernelem 0.1, ale one nie używały libc, tylko wprost funkcje os-u.

Pierwszym Slackiem z glibc2 była wersja 7, od ktorej zaczęła się moja poważniejsza przygoda z Linuksem. Rok 1999, full-wypas kernel 2.2. No i jak się spodziewałem, binarki effectusa i madsa zadziałały bez problemu.

A tak swoją drogą instalacja Linuksa z 1993 w 2014 to ciekawe doświadczenie. Qemu nie jest w stanie zaemulować kontrolera scsi, czy też obsługiwanego 20 lat temu CD romu, ale to nie problem. Można stworzyć obraz dysku w pliku (dd) i w nim utworzyć system plików, np msdos. W ten sposób stworzyłem dysk zawierający wszystkie serie pakietow (można taki obraz zamontować z -o loop=/dev/loop0), który potem montowałem w trakcie instalacji do /root/dos, a instalator pozwala na instalację pakietów ze wskazanego, wcześniej zamontowanego nośnika. Wygodne to i szybkie rozwiązanie, a dziala chyba we wszystkich wersjach Slackware.

Niesamowite jest to, jak przyjemnym w użytkowaniu był Slackware już w 93 roku ubiegłego stulecia…

A działanie binarek effectusa/madsa  na dystrybucji z 1999 roku, czyli sprzed 15 lat daje do myślenia.

Guitarix.

Kilka lat minęło i przy dzisiejszym podejściu do Guitarix na Eeepc kopara poleciała mi na ziemię. Cool, fajne presety, których kiedyś nie było i to działa na takim małym komputerku… Testowałem jak zwykle z wysłużonym i niezawodnym M-audio Fast Track USB.

Przeniesienie binarek do /usr/bin

Dziś miałem dzień litości nad moją instalacją Archa. Najpierw przywróciłem mój ulubiony procesor efektów gitarowych do działania – w jack2 wyjście wineasio trafiało niewiadomo gdzie i pomimo tego że procesor pokazywał poziomy na wyjściu, w głośnikach była cisza. Przy okazji dowiedziałem się, że:

  • jack i jack2 współistnieją niezależnie i mają dwie osobne grupy developerów,
  • jack działa lepiej w mojej konfiguracji do gitary (nie ma problemu z auto-połączeniem wyjścia),
  • wineasio z git, pewnie po wywaleniu sterownika jack z wine, poszło ciekawą ścieżką.

Wineasio takes advantage of a new function in the jack api, which lets jack create the wine callback thread. This results in a much cleaner callback without having to wait on semaphores, requires jack1 (0.117.0) or jack2 (1.9.4) or later.

The default sample type has been changed to use ASIOSTFloat32LSB, which is the native format of jack, and allows the removal of the sample rate conversion from the processing callback.

Wineasio can now slave to the jack transport.

Druga niespodzianka: Dev team Archa postanowił poprzenosić binarki z dziwnych lokalizacji pochodzących z zamierzchłych czasów (kiedy w pierwszym etapie startu kernela pewne narzędzia musiały być na /) do /usr/bin:

greblus@greblus:/usr/sbin$ ls -l /usr/sbin
lrwxrwxrwx 1 root root 3 05-31 20:40 /usr/sbin -> bin
greblus@greblus$ ls -l /bin
lrwxrwxrwx 1 root root 7 05-31 20:40 /bin -> usr/bin
greblus@greblus$ ls -l /lib
lrwxrwxrwx 1 root root 7 05-31 20:40 /lib -> usr/lib

Pogratulować. Wreszcie ktoś się odważył zrobić porządek z tą zaszłością.

Przeniesienie istniejącej instalacji na pendrive.

Taką miałem potrzebę. Ostatnimi czasy devowie Archa postanowili, że nowe obrazy instalacyjne mojej ulubionej dystrybucji zostaną zmienione. Po pierwsze nie ma już skryptów instalatora w dialogu. Wszystkie operacje podczas instalacji wykonujemy ręcznie, jak za starych dobrych czasów (i to mi się akurat podoba), jednak nie ma możliwości instalacji base systemu z płytki, wszystkie pakiety muszą być ściągnięte z internetu. Mój net akurat trochę kiepski jest, więc postanowiłem skopiować /root z laptopa, a potem dodać bootloader. Z grubem2 sobie nie poradziłem, ale na ten sam problem napotkałem przy użyciu syslinuxa. Dysk usb nie był widziany bo initramfs-linux standardowo nie ma obsługi USB. Dodanie „usb” do HOOKS w /etc/mkinitcpio.conf i wygenerowanie ramdysków za pomocą: mkinitcpio -p linux załatwia sprawę.

Pozostałem przy syslinux z uwagi na minimalizm i przejrzystość konfiguracji. /boot/syslinux/syslinux.cfg dla mojego pendrive’a wygląda tak:

PROMPT 1

TIMEOUT 2
DEFAULT arch

LABEL arch
LINUX ../vmlinuz-linux
APPEND root=UUID=3cf259d1-72ba-4b9a-9b46-02fdf356f9eb ro quiet thradirqs
INITRD ../initramfs-linux.img

Jakby ktoś się zastanawiał skąd wziąć UUID:  blkid

threadirqs od dawna już używam do gitarowania. Wraz z rtirq daje 5ms opóźnienie bez konieczności kompilowania własnego kernela RT.

Grub2 loopback

Super rzecz. Dodałem sobie do Gruba dwie pozycje: iso Ubuntu i Archa. Pierwsze w celach poznawczych, drugie jako rescue cd:

/etc/grub.d/12_isos:

#!/bin/bash
echo „Adding ISO images…” >&2
cat << EOF
menuentry ‚Ubuntu Loop ISO’ {
set root=(hd0,7)
loopback loop /greblus/isos/ubuntu-12.10-desktop-i386.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/greblus/isos/ubuntu-12.10-desktop-i386.iso noprompt noeject splash
initrd (loop)/casper/initrd.lz
}
menuentry ‚Arch Loop ISO’ {
loopback loop (hd0,7)/greblus/isos/archlinux-2012.11.01-dual.iso
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201211 img_dev=/dev/sda7 img_loop=/greblus/isos/archlinux-2012.11.01-dual.iso earlymodules=loop
initrd (loop)/arch/boot/x86_64/archiso.img
}
EOF

grub-mkconfig -o /boot/grub/grub.cfg i gotowe…

Openbox – powrót do źródeł.

Urlop mi się powoli kończy i jak za starych czasów postanowiłem trochę pokombinować. Okazuje się, że da się w 2012 roku wyrzeźbić użyteczną konfigurację zajmującą niewiele pamięci.

Fajny ten Openbox, głównie dlatego, że jest minimalistyczny i nic w nim nie ma, więc można sobie go dostosować wg potrzeb. Zostało mi jeszcze kilka kwestii: postanowiłem uruchamiać X-y i openboxa bez gdm, bezpośrednio przez systemd – skutek: polkit nie pozwala się wylogować/suspendować z gui (zamykanie klapy działa, reset/halt póki co wymaga odpalenia Alt+F2, lub terminala).

Poszukuję też jakiegoś fajnego minimalistycznego playera audio do dużej ilości albumów… Nie ma w tej dziedzinie rewelacji.