# [HOWTO] Szyfrowany system + TrueCrypt + własny initramfs

## manwe_

1. Wstęp

Wersja: 0.0.1

Ostatni update: 29.10.2007 05:29

Trochę z nudów, trochę z chęci podzielenia się doświadczeniem [ale głównie z nudów], postanowiłem spłodzić swoje drugie howto. Tym razem o mojej, póki co, największej zabawie z przeróbkami systemu – szyfrowaniu całości. Na gentoo-wiki można znaleźć howto jak to zrobić za pomocą DM-Crypt'a, moje po części będzie podobne. Co do różnic - po pierwsze ja stwierdziłem, że skorzystam z TrueCrypt'a, do którego już przez dłuższy okres używania [odległe lata M$okien] nabrałem zaufania. Po drugie chciałem mieć podwójny system dostępu, za pomocą pendrive'a, który w całości tego howto pełni rolę punktu wyjścia – zawiera niezaszyfrowane dane, klucze, a jego strata kładzie wszystko, oraz za pomocą haseł. I po trzecie, powód już nie dla mnie - osoby, które mają M$Win na dysku, mogą zaszyfrować partycję fat|ntfs z jakimiś danymi, będą one dalej dostępne spod okien.  

2. Wymagania

Potrzebne są:

- wiedza, nie będę tutaj opisywał wszystkiego od podstaw, pewna znajomość systemu, skryptów bash'owych, kompilacji, busybox'a, etc. jest wymagana,

- pendrive, karta pamięci, lub cokolwiek "zewnętrznego" co wędruje zawsze z nami i nigdy nie jest zostawione razem z komputerem [w moim przypadku notebookiem] bez naszej uwagi,

- czysta partycja [lub kilka], która zostanie zakodowana TrueCrypt'em i gdzie zostanie przeniesiony cały system

- niezaszyfrowany /boot, gdzie wyląduje jajko, grub i własny initramfs - niestety na to łatwego obejścia chyba nie ma, sam bootloader nie odszyfruje partycji, musi to zrobić jajko, które skądś trzeba odczytać, na dobrą sprawę można je trzymać również na pendrive, ale nie ma też co kombinować, tego nie ma chyba potrzeby ukrywania  :Smile: 

- truecrypt [ # emerge truecrypt ],

- device mapper i niektóre algorytmy szyfrujące w jajku [ale o to powinien zakrzyczeć sam truecrypt przy emerge], dobrze jest to wszystko mieć wkompilowane statycznie, będzie mniej problemów przy tworzeniu initramfs.

3. Tworzenie partycji i kluczy

Obsługa truecrypt'a jest prosta jak konstrukcja cepa. Tworzenie zaszyfrowane partycji sprowadza się do odpalenia: 

```
# truecrypt -c /dev/sda2
```

i odpowiedzenia na kilka pytań. Co do wyboru algorytmu, wszystko dobrze opisane jest na stronie TC, ja wybrałem Blowfish - ma mocny 448-bitowy klucz i jest cholernie szybki [chyba najszybszy z dostepnych]. Dla kompletnych maniaków bezpieczeństwa polecam kombinacje, np. Serpent-Twofish-AES  :Wink:  W tej konfiguracji szyfrujemy za pomocą mocnego hasła, na razie bez klucza. To hasło jest naszą ostatnią deską ratunku, kiedy np. pendrive wypierze się w pralce ze spodniami. Następnie tworzymy kluczyk: 

```
# truecrypt --keyfile-create ~/true_key
```

Teraz trochę wytłumaczenia "o co biega". W pierwszym kilobajcie danego urządzenia TC za pomocą naszego hasła|klucza szyfruje klucz właściwy, którym kodowane są wszystkie dane na dysku. Taka kombinacja pozwala nam dowolnie modyfikować nasze hasła|klucze, wystarczy, że TC odkoduje klucz główny i zapisze go zakodowanego na nowo w początkowych obszarach. 

A po co to wszystko? Musimy mieć dwa takie nagłówki - pierwszy, który będzie na dysku przez większość czasu, z kluczem zakodowanym za pomocą podanego wcześniej hasła, i drugi za pomocą true_key. Mam nadzieję, że nie namieszałem, jakby co to krzyczeć  :Smile: 

Do rzeczy. Najpierw robimy zrzut do pliku pierwszego nagłówka, gdzie klucz główny jest zaszyfrowany za pomocą hasła:

```
# truecrypt --type normal --backup-headers ~/header_pass /dev/sda2
```

Teraz generujemy nowy nagłówek, gdzie klucz główny zaszyfrowany zostanie za pomocą true_key [w kolejnych pytaniach podajemy puste hasło i ścieżkę true_key]:

```
# truecrypt -C /dev/sda2
```

Backup nowego nagłówka:

```
# truecrypt --type normal --backup-headers ~/header_key /dev/sda2
```

I na koniec przywracamy stary:

```
# truecrypt --type normal --restore-header ~/header_pass /dev/sda2
```

W ten sposób mamy zaszyfrowaną partycję oraz 3 pliki: true_key, header_key i header_pass - wszystkie znajdą swoje miejsce @pendrive. 

4. Przenoszenie danych

Ten akapit pominę, ta umiejętność jest wymagana, wraz ze zdrowym rozsądkiem, od użytkownika  :Smile:  Montujemy partycję TC, tworzymy na niej system plików i przenosimy [póki co, kopiujemy] wszystkie dane. Jeżeli system podzielony jest na kilka patrycji, wszystkie kroki z tworzeniem kluczy, żonglowaniem nagłówkami, etc. z punktu 3. powtarzamy dla każdej z nich. 

5. fstab

Niewielka zmiana tutaj, zamiast /dev/sdaX wpisujemy /dev/mapper/truecryptX [licząc od zera, w kolejności odkodowywania partycji, czyli root będzie to truecrypt0].

6. uvesafb + splash

Żeby całość wyglądała ładnie, używam uvesafb [x86_64, nie mogłem poprzednika - vesafb_tng] oraz fbcondecor, który pozwala już pod koniec ładowania jajka ustawić tło. Działający uvesafb, lub inny sterownik fb, oraz skompilowanie splashutils i znalezienie wymarzonego theme wyrzucam poza ramy tego tekstu.

7. initramfs

Najwięcej zabawy i przekleństw czeka w tym punkcie. Nie będę tłumaczył tutaj co to jest initramfs, praktyczną wiedzę o nim dorwałem na gentoo-wiki, więć tam również odsyłam. Chciałem osiągnąć pełne zintegrowanie szyfrowania z init'em. Opiszę od końca, jak całość wygląda: komputer się włącza, pokazuje grub, uruchamia jajko [tryb quiet, nic nie widać], które b. szybko [~2 sek.] zmienia rozdzielczość z użyciem uvesafb oraz ustawia tło [fbcondecor]. Po chwili pokazuje się zmodyfikowane przeze mnie przywitanie 

```
   Gentoo/Linux; Preloader by manwe; http://www.gentoo.org/

   Copyright 1999-2007 Gentoo Foundation; Distributed under the GPLv2
```

Dalej skrypt czeka chwilę na pojawienie się pendrive'a, jeżeli go znajdzie - montuje, szuka na nim kluczy, odkodowuje partycję główną i dalej przekazuje działanie do oryginalnego init'a. Jeżeli pendrive się nie pojawi, prosi o hasło lub jego włożenie i klepnięcie enter'a - i tak do skutku, aż dostanie coś poprawnego. Całość jest ubrana jak skrypty Gentoo, krótkie komunikaty, z zieloną gwiazdką na początku, więc nie widać tak naprawdę gdzie kończy się initramfs, a gdzie zaczyna właściwy init  :Smile:  Brzmi i wygląda ładnie, ale teraz trzeba do tego dojść. Pamiętam, że podczas pisania tego, w ciągu 2 dni [tyle łącznie zajęła mi cała zabawa z szyfrowaniem] restartowałem system chyba z 40 razy  :Wink: 

Do rzeczy. Co potrzebujemy w initramfs:

- busybox - na czymś to musi działać 

- truecrypt - chodzi o binarkę

- dmsetup, losetup - wymagane przez truecrypt'a

- setfont - o tym później

- kilka urządzeń w /dev

- moduł truecrypt.ko i modules.dep

- v86d [jeżeli używasz uvesafb] i fbcondecor_helper [ze splashutils]

- splash theme

- czcionkę, która jest w systemie [u mnie: lat2-14.psfu.gz]

Wszystkie binarki muszą być statyczne [gdyby zacząć dodawać wszystkie lib'y - archiwum rozrosło by się za bardzo], niektóre jak busybox, czy fbcondecor_helper już powinny być, o resztę musisz zadbać sam(a). Pełna struktura folderów i plików wygląda tak: 

```

./bin/

./bin/sh -> busybox - symlink

./bin/mount -> busybox - symlink

./bin/init-early.sh - skrypt, opisze później

./bin/dmsetup

./bin/setfont

./bin/losetup

./bin/truecrypt

./bin/pendrive - skrypt

./bin/busybox

./dev/

./dev/fb0 - to jak i pozostałe urządzenia blokowe, do zrobienia za pomocą mknod

./dev/mem

./dev/sr0

./dev/tty

./dev/null

./dev/ram0

./dev/tty1

./dev/zero

./dev/console

./dev/mapper/

./etc/

./etc/mtab

./etc/splash/

./etc/splash/default -> gentoo - symlink

./etc/splash/gentoo/

./etc/splash/gentoo/Vera.ttf

./etc/splash/gentoo/images/

./etc/splash/gentoo/images/verbose-1024x768.png

./etc/splash/gentoo/1024x768.cfg

./lib/

./lib/rcscripts/

./lib/rcscripts/console/

./lib/rcscripts/console/font

./lib/rcscripts/console/lat2-14.psfu.gz

./lib/modules/

./lib/modules/name/

./lib/modules/name/block/

./lib/modules/name/block/truecrypt.ko

./lib/modules/name/modules.dep

./lib/splash/

./lib/splash/sys/

./lib/splash/proc/

./proc/

./proc/self/

./proc/self/exe -> ../../bin/busybox - symlink

./sbin/

./sbin/v86d

./sbin/fbcondecor_helper

./init - skrypt

```

Sporo  :Smile:  Tak jak napisałem, wszystko co w /bin i /sbin, a nie jest skryptem, trzeba uprzednio skopiować|skompilować, a urządzenia w /dev/ zrobić. Teraz poszczególne pliki:

/etc/mtab:

```
proc /proc proc  0 0
```

/lib/rcscripts/console/font:

```
lat2-14.psfu.gz
```

W zasadzie poza skryptami jest to już wszystko. Niektóre foldery w powyższym spisie są puste. Dla przykładu bez /lib/splash/sys/ i /lib/splash/proc/ nie działa ustawianie tła, a bez /proc/mapper/ truecrypt nie był w stanie stworzyć urządzeń odkodowanych partycji. Skrypt, po kolei od najmniejszego.

/bin/init-early.sh - jest to kopia z init'a serwowanego przez Gentoo, ustawia czcionkę konsoli. Odpalamy go zanim cokolwiek się pojawi na ekranie, dzięki temu unikniemy brzydkiego wyczyszczenia konsoli w trakcie ładowania stage boot:

```
#!/bin/sh

# Try and set a font and as early as we can

termencoding="(K"

[ -e "${RC_LIBDIR}"/console/unicode ] && termencoding="%G"

printf "\033%s" "${termencoding}"

if [ -r "${RC_LIBDIR}"/console/font -a -x /bin/setfont ] ; then

        font="$(cat "${RC_LIBDIR}"/console/font)"

        CONSOLE="${CONSOLE:-/dev/console}"

        [ -c "${CONSOLE}" ] && cons="-C ${CONSOLE}"

        setfont ${cons} "${RC_LIBDIR}"/console/"${font}"

fi

```

Nic wymyślnego  :Smile:  Dalej zaczyna się pod górkę, skrypt /bin/pendrive szuka urządzenia, stara się je zamontować i odkodować partycję /. Od razu powstał problem. W tak okrojonej wersji systemu jaką funduje nam jajko + busybox nie ma udev, czy innych wspomagaczy, które pozwoliły by wykryć obecność urządzenia i literę sdX, którą otrzymał - o bloki dla /dev/ tutaj trzeba zadbać samemu. Jedyny sposób jaki znalazłem, jak wydłubać informacje o tym czym pendrive faktycznie jest na miejscu i gdzie, to podanie w parametrach startowych jego nazwy i numeru partycji, za którą przegrzebywany jest dmesg. U mnie jest to: "pen_name=IntelligentStick pen_part=3". Aha, moje skrypty mogą być trochę nieudane, po pierwsze nie znam za dobrze awk|sed, po drugie nie starałem się ich pisać jakoś super ładnie. 

/bin/pendrive:

```

#!/bin/sh

X=`dmesg | grep -C 1 $1 | tail -n 1 | awk -F\[ '{ print $2 }' | awk -F\] '{ print $1 }'`

[ -z "$X" ] && exit 1

mount /dev/${X}${2} /pen 2> /dev/null

[ $? -ne 0 ] && exit 1

for A in /pen /pen/.keys /pen/.keys/true_key /pen/.keys/h_key /pen/.keys/h_pass; do

        if [ ! -f $A -a ! -d $A  ]; then

                echo '^[[01;31m * ^[[0m'"Pen found, but missing ${A}!"

                umount /pen

                exit 1

        fi

done

echo -n '^[[01;32m * ^[[0mPen found. Loading key header. '

X=`truecrypt --type normal --restore-header /pen/.keys/h_key /dev/sda2 2>&1`

[ $? -ne 0 ] && exit 1

echo "$X"

echo -n '^[[01;32m * ^[[0mMounting partition using key. '

X=`truecrypt -p '' -k /pen/.keys/true_key $3 2>&1`

[ $? -ne 0 ] && exit 1

echo "$X"

echo -n '^[[01;32m * ^[[0mRestoring password header. '

X=`truecrypt --type normal --restore-header /pen/.keys/h_pass /dev/sda2 2>&1`

[ $? -ne 0 ] && exit 1

echo "$X"

umount /pen

exit 0

```

Skrypt jest wywoływany z parametrami "IntelligentStick 3 /dev/sda2", czyli $1=IntelligentStick, $2=3, $3=/dev/sda2. Najpierw w dmesg'u wyszukiwana jest informacja o $1 i jakie sdX dostał [linijka poniżej nazwy], w nawiasach kwadratowych. Potem mount do /pen, dalej sprawdzenie czy pliki z kluczami i nagłówkami są na miejscu [moje nazwy plików są trochę inne, niż opisywałem na początku przy rozdziale o TC, ale chyba widać wyraźnie o co biega], przywrócenie nagłówka z kluczem głównym zakodowanym kluczem @pendrive, odszyfrowanie partycji, przywrócenie pierwotne nagłówka [hasłowego] i odmontowanie /pen - tutaj chwilowo jego rola się kończy. Mała uwaga od razu, ^[ to escape char, a nie ^ i [  :Smile: 

No i ostatni, najdłuższy skrypt /init. On robi prawie wszystko, jest wywoływany przez jajko, musi pociągnąć całe przygotowanie i na koniec przekazać robotę do właściwego /sbin/init z Gentoo:

```
#!/bin/sh

#basic

/bin/busybox mount -t proc proc /proc 2> /dev/null

mkdir /new

mkdir /pen

mkdir /root

#get params

CMD=`cat /proc/cmdline | sed 's/silent/verbose/g'`

ROOT=`cat /proc/cmdline | tr ' ' '\n' | grep -E '^root=' | awk -F= '{ print $2 }'`

PEN=`cat /proc/cmdline | tr ' ' '\n' | grep -E '^pen_name=' | awk -F= '{ print $2 }'`

PART=`cat /proc/cmdline | tr ' ' '\n' | grep -E '^pen_part=' | awk -F= '{ print $2 }'`

[ -z "$ROOT" ] && echo '^[[01;31m ROOT is empty. I have to commit suicide.' && exit

#mknod

cd /dev

for N in 0 16 32 48; do

        case $N in

                0)  X='a' ;;

                16) X='b' ;;

                32) X='c' ;;

                48) X='d' ;;

        esac

        mknod sd${X} b 8 ${N} &> /dev/null

        for M in 1 2 3 4 5 6 7 8 ; do

                let Y=${N}+${M}

                mknod sd${X}${M} b 8 ${Y} &> /dev/null

        done

done

cd /

#modules

cd /lib/modules

mv name `uname -r`

cd /

modprobe truecrypt

#setfont

export RC_LIBDIR="/lib/rcscripts/"

/bin/init-early.sh

#shell hack

if [ "$ROOT" = "shell" ]; then

        exec /bin/sh

fi

#banner

clear

echo; echo '^[[01;32m   Gentoo/Linux; ^[[01;33mPreloader by manwe; ^[[01;34mhttp://www.gentoo.org/';

echo '^[[0m   Copyright 1999-2007 Gentoo Foundation; Distributed under the GPLv2'; echo;

#try mount

mount $ROOT /new 2> /dev/null

#wait for usb

if [ ! -f /new/sbin/init ]; then

        echo -n '^[[01;32m * ^[[0mWaiting for usb devices'

        for X in 1 2 3 4 5 6; do

                echo -n '.'

                sleep 1

        done

        echo

#main loop

        /bin/pendrive $PEN $PART $ROOT

        if [ $? -ne 0 ]; then

                while [ -z "$END" ]; do

                        echo '^[[01;32m * ^[[0mInsert pendrive or enter the password...'

                        S=`stty -g`; stty -echo

                        read P

                        stty $S

                        if [ "${P}" ]; then

                                echo -n '^[[01;32m * ^[[0mMounting partition using given password. '

                                T=`truecrypt -p "$P" -k '' $ROOT 2>&1`

                                [ $? -eq 0 ] && END="end"

                                echo "$T"

                        else

                                /bin/pendrive $PEN $PART $ROOT

                                [ $? -eq 0 ] && END="end"

                        fi

                done

        fi

fi

#end

#umount /proc 2> /dev/null

if [ -b /dev/mapper/truecrypt0 ]; then

        mount /dev/mapper/truecrypt0 /new

        exec /bin/busybox switch_root /new /sbin/init $CMD

else

        if [ -f /new/sbin/init ]; then

                exec /bin/busybox switch_root /new /sbin/init $CMD

        else

                echo '^[[01;31m * ^[[0m'"No /dev/mapper/truecrypt0 or /sbin/init! What the fuck? Well... I'll die now ;-)"

        fi

fi

```

Ponieważ całość jest podzielona komentarzami na działy, tak to też opiszę. 

#basic - brak komentarza  :Wink: 

#ger params - tutaj zbierane są informacje przekazane jako parametry dla jajka, jak root=, pen_name=, czy pen_part

#mknod - tworzenie nodów które pokrywają większość zapotrzebowania na /dev/sdX [nie umieszczałem ich statycznie w /dev initramfs, zaśmiecały czytelność]

#modules - zmiana nazwy folder /lib/modules/name na nazwę jaką ma jajko, to również jak poprzedni punkt powstało z wygodny tworzenia initramfs, nie muszę zmieniać z nowym jajkiem nazwy folderu

#setfont - zmiana czcionki zanim cokolwiek wypiszemy na ekran [tak, jeszcze nic się nie pojawiło!]

#shell hack - taki mały myk który sobie zostawiłem, jeżeli w parametrach gruba jako root= zostanie wpisane shell, skrypt poprzestanie w tym miejscu i uruchomi sh, świetne miejsce na np. naprawę uszkodzonego systemu plików, żadna partycja dyskowa nie jest w tym momencie używana

#banner - wypisujemy zmodyfikowany banner 

#try mount - całość starałem się napisać uniwersalnie, jeżeli jako root zostanie podana "zwykła" niezaszyfrowana partycja, mount tutaj się uda, warunek [ ! -f /new/sbin/init ] nawali i cała zabawa z TC zostanie pominięta

#wait for usb - skrypt czeka 6 sekund na pojawienie się pendrive [tyle zajmuje w moim jajku wykrycie] i jeżeli go znajdzie od razu przejdzie do /bin/pendrive, dzięki czemu jeżeli pen został wpakowany w port już wcześniej całość zotanie załatwiona bez interakcji z użyszkodnikiem, system wstanie zwyczajnie jak każdy inny [tylko kilka sekund dłużej mu to zajmie]

#main loop - nie wykryto pendrive, odczytanie hasła od użytkownika i próba odkodowania z jego użyciem [truecrypt -p "$P"] lub, przy klepnięciu enter, ponowne sprawdzenie /bin/pendrive - i tak w kółko, aż się uda

#end - jeżeli jest urządzenie /dev/mapper/truecrypt0 [odszyfrowane /dev/sda2], mount - switch_root, czyli przekazanie pałeczki do /sbin/init z Gentoo, w przeciwnym wypadku sprawdzenie czy jest już może /new/sbin/init [sytuacja montowania partycji bez TC] i znów switch_root, albo ... die - skrypt nie może znaleźć init'a

No to ufff  :Smile:  To wszystko razem zebrane tworzy cały initramfs. Na koniec z tych wszystkich folderów trzeba stworzyć jeden plik:

```
cd ~/initramfs/ [czy tam inny folder gdzie pracowałeś]

find . -print | cpio -o -H newc | gzip -9 > ../initramfs

cp ../initramfs /boot/

```

8. Grub

Po ciężkim pkt. 7, chwila odpoczynku - niewielkie zmiany w grub.conf. Trzeba dodać parametry identyfikujące pendrive: pen_name=IntelligentStick pen_part=3 oraz polecenie initrd. 

```
title  Gentoo Linux kernel-2.6.23-kamikaze4-ev18

kernel (hd0,0)/kernel-2.6.23-kamikaze4-ev18 splash=verbose,theme:gentoo quiet video=uvesafb:1024x768-24,mtrr:3,ypan pen_name=IntelligentStick pen_part=3 root=/dev/sda2

initrd (hd0,0)/initramfs-2.6.23-kamikaze4-ev18

```

Tak to wygląda u mnie.

9. Dopieszczanie

To by było w zasadzie wszystko. Partycje zaszyfrowane, initramfs działa, system wstaje, jest jeszcze tylko kilka drobnych poprawek:

1. Ponieważ initramfs+pendrive zaopiekowały się tylko /, trzeba podmontować pozostałe partycje [o ile są]. U mnie odstawiają to dwa takie bloki kodu [w /etc/conf.d/local.start]:

```
if [ -f /mnt/flash/pqi3/.keys/h_key_home -a -f /mnt/flash/pqi3/.keys/true_key_home -a -f /mnt/flash/pqi3/.keys/h_pass_home ]; then

        truecrypt --type normal --restore-header /mnt/flash/pqi3/.keys/h_key_home /dev/sda3 &> /dev/null

        truecrypt -p '' -k /mnt/flash/pqi3/.keys/true_key_home /dev/sda3 /home

        truecrypt --type normal --restore-header /mnt/flash/pqi3/.keys/h_pass_home /dev/sda3 &> /dev/null

fi

```

Robi to prawie to samo co /bin/pendrive powyżej, ale już w prostszej formie, pendrive został wykryty w trakcie startu systemu i podmontowany do /mnt/flash/pqi3 - nie musimy się martwić o jego obsługę.

2. Jajko nie słucha parametru quiet. A dokładniej obsługa scsi. Pomimo próby wyciszenia go tak, aby pierwszą linijką, która pokazuje się już na kolorowym tle, był baner Gentoo - dostawałem 3 linijki informacji "Assuming drive cache: write through". Jedyny sposób to po prosty je wykomentować w drivers/scsi/sd.c i przekompilować jajco.

3. Banner gentoo i "INIT 2.xx" - oryginalny banner Gentoo i informacja o wersji init'a pojawią się w momencie przekazania sterownia do /sbin/init przez initramfs. Tutaj również trzeba komentować, ja robię to patch'ami dodawanymi do ebuild'ów: 

```

$ cat init_silent.patch

--- src/init.old.c      2004-07-30 14:16:20.000000000 +0200

+++ src/init.c          2007-08-11 16:21:10.000000000 +0200

@@ -762,12 +762,12 @@

        /*

         *      And log to the console.

-        */

+

        if (loglevel & L_CO) {

                print("\rINIT: ");

                print(buf);

                print("\r\n");

-       }

+       }*/

 }

$ cat baselayout_silent.patch

--- src/rc.old.c        2007-10-12 16:59:31.693372287 +0200

+++ src/rc.c    2007-10-12 16:59:55.698710122 +0200

@@ -932,12 +932,12 @@

                        uname (&uts);

-                       printf ("\n");

+                       /*printf ("\n");

                        printf ("   %sGentoo/%s; %shttp://www.gentoo.org/%s"

                                        "\n   Copyright 1999-2007 Gentoo Foundation; "

                                        "Distributed under the GPLv2\n\n",

                                        ecolor (ECOLOR_GOOD), uts.sysname, ecolor (ECOLOR_BRACKET),

-                                       ecolor (ECOLOR_NORMAL));

+                                       ecolor (ECOLOR_NORMAL));*/

                        if (rc_env_bool ("RC_INTERACTIVE"))

                                printf ("Press %sI%s to enter interactive boot mode\n\n",

```

10. Podsumowanie

To w zasadzie wszystko. W ten sposób otrzymujemy ładny system, ze zintegrowaną procedurą ładowania, obsługą zarówno kluczy @pendrive, jak i haseł. TC + Blowfish zapewniają szybkie działanie [pojedyńcze % zużycia CPU u mnie, nie wpłynęły w żaden sposób na wygodę pracy], a w razie skradzenia laptopa, lub zwinięcia go przez CBA, możemy spać spokojnie  :Smile:  Dla dopełnienia ważności tego pendrive'a i przyjemności pracy z systemem, można tam wrzucić klucze pam_usb, ssh i inne wspomagacze [część z tego opisałem w swoim pierwszym HOWTO]. Sam trzymam na nim jeszcze backup najważniejszych danych, takich jak mail'e czy kody źródłowe - codziennie o 04:00 rsync robi swoje.

Pewnie nikt nie porwie się na odstawianie całości, którą ja z ciekawości popełniłem, ale może nauczy się czegoś nowego, jak np. obsługa initramfs i co można zrobić z systemem, jeszcze zanim ten rozpocznie procedurę ładowania. Podziękowania składam wolnemu czasowi, dzięki któremu miałem okazję to wszystko zrobić  :Wink: 

----------

## Poe

dla mnie genialne  :Smile:  moze kiedys bede mial wiecej czasu i drugi dysk, albo cos, bo narazie mam w lapku dysk 80 i nie mam jak i gdzie utworzyc partycji TC jednoczesnie majac normalne partycje, chyba ze jakies inne rozwiązanie?

btw, dodaje do  PolishFAQ.

----------

## SlashBeast

fajna sprawa, narazie mam szyfrowane tylko home i montuje z poziomu local.start ale moze i cały rootfs zaszyfruje.

----------

## 13Homer

Fajne HOWTO, ale trochę późno :) Jakieś dwa tygodnie temu siedziałem kilka dni, żeby testowo zaszyfrować z hasłem działający system. Udało się, na szczęście. Ale nie korzystałem z TrueCrypta, tylko Luksa.

Poza "zgodnością" z Windowsami ma TrueCrypt jakieś zalety w porównaniu z Luksem?

----------

## -BekaS-

Witam,

Bawię się z tym od jakiegoś czasu małymi krokami. Będzie w sumie już chyba drugi dzień, ale teraz stanąłem w miejscu. W jaki sposób mogę zbudować statyczną binarkę truecrypt ?? Niestety kompilowanie kodu ściągniętego ze strony projektu nic nie dało ( wykonałem polecenie ./build.sh). Takie samo pytanie dotyczy setfont. Jak to zrobić. Google jakoś średnio mi pomogło, a szukałem sporo.

pozdrawiam

----------

## 13Homer

To może zbuduj dynamicznie wiązaną i dodatkowo skopiuj biblioteki? Nie ma obowiązku korzystania wyłącznie ze statycznych wersji.

----------

## SlashBeast

przełącznik -static do gcc.

----------

## -BekaS-

 *13Homer wrote:*   

> To może zbuduj dynamicznie wiązaną i dodatkowo skopiuj biblioteki? Nie ma obowiązku korzystania wyłącznie ze statycznych wersji.

 

Przyznam szczerze, że akurat w tej kwestii jestem trochę zielony. Cały problem polega na tym, że w tym całym kodzie źródłowym jest pliczek ./build.sh nie ma żadnego configure ani nic w ten deseń. A ja nie za bardzo wiem jak się za to zabrać. Może jakiś bardziej łopatologiczny pomysł. Próbowałem sprawdzić zależności wykorzystując:

```
qdepends -a truecrypt

 * DEPEND

app-crypt/truecrypt-4.3a: virtual/linux-sources sys-fs/device-mapper virtual/linux-sources virtual/modutils sys-apps/sed

 * RDEPEND

app-crypt/truecrypt-4.3a: sys-fs/device-mapper virtual/modutils

 * PDEPEND

```

Odtworzyłem w initramfs strukturę katalogów taką, że pliki dmsetup i insmod (oczywiście wersje statyczne) są tam gdzie trzeba. Porobiłem symlinki do bin, już na wszelki wypadek, jednak dalej nic to nie pomogło. Przepisałem ten cały skrypt od nowa bo u mnie nie chciał zadziałać. Zbudowałem initramfs, a teraz stoję w tym jednym miejscu i kaplica. Po proszę o jakieś mini HOW-TO jak rozwalić ten problem. Myślę, że nie tylko mi się przyda  :Smile:  Może jakaś wcześniejsza wersja truecrypt pozwala na skompilowanie paczki statycznie ??

================================================

 *SlashBeast wrote:*   

> przełącznik -static do gcc.

 

Niestety nie jestem biegły w temacie obsługi gcc. Co konkretnie skompilować, z jakimi parametrami ??

pozdrawiam

Arfrever: Połączono posty.

----------

## manwe_

Nie pamiętam dokładnie, ale truecrypt w swojej paczce miał chyba folder gdzie robi się binarkę ["cli" czy jakoś tak], jest tam standardowy Makefile, odpalasz

```
make EXTRA_LFLAGS=-static
```

i powinno być.

----------

## 13Homer

 *-BekaS- wrote:*   

> Przyznam szczerze, że akurat w tej kwestii jestem trochę zielony. Cały problem polega na tym, że w tym całym kodzie źródłowym jest pliczek ./build.sh nie ma żadnego configure ani nic w ten deseń. A ja nie za bardzo wiem jak się za to zabrać. Może jakiś bardziej łopatologiczny pomysł.

 

Nie wiesz jak sprawdzić zależności od dynamicznych bibliotek? Budujesz aplikację i na jej binarce wykonujesz ldd, np. tak:

```
ldd /bin/true
```

co daje:

```
~# ldd /bin/true 

        linux-gate.so.1 =>  (0xffffe000)

        libc.so.6 => /lib/libc.so.6 (0xb7e4e000)

        /lib/ld-linux.so.2 (0xb7f91000)
```

Oznacza to, że w celu skorzystania z programu "true" musisz mieć także następujące biblioteki:

- ld-linux.so.2 w katalogu /lib

- libc.so.6 w katalogu /lib

i tyle. Kopiujesz program gdzie uważasz (najlepiej do bin oczywiście), do katalogu lib wrzucasz wymagane biblioteki i jedziesz.

----------

## -BekaS-

 *manwe_ wrote:*   

> Nie pamiętam dokładnie, ale truecrypt w swojej paczce miał chyba folder gdzie robi się binarkę ["cli" czy jakoś tak], jest tam standardowy Makefile, odpalasz
> 
> ```
> make EXTRA_LFLAGS=-static
> ```
> ...

 

I to był tip którego potrzebowałem. Z tą informacją wszystko poszło do przodu i już działa. Co prawda na swoje potrzeby zrobiłem to zupełnie inaczej ale bez tego HOW-TO nie dałbym rady. Wielkie dzięki.

pozdrawiam

================================================

 *13Homer wrote:*   

> Nie wiesz jak sprawdzić zależności od dynamicznych bibliotek? Budujesz aplikację i na jej binarce wykonujesz ldd, np. tak:
> 
> ```
> ldd /bin/true
> ```
> ...

 

Właśnie tego mi brakowało. Próbowałem to zrobić za pomocą:

```

qdepends -a truecrypt
```

Jednakże nie zdało się to na zbyt wiele. Teraz już będę wiedział na przyszłość. Dziękuję za porady i pozdrawiam.

-BekaS-

Arfrever: Połączono posty.

----------

