19:01
Windows pod Linuksem - wirtualizacja
Co daje nam wirtualizacja?
Wirtualizacja pozwala na utworzenie nowej wirtualnej maszyny, na już działającym systemie operacyjnym. Możliwe jest przypisanie dla jej sprzętu dowolnych parametrów (np. znacznie większa ilość pamięci), zależnie od tego jakie możliwości daje nam program ją obsługujący. Na takiej maszynie można zainstalować również system operacyjny, jeśli ustawiona architektura procesora jest zgodna z danym systemem, oraz spełnione są inne wymagania sprzętowe. Dla tych, którzy jeszcze nie do końca rozumieją – można powiedzieć, że otrzymujemy nowy komputer wewnątrz naszego działającego systemu operacyjnego.
Jakie oprogramowanie?
Znanych jest mi kilka programów, które umożliwiają użytkownikowi utworzenie na swoim komputerze nowej maszyny wirtualnej. Najbardziej znany jest chyba VMware. Opatrzony jest on niestety licencją komercyjną. Sam odtwarzacz (Player) służący do uruchamiania maszyny jest dostępny bezpłatnie, jednak za środowisko umożliwiające przygotowanie takiej maszyny trzeba już zapłacić. Kolejną propozycją jest VirtualBox. Jeśli chodzi o funkcjonalność w stosunku do VMware, jest ona z pewnością mniejsza, ale ma inny spory atut – jedną z licencji na której jest wydawany jest GPL. Kolejną propozycją również wydawaną na licencji GPL jest QEMU. Trzeba mu jednak przyznać, że jeszcze nie sprawuje się aż tak dobrze jak VirtualBox. Mój wybór padł więc na VirtualBox'a.

Instalacja VirtualBox'a
Podejrzewam, że każda (przynajmniej dobra) dystrybucja Linuksa zaopatrzyła swoje repozytoria w VirtualBox'a. Opiszę tutaj jednak sposób instalacji niezależny od posiadanej dystrybucji. W pierwszej kolejności należy odwiedzić stronę http://www.virtualbox.org/ . Tam w zakładce download wybieramy for Linux -> all distributions. Pobranemu plikowi nadajemy prawa do wykonywania:
chmod a+x VirtualBox_1.5.2_Linux_x86.run
i uruchamiamy z konta roota:
./VirtualBox_1.5.2_Linux_x86.run
Archiwum zostanie rozpakowane do /opt/VirtualBox-1.5.2. Kolejnym krokiem jest skompilowanie modułu dla jądra:
cd /opt/VirtualBox-1.5.2/src/
make
make install
Aby moduł był ładowany automatycznie przy starcie, dopisujemy go do odpowiedniego pliku. Dla różnych systemów lokalizacja tego pliku będzie różna. Przykładowa jego lokalizacja to: /etc/sysconfig/modules. Moduł, który trzeba dopisać to vboxdrv. Jeżeli nie zostanie on dopisany, do uruchamiania przy starcie, będzie trzeba załadować go ręcznie przed uruchomieniem VirtualBox'a:
modprobe vboxdrv
Aby VirtualBox miał dostęp do urządzeń podpiętych do portu USB, prawdopodobnie będzie trzeba dopisać linijkę:
usbfsnone /proc/bus/usb usbfs devgid=1001,devmode=666 0 0
do pliku /etc/fstab. Do uruchomienia maszyny wirtualnej przez zwykłego użytkownika, wymagane jest dodanie go do grupy vboxusers:
gpasswd -a uzytkownik vboxusers
po czym, jeśli jest on zalogowany należy go przelogować.
Tworzenie maszyny wirtualnej
Nadszedł czas, aby utworzyć maszynę wirtualną. W tym celu uruchamiamy managera:
/opt/VirtualBox-1.5.2/VirtualBox
otrzymując okienko w stylu QT. Dalsza obsługa programu już nie powinna stwarzać trudności. GUI jest na tyle przyjazne, że początkujący użytkownik może szybko przygotować maszynę do pracy. Klikając na przycisk 'Nowa' (Ctrl+N) dostajemy okienko kreatora wyjaśniające nam wszystkie czynności po kolei: Wpisujemy nazwę, oraz typ systemu (wybrałem: WinXP), przydzielamy ilość pamięci RAM dla naszej nowej maszyny (wybrałem: 192MB). Teraz tworzymy nowy dysk twardy, co spowoduje uruchomienie następnego kreatora. Zalecam tutaj wybrać obraz o stałym (wybrałem 10G) rozmiarze (UWAGA: przy obrazie o stałym rozmiarze nie musimy mieć dostępnego aż tyle na dysku ile będzie on zajmować, ale zalecane jest jednak, żeby nie przekraczał on rozmiaru partycji na której zostanie utworzony). Po zakończeniu obu kreatorów można przejść w ustawienia utworzonej maszyny i włączyć kontroler USB, dźwięk (np. ALSA), zamontować napęd CD gospodarza (/dev/cdrom). Tutaj taka moja obserwacja: cdrom musi być w lokalizacji /dev/cdrom, jeżeli nasz cdrom to /dev/hdc, lub coś podobnego, to należy go podlinkować (przez root'a) do /dev/cdrom:
ln -s /dev/hdc /dev/cdrom
Instalacja systemu
Teraz można uruchomić maszynę wirtualną i zacząć rozruch z płyty CD, ewentualnie z obrazu *.iso (ściągniętego np. z MSDNAA). Instalacja systemu przebiega w taki sam sposób jak instalacja systemu bez kontroli VirtualBox'a.

Instalacja sterowników
Jeżeli nasz system już działa użytkownik będzie pewnie chciał zainstalować sterowniki dla urządzeń. Jedna uwaga tutaj: działający sprzęt jest wirtualny i nie jest zgodny z tym co faktycznie mamy 'pod blachą'. Twórcy VirtualBox'a dali użytkownikom pewien dodatek, który znajdziemy w katalogu /opt/VirtualBox-1.5.2/additions. Jest to obraz płyty *.iso, na którym znajdują się sterowniki do wirtualnych urządzeń. Zalecam zamontować ten dysk w VirtualBox'ie i zainstalować znajdujące się tam sterowniki. Dzięki temu np. będzie można uzyskiwać niestandardowe rozdzielczości, oraz poruszać się między maszyną wirtualną, a Linuksem bez potrzeby uwalniania kursora.

VirtualBox, a urządzenia USB
Wiele użytkowników pewnie się zastanawia, czy będzie działać prawidłowo ich sprzęt podłączany do USB pod tym wirtualnym Windows'em. Z moich testów wynika, że nie ma problemów z obsługą drukarek, skanerów, pendrive'ów, kamer internetowych pod VirtualBox'em. Identyfikatory tych urządzeń są przekazywane dla maszyny wirtualnej (jeżeli jest włączony kontroler USB), gdzie zostają przechwycone przez działający tam system operacyjny. Przechwycone przez VirtualBox'a urządzenie jednak nie będzie mogło być w tym samym czasie obsługiwane przez system Linuks i system wirtualny.

16:47
Obsługa MIDI w Linuksie
Przygotowanie jądra
Przed przystąpieniem do kompilacji oprogramowania należy wcześniej przygotować odpowiednio jądro systemu. Należy tutaj zadbać by dźwięk w systemie działał w oparciu o sterowniki ALSA (nie testowałem tego rozwiązania na OSS, ale też powinno działać). Do poprawnego działania wymagane jest urządzenie /dev/snd/seq. Jeżeli znajduje się takie w naszym systemie, to prawdopodobnie można ominąć ten krok.
W przypadku, gdy nie posiadamy urządzenia snd/seq wpisujemy w katalogu ze źródłami jądra (np: /usr/src/linux) polecenie
make menuconfig
a następnie przechodzimy do 'Device Drivers -> Sound -> Advanced Linux Sound Architecture' i zaznaczamy jako moduł, albo całkiem wkompilowywujemy 'Sequencer support'.

Następnie kompilujemy jądro i kopiujemy je do miejsca docelowego:
make && make modules_install cp arch/i386/boot/bzimage /boot/vmlinuz[/c]
jeżeli wybraliśmy opcję jako moduł, każemy go załadować:
modprobe snd-seq
oraz dopisujemy do pliku z automatycznie ładowanymi modułami (np. /etc/sysconfig/modules) linijkę:
snd-seq
co spowoduje załadowanie modułu przy każdym uruchomieniu systemu.
Kompilacja Timidity
Program Timidity można pobrać z oficjalnej strony: http://timidity.sourceforge.net/ (ok. 1,4MB). Rozpakowujemy archiwum, a następnie przechodzimy do kompilacji. Do konfiguracji użyłem parametrów:
./configure --prefix=/usr --enable-audio=alsa --enable-dynamic --enable-server --enable-alsaseq make make install
Parametry konfiguracji można oczyłiście dobrać sobie ręcznie uprzednio zapoznając się z dołączoną dokumentacją, ważna jest natomiast opcja --enable-server, która pozwoli uruchomić Timidity jako serwer dźwięku MIDI.
Konfiguracja Timidity
Jeżeli kompilacja przebiegła pomyślnie, należy wybrać odpowiedni schemat dźwiękowy dla programu. Ja zdecydowałem się na shompatches. Pobrać można go z http://www.i.h.kyoto-u.ac.jp/~shom/timidity/shominst/shominst-0409.zip (ok. 10MB). Po pobraniu pliku przechodzimy do katalogu /usr/share/timidity. Jeżeli nie istnieje należy go utworzyć. Następnie rozpakowujemy tutaj pobrane wcześniej archiwum. Aby sprawdzić, czy pliki rozpakowały się poprawnie wydajemy polecenie:
ls /usr/share/timidity
i powinniśmy otrzymać podobną listę plików:
default.cfg gsdrum.cfg mt32.cfg sfx.cfg timidity.cfg gsdrum25.cfg inst power.cfg shominst-0409.zip
Następnie otwieramy plik /usr/share/timidity/timidity.cfg i poprawiamy w nim odpowiednio ścieżki:
dir /usr/share/timidity/inst/GUS dir /usr/share/timidity/inst dir /usr/share/timidity/inst/test
Aby przetestować, czy wszystko działa poprawnie uruchamiamy serwer:
timidity -iA
oraz ewentualnie wybrany plik midi:
timidity m4129.mid
Skrypt startowy
Aby nie trzebabyło uruchamiać za każdym razem serwera ręcznie warto utworzyć skrypt startowy, który załaduje go automatycznie przy starcie systemu. Nie mogę tutaj podać konkretnej treści pliku, bo różne dystrybucje używają różnych lokalizacji tych plików oraz różnych sposobów uruchamiania. Najczęściej pliki startowe znajdują się w katalogu /etc/init.d/ lub /etc/rc.d/init.d/. Polecam skopiować pod inną nazwą działający skrypt, a następnie zmodyfikować go podając jako parametr uruchomienia komendę:
/usr/bin/timidity -iA > /dev/null &
oraz jako polecenie na przerwanie skryptu:
killall timidity
Następnie utworzyć dowiązania symboliczne do odpowiednich poziomów uruchamiania (rc5.d, rc6.d). Aby przetestować, czy skrypt działa poprawnie, polecam ponownie uruchomić komputer. Jeżeli nie udało się uruchomić serwera przy starcie należy sprawdzić, czy prawidłowo został dopisany wiersz z modułem snd-seq, bo często to jest źródłem problemu dla startu serwera.
Poniżej jeszcze zdjęcie pokazujące, że serwer Timidity poprawnie jest rozpoznawany przez Wine:


English
Nazywam się Tomasz Chudyk i witam na mojej stronie. Z zawodu jestem programistą. Moje zainteresowania krążą głównie wokół open-source, Linuksa i technologi internetowych.
