Category: Linux


Ve volném čase si přilepšuji tvorbou automatizací pomocí Siemens LOGO! modulů ( PLC ). Po nějaké době jsem měl navrhnout něco menšího a tak jsem chtěl oprášit staré projekty a začít práci. Už to byl rok co jsem něco dělal a od té doby jsem přešel přes 2 reinstalace OS ( Ubuntu 9.10 -> 10.04 -> 10.10 ), takže jsem neměl LOGO!Soft Comfort nainstalovaný. Do rukou se mi dostalo CD s LOGO!Soft v6, takže jsem začal instalaci.

Siemens a pohroma napáchaná na CD

CD obsahovalo v kořeni autorun.ini a start.html. Takže jsem spustil start.html, tam volil Install. Celé slavné instal spočívalo v tom, že se mi „stáhl“ soubor start.bin. Po spuštění souboru mi to zařvalo „./start.bin: 9: /CDROM_Installers/Disk1/InstData/Linux/VM/Setup.bin: not found“, takže jsem se podíval dovnitř a našel jsem :

#!/bin/sh

# CD-ROM-Pfad ueber den Befehl mount ermitteln
cd_path=$(mount | grep "cdfss" | awk '{ print $3; }')

echo $cd_path

$cd_path/CDROM_Installers/Disk1/InstData/Linux/VM/Setup.bin

Bylo jasné, že kámen úrazu byl „grep cdfss“, takže jsem to nahradil iso9660 a dal tomu 2. šanci. Výstup mi vyrazil dech :

adam@adam-K70IO:~/Stažené$ sudo ./start.bin 
[sudo] password for adam: 
/media/LOGOCOMFORT
./start.bin: 9: /media/LOGOCOMFORT/CDROM_Installers/Disk1/InstData/Linux/VM/Setup.bin: Permission denied

WTF ? Jaká větší práva by si přál? Fajn, řekl jsem si a spustil jsem přes sudo /media/LOGOCOMFORT/CDROM_Installers/Disk1/InstData/Linux/VM/Setup.bin ručně. Při instalaci jsem prolízal CD a všiml jsem si, že v kořeni je složka Linux a v ní start.sh, pro pobavení je zde jeho obsah:

#!/bin/sh

SUCCESS=0

# CD-ROM-Pfad ueber den Befehl mount ermitteln
#cd_path=$(mount | grep "iso9660" | awk '{ print $3; }')

#echo $cd_path

#$cd_path/Linux/Setup.bin

cd_path=$(mount | grep "cdfss" | awk '{ print $3; }')

echo $cd_path/CDROM_Installers/Disk1/InstData/Linux/VM/Setup.bin

# Installer starten
$cd_path/CDROM_Installers/Disk1/InstData/Linux/VM/Setup.bin

Nevím proč tam byl tento soubor, pač dělá to samé co start.bin, jen navíc nastaví SUCCESS na 0 :-D. Ze zajímavosti jsem pak vytvořil symlink na /media/LOGOCOMFORT/CDROM_Installers do /CDROM_Installers a výsledek byl „Permisson denied“. Moje ručně spuštěná instalace proběhla bez problémů.

Spuštění LOGO!Soft Comfort v6

Po spuštění se mi otevřelo okno s titilem programu, ale bylo celé šedé a nešlo zavřít. V terminálu žádné chybové hlášení, takže pro ukončení jsem šáhl po kill. Hledal jsem příčiny všude možně, i v tom obludném spouštěcím scriptu. Po hodině a půl jsem přišel na soubor LOGOComfort.lax kde je řádek lax.nl.current.vm=jre/bin/java , což je cesta k jave instalovené v LOGO!Softu Siemensem, změnil jsem jej na lax.nl.current.vm=/usr/bin/java , což bylo distribuční JRE. Po té program KONEČNĚ úspěšně najel.

Závěr

Už zase se mi potvrdilo jak bídná je podpora pro Linux u některých firem a taky jak se dá pěkně sprasit komerční produkt. Podle mě ten člověk co připravoval obsah toho CD to na Linuxu ani nevyzkoušel. Snad tento článek někomu pomůže.

DLNA

Co je DLNA ?

DLNA je standard pro živý přenos médii po lokální síti. Přenost datového toku je přes HTTP 1.0/1.1 a nad tím běží protokoly UPnP AV.

Proč používat DLNA?

Na tuto otázku zkusím odpovědět vlastním případem. Mám televizi Sony Bravia 32W5500, ta umí přehrávát MPEG-1, JPG a MP3 z flash disku. Když se na to tak dívám, nic moc. Ale také má zároveň síťový port a schopnost připojit se do sítí DLNA. Tato shcopnost mi umožní přehrávat jakákoliv média na TV, aniž bych notebook musel propojovat HDMI kabelem a mnohem víc. DLNA server, který popíšu jak nainstalovat, se nakonfiguruje tak, že se mu předají složky ze kterých může čerpat data a ty následně nabídne koncovému zařízení.

Takže pokud si budu chtít pustit film budu mít složku „Filmy“ a budou tam soubory : „adam.mkv“,“bogocz.iso“,“linux.avi“,“linux.sub“ tak i když TV neumí mkv, tak si DLNA na notebooku zjistí jaký stream cíl podporuje a překóduje jej do něj. Stejné to bude s ISO(obraz DVD), při výběru bogocz.iso mi DLNA na notebooku převede menu i film a posílá přímo do TV. Pokud si chci spustit AVI nebo MKV v cizím jazyce tak můžu, transkódování přiloží i titulky.

Pokud ovšem chci spustit JPG, MP3 nebo ACC, tak DLNA server nic nepřevádí a posílá přímý bitový tok zdroje.

Instalace

Následující script jsem napsal tak, aby se vždy instalovala poslední verze.

Script

PROJ=ps3ms
echo "Instalační script PS3 Media Serveru"
echo "Kolik jader ma tvuj procesor ?"
read CORES
let cores++
mkdir $HOME/$PROJ
cd $HOME/$PROJ

sudo apt-get build-dep mplayer
sudo apt-get install ubuntu-restricted-extras checkinstall ant mplayer mencoder ffmpeg subversion build-essential
sleep 3
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

if [ -d mplayer ]
then
        cd mplayer
        echo "Spouštím konfiguraci a kompilaci"
        CFLAGS="-O2 -fomit-frame-pointer" ./configure --confdir=/etc/mplayer
        make -j $CORES > /dev/null 2> build_errors
        sudo checkinstall -D --install=yes --fstrans=no --pakdir "$HOME/$PROJ" --pkgname mplayer --backup=no --deldoc=yes --deldesc=yes --delspec=yes --default --pkgversion "3:1.0~svn-`grep "#define VERSION" version.h | cut -d"-" -f2`"
        cd ..
else
        echo "Ukončuji skript, zdrojové kódy jsou nekompletní"
        exit 1
fi

echo "Po spuštění stránky, stáhněte  Java JDK 6 .., po stažení vypnout firefox, stažený balík přesunout do složky projektu ($HOME/$PROJ) a zmáčknout Enter"
sleep 10
firefox http://java.sun.com/javase/downloads/widget/jdk6.jsp
read enter

if [ -f $(ls | grep jdk-6) ]
then
        sh $(ls | grep jdk-6)
        JAVA_HOME=$HOME/$PROJ/$(ls | grep jdk1.6)/jre
        export JAVA_HOME
        svn checkout http://ps3mediaserver.googlecode.com/svn/trunk/ ps3mediaserver-read-only

        cd ps3mediaserver-read-only/ps3mediaserver
        ant
        chmod a+x PMS.sh
        chmod a+x linux/tsMuxeR
        cd ../..

        cat > run_server << END
#!/bin/sh
cd $HOME/$PROJ/ps3mediaserver
./PMS.sh
END
        chmod a+x run_server
else
        echo "Instalátor JDK 6 nenalezen, přeskakuji instalaci PS3media serveru"
        exit 1
fi

exit 0

Spuštění

Script stačí spustit a počkat až zkončí instalační proces, jen před instalcí javy vyskočí firefox, tak prosím následujte pokyny.

Zprovoznění VDPAU v Linuxu

Předem bych chtěl upozornit, že návod jsem vytvářel pod Ubuntu 9.10 KK, takže nevím jestli postup bude stejný u nových či starších distribucí. Takže než začneme zkontrolujeme jestli je naše karta podporovaná touto technologii, to uděláme na Wikipedii pro VDPAU. Pokud tedy vlastníme jeden z čipů ze seznamu, tak stačí nahrát poslední verzi ovladače grafické karty ze stránek NVIDIA

Potřebný software

v terminálu spustíme příkazy

sudo apt-get update
sudo apt-get build-dep ffmpeg vlc
sudo apt-get install build-essential libtool automake git-core xcb xlibs-dev libdrm-dev

Získáme zdrojové kódy

Poté co máme systém připravený, získáme zbytek zdrojáků které jsou potřeba a to sekvencí

mkdir ~/vdpau_proj
cd ~/vdpau_proj
wget http://www.splitted-desktop.com/~gbeauchesne/libva/libva-latest.tar.gz
tar xvf libva-latest.tar.gz
wget http://www.splitted-desktop.com/~gbeauchesne/vdpau-video/vdpau-video-latest.tar.gz
tar xvf vdpau-video-latest.tar.gz
git clone git://git.ffmpeg.org/ffmpeg/
cd ffmpeg
git clone git://git.ffmpeg.org/libswscale/
cd ..
git clone git://git.videolan.org/vlc.git

Kompilace

Máme-li všechny potřebné zdrojáky a knihovny, mužeme zkompilovat jednotlivé projekty a to sekvencí. Pokud máme vícejádrový processor můžeme si kompilaci urychlit změnou příkazu „make“ na „make -j pocetjader+1„, což u dvoujádra znamená „make -j 3

Pro zkompilování libva (v adresáři libva)

for file in debian/patches/*.patch;do patch -p1 < $file;done

autoreconf -f -i
./configure
make
sudo make install

Pro zkompilování VDPAU backendu

./configure
make
sudo make install

Malá přestávka od kompilací, teď spustíme příkaz

vainfo

Pokud výstup vypadá zhruba takto, tak je to dobré. Pokud nikoliv, tak pečlivě projdeme kompilační log a podíváme se jestli nebyly v průběhu překladu nějaké chyby a kompilační postup opakujeme.

libva: libva version 0.31.0-sds3
Xlib:  extension "XFree86-DRI" missing on display ":0.0".
libva: va_getDriverName() returns 0
libva: Trying to open /home/thresh/sandbox/lib/va/nvidia_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA API version: 0.31
vainfo: Driver version: Splitted-Desktop Systems VDPAU backend for VA API - 0.5.2
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointVLD
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD

Pro kompilaci ffmpeg následující

sudo cp libavcodec/vaapi.h /usr/local/include/libavcodec/vaapi.h
./configure --enable-vdpau --enable-shared --disable-static --enable-debug
make
sudo make install

A na konec kompilace VLC playeru

mkdir build
cd build
../configure --enable-libva
make
sudo make install

Spuštění

Po spuštění nějakého 720p či 1080p ve VLC playeru by mělo jít vidět značné odlehčení procesoru.

Acer T230H

10. února jsem si koupil monitor Acer T230H jakožto ovládací prvek mého projektu. Ovšem po rozbalení jsem záhy zjistil, že jeho zprovozění nebude řekněme až tak „Plug & Play“. Pro to, aby nám naše X reagovaly na dotykový systém monitoru je třeba pár věcí udělat.

Stažení

sudo apt-get install xserver-xorg-dev

Kompilace HidTouchSuite

V adresáři kde jsme rozbalili archiv s HidTouchSuite…

patch -p1 < hidtouch.patch
./configure --prefix=/usr
make && sudo checkinstall

Příprava příštího bootu

Udev

sudo gedit /etc/udev/rules.d/99-touchscreen.rules

a zde přidáme řádek

SUBSYSTEM=="usb", ATTRS{idVendor}=="0408", ATTRS{idProduct}=="3000", SYMLINK+="usb/quanta_touch"

X.org

sudo gedit /etc/X11/xorg.conf

vložte

Section "InputDevice"
Identifier "Acer T230H"
Driver "hidtouch"
Option "SendCoreEvents" "true"
Option "ReportingMode" "Raw"
Option "Device" "/dev/usb/quanta_touch"
Option "PacketCount" "13"
Option "OpcodePressure" "852034"
Option "OpcodeX" "65584"
Option "OpcodeY" "65585"
Option "CalibrationModel" "1"
Option "CornerTopLeftX" "0"
Option "CornerTopLeftY" "0"
Option "CornerTopRightX" "1920"
Option "CornerTopRightY" "0"
Option "CornerBottomLeftX" "0"
Option "CornerBottomLeftY" "1080"
Option "CornerBottomRightX" "1920"
Option "CornerBottomRightY" "1080"
Option "CornerScreenWidth" "1920"
Option "CornerScreenHeight" "1080"
EndSection

a najděte sekci „ServerLayout“ a zde přidejte

InputDevice "Acer T230H" "SendCoreEvents"

u mě to vypadá asi takhle :

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 0
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
    InputDevice    "Acer T230H" "SendCoreEvents"
    Option         "Xinerama" "0"
EndSection

a těď už jen ..

sudo service gdm restart

Už delší dobu mě láká (jakožto fandu linuxových systémů) vyzkoušet schopnosti konzole PlayStation 3 (dále jen PS3) s Linuxovým systémem.

1. Výběr distribuce

Důležité je abych vybral správný základ neboli vhodnou distribuci Linuxu. Od prvopočátků, kdy Sony uvedla PS3 a jeho podporu jiných operačních sytémů, se Linuxový svět pro PS3 točil jen kolem Yellow Dog Linux, který byl také značně propagován. Nicméně nejsem obeznámený s tím, jak tato distribuce funguje. Naštěstí se postupem času začaly zprovozňovat i další distribuce ( Fedora, Ubuntu, Gentoo). Problém byl s jádrem které je třeba k běhu systému, musí být totiž zkompilován pro architekturu processorů PowerPC (Cell BE) a také s ovladači (patchy) které bylo třeba do jádra zavést. Pokud bych si chtěl zkompilovat vlastní jádro mohl bych, od kernelu 2.6.24 je podpora PS3 plná a není třeba žádné patche aplikovat.

Zpět k výběru distribuce. Po všem bádání jsem zvolil variantu „psXubuntu“ 9.10 z webu psubuntu.com, jelikož je mi Ubuntu blízké a mám zkušenosti s Debian systémy. psUbuntu nabízí 3 varianty grafického systému :

  1. Gnome (Ubuntu)
  2. KDE 4.1 (Kubuntu)
  3. Xfce (Xubuntu)

Jelikož PS3 disponuje jen s 256 MB operační paměti (+256 MB grafické, ale o ní až později) , tak je podle mě nejvýhodnější Xfce varianta. Gnome je více oblíbená a dobře se s ní pracuje, ale KDE 4 je zase novejší, více EyeCandy, výkonově optimalizované (díky Qt4 ) a bohužel zkonzumuje dvojnásobek paměti, což by mělo za důsledek, že by systém vše zapisoval na swap a rychlost prostředí by byla nulová.

2. Příprava instalace

Potřebné věci

  • stažení ISO obrazu psXubuntu
  • petitboot (zde)
  • prázdný CD nebo DVD disk
  • USB Flash disk
  • USB Klávesnici  a myš
  • Externí disk pro zálohu herních dat z PS3

Příprava instalačních materiálů

Při vypalování ISO obrazu na disk jsem poprvé použil CD, ukázalo se, že PS3 čte raději DVD  (měl jsem problémy při instalaci), takže jsem obraz přepálil na DVD. Na flash disku jsem vytvořil adresáře/PS3/otheros/ do kterého jsem nakopíroval petitboot (otheros.bld).

Příprava PS3

Když jsem vše připravil, pustil jsem se do zálohy systému. Našel jsem si starý 40 GB ATA disk který jsem napojil přes USB převaděč do PS3. Musel jsem ho naformátovat na FAT32. Pro spuštění zálohovacího procesu stačilo jít do [Settings] > [System Settings] > [Backup Utility]. Mých 34 GB se zálohovalo kolem hodiny a půl.

Po záloze je třeba vytvořit volný oddíl pro Linux. Formátování jsem spustil v [Settings] > [System Settings] > [Format Utility] > [Custom] > [Allot 10GB to the Other OS] > [Quick Format].

3. Instalace

Instalace a spuštění zavaděče

Do PS3 jsem připojil USB Flash disk s připraveným petitboot a naistaloval jej [Settings] > [System Settings] > [Install Other OS]. Po naistalování zavaděče petitboot jsem zapnul spouštění zavaděče jako výchozí a to v [Settings] > [System Settings] > [Default System] > [Other OS]. Po přepnutí se mě systém zeptal zda-li chci konsoli restartovat, vložil jsem instalační disk a potvrdil restart.

PetitbootPo restartu mě uvítala obrazovka petitbootu. Petitboot se dá ovládat klávesnicí nebo sixaxis ovladačem, ale jen připojeným přes USB (ovládání je popsáno na oficiálním webu petitboot). Zvolil jsem si jej ovládat klávesnicí. Pro návrat do standartního PS3 sysstému se mačká DEL, ale já chtěl nainstalovat Linux takže jsem zvolil možnost install.

Po načtení instalátoru jsem zvolil češtinu jako jazyk systému, posléze instalátor detekoval rozložení klávesnice které používám. Pro kompletní instalaci je třeba mít připojení k Internetu a tak jsem připojil síťový kabel do PS3 a v instalátoru zvolil eth0. Pro nejlepší výsledek jsem se rozhodl systém vytvořit na oddílu typu ext4, což přineslo malé komplikace, protože petitboot nepodporuje zavádění z ext4, ale to nevadí, dá se to lehce obejít. Disk „ps3sd“ jsem rozdělil ručně, vytvořil jsem :

  • 100 MB bootovatelný oddíl typu ext2 který se připojuje na „/boot“
  • 10000 MB oddíl typu ext4 připojený na „/“
  • a zbytek jsem vytvořil jako swap

Oblast „ps3vram“ zatím nekonfiguruju, až nakonec v rámci optimalizací. Poté jsem zadal uživatelské jméno, heslo a instalace se spustila. Asi za hodinu instalace zkončila a zeptala se mě na čas, odpověď byla „Ano, UTC“.

První spuštění a optimalizace

Swap na vram

Jak jsem se již zmínil, PS3 rozhodně nemá operační paměť na rozdávání, ale co rozhodně má je dalších 256 MB paměti na GPU. Tato paměť se dá využít pro swap („alternativní ram“). A to následovně :

  • příkaz : sudo gedit /etc/modules
    • přidat řádek „ps3vram“
  • příkaz : sudo gedit /etc/rc.local
    • před řádek s „exit 0“ vložit řádky :
      • mkswap /dev/ps3vram
      • swapon -p 1 /dev/ps3vram

A pak už jen restartovat linux