itoutline.me

 

PartKeepr na OSX

Zauważyłem, że w związku z coraz większą ilością części elektronicznych w moim “warsztacie” coraz słabiej orientuje się co mam na “stanie magazynowym”. Pomyślałem, że stworzę prymitywną bazę z prostym frontendem i będę tam wrzucał informacje o zakupach. Zanim przystąpiłem do działania sprawdziłem czy przypadkiem nie ma już takiego rozwiązania i okazało się, że jest http://www.partkeepr.org

Przy okazji znacznie wykraczające poza moje wymagania, postanowiłem tym razem nie wymyślać koła na nowo.

Instalacja na OSX na pewno nie należy do kategorii “agree, next, finish”.

Problem Bitlocker

Przyznam, że nigdy nie myślałem, że coś takiego może mi sie przydarzyć… ale jednak. Klucze do bitlockera miałem zapisane na karcie micro-SD włożonej do miniaturowego czytnika USB. W pewnym momencie pojawił się nowy element w pobliżu komputera w postaci drukarki, “głównej winowajczyjni” ;). Drukarka była niestety zbyt blisko czytnika i prawdopodobnie za którymś razem spowodowała jakieś większe przesunięcie się czytnika, co zakończyło się strukturą katalogów na karcie jak poniżej. Oczywiście mogłem to sprawdzić tylko na ja jakimś innym komputerze ponieważ komputer który zabezpieczała ta karta w ogóle nie miał zamiaru się z nią uruchomić.

“Aplikacja” dla OSX

Słowo aplikacja nie bez powodu jest w cudzysłowiu. Tak naprawdę to bash-owy skrypt umieszczony w odpowiedniej strukturze katalogowej wykorzystujący narzędzie Pashua. W sumie najbardziej mi odpowiada ten sposób ale pomyślałem sobie, że w ramach ćwiczeń spróbuje zrobić jak najprostsze ale w miarę funkcjonalne GUI do xfreerdp. Stąd cała zabawa z Pashua.

Aplikacje w OSX są aplikacjami dzięki rozszerzeniu .app, tak naprawdę to katalog w którym są umieszczone pliki i zasoby niezbędne do działania programu. Moją “aplikację” postanowiłem nazwać “XFreerdp Client”. Jej zawartość wygląda następująco (“Show package content” z menu podręcznego):

  • Info.plist - to plik zawierający informacje o aplikacji. Zdefiniowana jest w nim nazwa pliku, który ma byc uruchomiony, ikony, wersji, architektury itp.

  • rdp_connect - to skrypt, który jest uruchamiany

  • rdp_connect_image.png - obraz który jest wyświetlany w oknie Pashua

  • rdp_connect.icns - ikona aplikacji Xfreerdp Client

Xfreerdp na szybko

Xfreerdp działa bardzo dobrze ale ma ten minus, że wymaga podania sporej ilości parametrów do każdego połączenia. Można “przegrepować” historię, wkleić linijkę do skryptu ale można też zrobić to tak:

Funkcja start_rdp w .bash_profile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function start_rdp {

    if [ ! -f ~/.serverauth.* ]
        then
            echo "Starting Xquartz..."
            osascript -e 'launch application "Xquartz"'
            sleep 3
    fi

    if [ ! "$DISPLAY" ]
        then
            export DISPLAY=:0
    fi

    case $1 in
    workpc )
        `which xfreerdp` -u user01 -g 1280x800 -z --no-rdp -x lan --plugin cliprdr --plugin rdpdr --data disk:HDD:$HOME -- 192.168.1.1:8403
        ;;
    testpc )
        `which xfreerdp` -u itoutline.me -g 1280x800 -z --no-rdp -x lan --plugin cliprdr --plugin rdpdr --data disk:HDD:$HOME -- 192.168.1.1:8404
        ;;
    * )
        echo "You need to provide hostname: workpc, testpc"
        ;;
    esac
}

alias rdp=start_rdp

Powyższy kawałek kodu należy umieścić w .bash_profile (o ile korzystamy właśnie z tego shell-a). Teraz, żeby połączyć się z hostem o nazwie workpc wystarczy w terminalu wpisać rdp workpc. Jak widać funkcja sprawdza czy jest uruchomiony serwer X oraz ustawiona zmienna DISPLAY. Niezbyt eleganckie jest użycie polecenia sleep ale Xquartz trochę się uruchamia…

SSH tips

Kilka usprawnień i wskazówek ułatwiających korzystanie z SSH.

Konfiguracja hostów zdalnych

Korzystanie z pliku ~/.ssh/config ułatwia łączenie się ze zdalnymi hostami. Wystarczy wpisać ssh, pierwszą literę hosta i wcisnąć klawisz ⇥ tab. Nie trzeba pamiętać o porcie, użytkowniku, parametrach połączenia. ForwardX11 yes umożliwia uruchamianie aplikacji graficznych (oczywiście musimy mieć uruchomiony na kliencie serwer X-ów). Poniżej przykładowy plik:

Host centos-01
HostName 192.168.1.190
User itoutline
ForwardX11 yes

Host openwrt
Hostname 192.168.1.1
User root

Host appletv
Hostname 192.168.1.60
User root

Host workstation
Hostname 192.168.1.1
Port 8511
User itoutline

Automatyczne logowanie

Umieszczenie naszego klucza publicznego w pliku ~/.ssh/authorized_keys na serwerze umożliwia zalogowanie się bez użycia hasła. Najpierw musimy wygenerować parę kluczy np.:

[itoutline@centos-01 ~]$ ssh-keygen -t rsa -C "itoutline@centos-01"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/itoutline/.ssh/id_rsa):
Created directory '/home/itoutline/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/itoutline/.ssh/id_rsa.
Your public key has been saved in /home/itoutline/.ssh/id_rsa.pub.
The key fingerprint is:
81:c4:99:69:cd:c5:39:d8:01:26:f7:bd:05:3a:bd:df itoutline@centos-01
The key's randomart image is:
+--[ RSA 2048]----+
|     .o*+*oo.    |
|     .*=+.=+ .   |
|     .. . +.o .  |
|         . . +   |
|        S   o    |
|             . . |
|              . E|
|                 |
|                 |
+-----------------+

Niepodanie “passphrase” podczas generowania kluczy spowoduje, że zawsze będziemy mogli zalogować się na zdalnego hosta. Ma to jednak zasadniczy minus, ktoś kto zdobędzie nasz klucz prywatny zapisany w pliku /home/itoutline/.ssh/id_rsa zaloguje się bezproblemowo wszędzie tam gdzie dodaliśmy nasz klucz publiczny do ~/.ssh/authorized_keys. Trochę jak zapisanie hasła w pliku tekstowym…

Pozostaje skopiowanie klucza publiczngo na zdalny serwer, można to zrobić np. za pomocą ssh-copy-id:

[itoutline@centos-01 ~]$ ssh-copy-id centos-03
The authenticity of host 'centos-03 (192.168.1.200)' can't be established.
RSA key fingerprint is 5b:85:ee:ee:d5:12:a3:f1:fe:10:5f:4d:66:f5:e5:7a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'centos-03' (RSA) to the list of known hosts.
itoutline@centos-03's password:
Now try logging into the machine, with "ssh 'centos-03'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

W przypadku kiedy ssh nasłuchuje na porcie innym niż standardowy można użyć polecenia

ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 2222 itoutline@centos-03"

Jeśli mamy więcej niż jeden klucz publiczny w katalogu ~/.ssh warto podać jego nazwę (jak w ostatnim przykładzie) ponieważ ssh-copy-id kopiuje wszystkie jakie znajdzie.

Jeśli na kliencie polecenie ssh-copy-id jest niedostępne, można wykorzystać poniższego one-linera:

cat ~/.ssh/id_rsa.pub | ssh itoutline@centos-03 “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys”

Jeśli zdecydujemy się na używanie “passphrase” z pomocą przyjdzie nam ssh-agent, umożliwia on zapamiętanie naszego klucza prywatnego poświadczonego “passphrase” do czasu np. restartu hosta.

Przykładowy kod dodany do .bash_profile lub .bashrc załatwiający obsługę ssh-agent.

Obsluga ssh-agent w .bash_profile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SSH_ENV=$HOME/.ssh/environment

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
     echo succeeded
     chmod 600 ${SSH_ENV}
     . ${SSH_ENV} > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

Teraz kiedy po raz pierwszy zalogujemy się na centos-01, zobaczymy coś takiego:

[itoutline.sputnik: itoutline]$ ssh centos-01
Last login: Sun Mar 31 11:17:17 2013 from sputnik.local
Initialising new SSH agent...
succeeded
Enter passphrase for /home/itoutline/.ssh/id_rsa:
Identity added: /home/itoutline/.ssh/id_rsa (/home/itoutline/.ssh/id_rsa)

Wejście na centos-03 odbędzie się już bez podawania żadnych poświadczeń:

[itoutline@centos-01 ~]$ ssh centos-03
Last login: Sun Mar 31 11:20:40 2013 from centos-01.local
[itoutline@centos-03 ~]$

Modyfikacja “passphrase”

Następujące polecenie umożliwia dodanie, usunięcie lub zmianę “passphrase” w przypadku istniejących kluczy:

ssh-keygen -p -f $HOME/.ssh/id_rsa

[itoutline@centos-01 ~]$ ssh-keygen -p -f $HOME/.ssh/id_rsa
Enter old passphrase:
Key has comment '/home/itoutline/.ssh/id_rsa'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

Uruchamianie aplikacji graficznych przez SSH

Na maszynach wirtualnych instaluję z reguły minimalną wersję systemu plus to co akurat chce sprawdzić. Rzadko kiedy pojawia się konieczność skorzystania z grafiki a jeśli już to wystarczy doinstalować tylko środowisko X. Dzięki czemu wirtualna maszyna jest “lżejsza”.

Nawiązanie sesji SSH ze wsparciem dla X-ów ssh -X centos-03

Po stronie serwera w konfiguracji /etc/ssh/sshd_config musi znaleźć się linia X11Forwarding yes

Uruchomienie linuxowego kalkulatora na pulpicie OSX (XQuartz musi być zainstalowany i uruchomiony):

[itoutline.sputnik: itoutline]$ ssh -X centos-01
Last login: Sun Mar 31 15:08:49 2013 from sputnik.local
[itoutline@centos-01 ~]$ gcalctool &

Jeśli pojawia się poniższy problem:

(gcalctool:3141): Gtk-WARNING **: cannot open display:

Może oznaczać, że zmienna DISPLAY na kliencie nie jest ustawiona, można to naprawić dodając poniższą linię do .bash_profile lub .bashrc

export DISPLAY=:0

Unblock-us i Openwrt

Unblock-us.com to serwis, który umożliwia dostęp do usług posiadających ograniczenia regionalne podczas gdy jesteśmy akurat za granicą. Jest o tyle lepszy od rozwiązań opartych na VPN, że nie musimy niczego instalować i prędkość naszego połączenia nie jest ograniczona jak to ma zazwyczaj miejsce w przypadku dostawców rozwiązań VPN.

W przypadku OpenWrt konfiguracja jest bardzo prosta (oczywiście to nie jedyny sposób, ale właśnie z tą metodą nigdy nie miałem problemów). Tworzymy nowy plik zawierający informację o serwerach DNS i umieszczamy w nim wpisy związane z Unblock-us.com np. /etc/my_resolv.conf:

# Interface lan
nameserver 184.106.242.193
nameserver 208.122.23.23
nameserver 208.122.23.22
# Interface wan
nameserver 184.106.242.193
nameserver 208.122.23.23
nameserver 208.122.23.22

Następnie modyfikujemy plik /etc/config/dhcp, komentujemy linię zawierającą dane oryginalnego pliku i dodajemy nasz:

#option resolvfile '/tmp/resolv.conf.auto';
option resolvfile '/etc/my_resolv.conf';

Archlinux na Raspberry Pi

W końcu do mnie dotarł Raspberry Pi. Instalacja Archlinuxa, co do którego nie jestem jeszcze przekonany z uwagi na to, że “prawie wszystko jest inaczej” wyglądała następująco.

Przygotowanie karty SD. Znalazłem jakąś kartę 4GB, image Archlinuxa na stronie http://www.raspberrypi.org/downloads ma 2GB w związku z czym trzeba się pobawić parted, którego na OSX nie ma. Nie wnikałem już czy da się przygotować kartę na OSX z wiadomych względów, czas naglił. Całość przygotowania karty przeprowadziłem na CentOS

Pobranie obrazu:

wget http://downloads.raspberrypi.org/images/archlinuxarm/archlinux-hf-2012-09-18/archlinux-hf-2012-09-18.zip

Wypakowanie:

unzip archlinux-hf-2012-09-18.zip

Sprawdzenie w jaki sposób karta pojawiła się w systemie. Po włożeniu karty do slotu SD należy wydać polecenie:

dmesg | tail -15

usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usb-storage: device found at 3
usb-storage: waiting for device to settle before scanning
usb-storage: device scan complete
scsi 8:0:0:0: Direct-Access     APPLE    SD Card Reader   2.00 PQ: 0 ANSI: 0
sd 8:0:0:0: Attached scsi generic sg2 type 0
sd 8:0:0:0: [sdb] 8040448 512-byte logical blocks: (4.11 GB/3.83 GiB)
sd 8:0:0:0: [sdb] Write Protect is off
sd 8:0:0:0: [sdb] Mode Sense: 0b 00 00 08
sd 8:0:0:0: [sdb] Assuming drive cache: write through
sd 8:0:0:0: [sdb] Assuming drive cache: write through
 sdb: sdb1
sd 8:0:0:0: [sdb] Assuming drive cache: write through
sd 8:0:0:0: [sdb] Attached SCSI removable disk

Ponieważ uruchamiam CentOSa w init 3 automontowanie jak widać nie działa df:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg_centos01-lv_root
                     100670904   2620032  97028396   3% /
tmpfs                   508396         0    508396   0% /dev/shm
/dev/sda1               495844     56404    413840  12% /boot
none                 4294967296         0 4294967296   0% /media/psf

I bardzo dobrze ;), można zapisywać obraz na kartę:

sudo dd bs=4M if=archlinux-hf-2012-09-18.img of=/dev/sdb

471+1 records in
471+1 records out
1977614336 bytes (2.0 GB) copied, 120.311 s, 16.4 MB/s

Bardzo ważne jest, żeby podać właściwą nazwę dysku ponieważ powyższym poleceniem można uszkodzić system na którym karta jest przygotowywana. Jak widać u mnie karta zamontowała się jako sdb

Zmiana rozmiaru partycji root

sudo parted /dev/sdb

GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit chs
(parted) print
Model: APPLE SD Card Reader (scsi)
Disk /dev/sdb: 500,126,9
Sector size (logical/physical): 512B/512B
BIOS cylinder,head,sector geometry: 500,255,63.  Each cylinder is 8225kB.
Partition Table: msdos

Number  Start     End         Type     File system  Flags
 1      0,32,32   12,28,15    primary  fat16        boot, lba
 2      12,28,16  240,109,60  primary  ext4

(parted) rm 2
(parted) mkpart primary 12,28,16 500,126,8

Polecenie unit chs wyświetla informacje o zajętości przestrzeni na dysku w formacie “cylinders, heads, sectors”. Polecenie print wyświetla tablice partycji. rm 2 usuwa drugą partycję, jest usuwana tylko informacja o partycji a nie dane jakie się na niej znajdują. Polecenie mkpart primary 12,28,16 500,126,8 zakłada ponownie partycję zaczynającą się w tym samym miejscu ale kończącą na przedostatnim sektorze dysku (karty SD).

Sprawdzenie poprawności struktury systemu plików:

sudo e2fsck -f /dev/sdb2

Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb2: 32513/114688 files (0.0% non-contiguous), 110601/458496 blocks

Rozszerzenie wielkości partycji do zadeklarowanej w tablicy partycji:

sudo resize2fs /dev/sdb2

resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/sdb2 to 980735 (4k) blocks.
The filesystem on /dev/sdb2 is now 980735 blocks long.

To wszystko, można umieszczać kartę w Raspberry Pi

Parallels Desktop tips

Kilka użytecznych poleceń usprawniających prace z Parallels Desktop

Wylistowanie wszystkich wirtualnych maszyn:

prlctl list -a

UUID                                    STATUS       IP_ADDR         NAME
{8XXX3dd4-9f0b-406b-a5bc-XXXXXXXXXXXX}  stopped      -               CentOS-01
{8XXXa248-def7-4f3e-8405-XXXXXXXXXXXX}  stopped      -               CentOS-03
{eXXX4b67-f98b-4bc9-a9a8-XXXXXXXXXXXX}  stopped      -               Mac OS X
{5XXXe2ef-786b-4873-a5aa-XXXXXXXXXXXX}  suspended    -               Windows 8
{4XXX3137-7fb3-4ec9-a7fa-XXXXXXXXXXXX}  suspended    -               Windows XP

Wylistowanie parametrów konkretnej maszyny:

prlctl list -i CentOS-01

Uruchomienie wirtualnej maszyny:

prlctl start CentOS-01

Wyłączenie wirtualnej maszyny:

prlctl stop CentOS-01

Użycie przełącznika --kill wymusi zamknięcie maszyny, która nie odpowiada.

Restart:

prlctl reset CentOS-01

Przejście w stan uśpienia:

prlctl suspend CentOS-01

Suspending the VM...
The VM has been successfully suspended.

Wyjście ze stanu uśpienia:

prlctl resume CentOS-01

Wykonanie szablonu wirtualnej maszyny:

prlctl clone CentOS-01 --name CentOS --template

Clone the CentOS-01 VM to VM template CentOS...
Operation progress 88%
The VM has been successfully cloned.

Utworzenie nowej wirtualnej maszyny z wcześniej przygotowanego szablonu:

prlctl create CentOS-05 --ostemplate CentOS

Creating the VM on the basis of the CentOS template...
Clone the CentOS VM to VM CentOS-05...
Operation progress 88%
The VM has been successfully cloned.

Klonowanie, czyli stworzenie kopii istniejącej maszyny:

prlctl clone CentOS-10 --name CentOS-10-clon

Clone the CentOS-10 VM to VM CentOS-10-clon...
Operation progress 88%
The VM has been successfully cloned.

Jak już wspominałem, wykorzystując prlctl start VM_NAME maszyna uruchomi się w tle bez GUI Parallels. Czasami jednak chcemy coś do niej podłączyć, można to zrobić również z konsoli. Wylistowanie dostępnych urządzeń USB:

prlsrvctl usb list

Apple FaceTime HD Camera (Built-in)      '1a110000|05ac|8510|high|--|XXXXXX8M1XXXC8C0'
Apple Internal Memory Card Reader        '1d183000|05ac|8404|high|--|0000000XXXXX'
Apple Internal Keyboard / Trackpad       '1d182000|05ac|024c|full|KM|Empty'
Apple Bluetooth USB Host Controller      '1d181300|05ac|821f|full|--|Empty'
Patriot Memory                           '1a120000|13fe|3100|high|--|07XX6XXXXX'
StoreJet Transcend                       '14a10000|174c|5106|super|--|S2SXXXXXX209'
Flash Disk                               '1a120000|090c|1000|high|--|FBXXXXXXXX000141'
Logitech Illuminated Keyboard            '14200000|046d|c318|full|KM|Empty'
JTAGICE mkII                             '14200000|03eb|2103|full|PR|00B000XXXXXXX'
FT232R USB UART                          '14100000|0403|6001|full|PR|AXXXXX'
USB Flash Memory                         '1d110000|0930|6544|high|--|001422XXXXXXXXXX'
Apple - Composite                        '1d181100|05ac|820a|full|--|Empty'

Podłączenie czytnika kart SD do wirtualnej maszyny:

prlctl set CentOS-01 --device-connect "Apple Internal Memory Card Reader"

Odłączenie:

prlctl set CentOS-01 --device-disconnect "Apple Internal Memory Card Reader"

Podłączenie/odłączenie adaptera sieciowego:

prlctl set "CentOS-01" --device-connect "Apple USB Ethernet Adapter" prlctl set "CentOS-01" --device-disconnect "Apple USB Ethernet Adapter"

Jeśli nasza maszyna korzysta z DHCP i interfejs sieciowy ma skonfigurowany w trybie bridge to niekoniecznie musimy wiedzieć jaki dostała adres kiedy korzystamy z “obcej” sieci. Oczywiście można uruchomić Parallels Desktop, dostać się do konsoli i podejrzeć. Można też wykonać polecenie na wirtualnej maszynie bez uruchamiania GUI.

prlctl exec "CentOS-01" ifconfig

W ten sposób możemy wykonywać dowolne polecenia. Innym ciekawym sposobem jest po prostu bezpośredni dostęp do konsoli:

prlctl enter Windows\ XP

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is 08BC-EDC8

 Directory of C:\

10/05/2012  02:43 PM                 0 AUTOEXEC.BAT
10/05/2012  02:43 PM                 0 CONFIG.SYS
10/05/2012  01:43 PM    <DIR>          Documents and Settings
10/05/2012  02:45 PM    <DIR>          Program Files
10/05/2012  02:49 PM    <DIR>          WINDOWS
               2 File(s)              0 bytes
               3 Dir(s)  103,939,588,096 bytes free

C:\>

prlctl enter CentOS-01

-bash-4.1# uname -a
Linux centos-01.local 2.6.32-279.5.2.el6.x86_64 #1 SMP Fri Aug 24 01:07:11 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
-bash-4.1#

Wykonania zrzutu ekranu z wirtualnej maszyny:

prlctl capture CentOS-01 --file login_screen.png

Konwersja dysku wirtualnego do typu “plain” (zostanie wykorzystana cała przestrzeń na dysku fizycznym zadeklarowana na dysk wirtualny) z podziałem na 2GB części. Przyznam, że raczej to mało pożyteczne polecenie, może tylko ma sens kiedy nie chcemy się zaskoczyć nagłym brakiem miejsca na dysku fizycznym w związku z rozrostem dysków wirtualnych. Możliwe, że ma też wpływ na wydajność maszyn wirtualnych… być może na produkcyjnych maszynach warto ustawiać ten tryb

prl_disk_tool convert --plain --split --hdd /Users/norbert/Documents/Parallels/CentOS-01.pvm/CentOS-01-0.hdd

Np. tak wyglądał katalog dysku przed powyższą operacją, dysk był ustawiony na 100GB w trybie “expandable”, bez podziału na 2GB części

[norbert.macair: CentOS-01-0.hdd]$ ll
total 3.8G
-rw------- 1 norbert staff    0 Sep 21 01:21 CentOS-01-0.hdd
-rw------- 1 norbert staff 2.8G Sep 21 02:01 CentOS-01-0.hdd.0.{39a46e95-08c5-414c-bc03-6581f77b6dda}.hds
-rw------- 1 norbert staff 988M Oct 14 14:11 CentOS-01-0.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw------- 1 norbert staff  14K Oct 14 13:09 CentOS-01-0.hdd.drh
-rw------- 1 norbert staff 1.9K Sep 21 02:01 DiskDescriptor.xml
-rw------- 1 norbert staff 1.5K Sep 21 01:47 DiskDescriptor.xml.Backup

Po zabiegu, zajmujemy niepotrzebnie ponad 95GB

[norbert.macair: CentOS-01-0.hdd]$ ll
total 101G
-rw-r--r-- 1 norbert staff    0 Oct 14 14:29 CentOS-01-0.hdd
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:25 CentOS-01-0.hdd.copy.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:25 CentOS-01-0.hdd.copy.1.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.10.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.11.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.12.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.13.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.14.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.15.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.16.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.17.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.18.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.19.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:25 CentOS-01-0.hdd.copy.2.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.20.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.21.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.22.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.23.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.24.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.25.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.26.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.27.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:27 CentOS-01-0.hdd.copy.28.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.29.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.3.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.30.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.31.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.32.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.33.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.34.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.35.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.36.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.37.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.38.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.39.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.4.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.40.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:28 CentOS-01-0.hdd.copy.41.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.42.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.43.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.44.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.45.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.46.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.47.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.48.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.49.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.5.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.50.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:29 CentOS-01-0.hdd.copy.51.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 1.1G Oct 14 14:29 CentOS-01-0.hdd.copy.52.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.6.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.7.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.8.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 1 norbert staff 2.0G Oct 14 14:26 CentOS-01-0.hdd.copy.9.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-rw-rw- 1 norbert staff    0 Oct 14 14:20 CentOS-01-0.hdd.copy.hdd
-rw-r--r-- 1 norbert staff  21K Oct 14 14:25 DiskDescriptor.xml
-rw-r--r-- 1 norbert staff  21K Oct 14 14:25 DiskDescriptor.xml.Backup

Powrót do dysku w trybie “expandable”:

prl_disk_tool convert --expanding --split --hdd /Users/norbert/Documents/Parallels/CentOS-01.pvm/CentOS-01-0.hdd

Mała uwaga, u mnie zabawa w konwersje zakończyła się komunikatem:

Not enough free space on the physical disk to complete the operation.

Dlatego warto się upewnić, że kiedy dysk nam “spuchnie” to będziemy mieć drugie tyle miejsca na jego odchudzanie albo pod ręką jakiś w miarę szybki dysk na którym będzie można tą operację wykonać

Rozszerzenie wirtualnego dysku:

prl_disk_tool resize --size 105G --split --hdd /Users/norbert/Documents/Parallels/CentOS-01.pvm/CentOS-01-0.hdd

Powyższe polecenie nie zawsze zwiększy od razu przestrzeń dostępną w wirtualnej maszynie, w zależności od systemu jaki na niej jest może być konieczne użycie narzędzi dyskowych systemu gościa. Dlatego najlepiej od razu definiować całkiem duży dysk w trybie “expandable” z podziałem dysku wirtualnego na 2GB części.

CentOS na Parallels

Wirtualizacja to jedna z technologii, jakie zdecydowanie podniosły komfort pracy wielu osobom. Pomijam oszczędności wynikające z lepszej utylizacji sprzętu, ale kiedy przypomnę sobie jak kiedyś przygotowywałem się do egzaminów MS ze stertą blaszaków stojących jeden na drugim, to do tej pory przechodzą mnie dreszcze. Olbrzymia strata czasu. Teraz mając 16GB pamięci można sobie postawić całkiem rozbudowane środowisko, testować, robić snapshoty i co tam dusza zapragnie.

Właśnie skończyłem instalować CentOS-a na Parallels. Poniżej kilka kroków, jakie zazwyczaj wykonuje po tej opercji.

Dodanie uzytkownika do sudoers. Przechodzimy na root-a su - i uruchamiamy edytor visudo następnie dopisujemy swojego użytkownika, poniżej root-a np.

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
norbert ALL=(ALL)       ALL

Instalacja Paralles Tools. Jeśli jest zamontowana płyta instalacyjna CentOS należy ją odmontować, a następnie z menu wybieramy “Virtual Machine” i “Install Paralles Tools…”, potem

cd /media/Parallels\ Tools/
sudo ./install

Później wybieramy tylko kilka razy “Next” i restartujemy maszynę.

Ustawienie nazwy hosta, vi /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=centos-02.local

Ustawienie automatycznego uruchamiania ssh i jego uruchomienie

sudo chkconfig sshd on
sudo service sshd start

Włączenie automatycznego logowania, vi /etc/gdm/custom.conf

[daemon]
AutomaticLoginEnable=true
AutomaticLogin=norbert

Wyłączenie wygaszacza ekranu, dzięki któremu maszyna nie będzie automatycznie blokowana.

sudo gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type bool --set /apps/gnome-screensaver/idle_activation_enabled false

Uruchamianie maszyny w trybie tekstowym, zazwyczaj nie potrzebuje interfejsu graficznego. Edycja vi /etc/inittab, zmiana wartości id na 3

# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

Parallels ma bardzo pożyteczne polecenie prlctl. Wylistowanie wszystkich zainstalowanych maszyn wirtualnych prlctl list -a

Uruchomienie maszyny to prlctl start CentOS-01

To co jest najlepsze w powyższym poleceniu to to, że wirtualna maszyna uruchamiana jest w tle i nie pojawia się okno aplikacji Parallels. Do maszyny można się dostać np. przez ssh, jak dla mnie to rewelacja.

Bardzo mile zaskakuje całkiem niskie obciążenie systemu. Przy uruchomionych czterech maszynach wirtualnych 2xCentOS w trybie graficznym z dysku USB 3.0 (pomarańczowa strzałka), 1xCentOS w trybie tekstowym (zielona), 1xOSX Mountain Lion (niebieska) zajętość procesora sięga tylko ok. 10%. Na systemach nic się nie dzieje, jest tylko zalogowany użytkownik ale i tak wydaje mi się, że to całkiem nieźle. Tym bardziej, że to MBA. Jak widać jeśli nie potrzebujemy grafiki to warto uruchamiać wirtualne OS-y w trybie tekstowym na co wskazuje zielona strzałka.