In questa quarta parte del tutorial vi tratterò gli aspetti avanzati dell'installazione di Linux su Xbox 360.
Gli argomenti saranno:
- Esecuzione di un'installazione personalizzata di Linux. Modifica del file di preconfigurazione. FTP Server.
- Installazione dei moduli.
- Personalizzazione del Kernel.
- Preparazione ed uso del file system RAM per velocizzare l'avvio ed il caricamento dei moduli del Sistema Operativo.
- Connessione remota alla console tramite protocollo SSH.
Terrò invece per un altro tutorial questi tre argomenti:
- Avvio della console tramite TFTP ed avvio di Linux via rete tramite NFS.
- Creazione della nostra distro Live personalizzata.
- Creazione di un'immagine della nostra installazione da remappare su HDD.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^
1. Impostare un FTP Server e modificare i file di pre e postconfigurazione.
Nell'eseguire un'installazione di Linux, come visto nelle precedenti parti di questo tutorial, si possono utilizzare due metodi.
Tramite script e tramite file di preconfigurazione.
L'installazione tramite script però presenta alcuni svantaggi rispetto alla concorrente.
Ad esempio non consente di selezionare il supporto per l'installazione in maniera dinamica. E l'installazione dell'ambiente grafico deve avvenire in due fasi.
Il metodo con il file di preconfigurazione è molto più immediato e dinamico e consente di avere un'installazione personalizzata.
Il file che ho caricato su libxenon.org, che voi applicate alla vostra installazione tramite kboot.conf, però ha una configurazione standard, ed è commentato in inglese. Ho deciso questo perchè ovviamente deve essere fruibile da chiunque.
Credo di aver commentato il file in maniera abbastanza esaustiva, quindi dovreste essere in grado di capire cosa state modificando. Prima di procedere alla modifica avremo però bisogno di un server FTP dove caricare i file che serviranno alla nostra installazione.
Chi è capace può già saltare questo passo, come chi, qui sul forum, ha optato per la soluzione di un server web Apache.
Il programma che andremo ad utilizzare è free e si chiama FileZilla FTP Server, scaricabile [URL="http://filezilla-project.org/download.php?type=server"]QUI[/URL]
Gli utenti Linux dovranno usare il daemon Very Secure FTP (vsftpd), ed editare il file di configurazione /etc/vsftpd.conf. Se ci fossero utenti interessati fatemelo sapere che includo la guida nel tutorial.
Scegliete nel metodo di installazione quello che più preferite:
L'installazione del programma come servizio, che parta con l'avvio di Windows, che parta manualmente, o non installare come servizio. Io consiglio la prima. Scegliete la porta sulla quale l'interfaccia di amministrazione del software dovrà porsi in ascolto. Quella predefinita va più che bene.
***Attenzione*** Qui non va settata la porta 21! Il protocollo FTP ascolta di default sulla porta 21 (le porte 20 e 21 sono utilizzate). L'impostazione vale per l'interfaccia di amministrazione.
Scegliete l'impostazione di default o "Start if user logs on, apply only to current user".
Impostate password di amministratore e "connect to this server".
Passiamo alla configurazione.
Sul pannello di configurazione cliccate su Edit/Users.
Nella nuova pagina, nella sezione a destra cliccate su Add ed inserite come utente: anonymous
Confermate e procedete a creare una cartella da usare come Home per il server.
Nella sezione centrale cliccate su Add e scegliete una cartella già creata nel vostro hard disk. La cartella creata sarà la root del server FTP.
Quindi se ad esempio la cartella sarà in "D:\Linux" e il vostro IP è 192.168.1.3, digitando quell'indirizzo nel browser sarete nella cartella Linux.
Qui potete vedere un esempio.
Ora che avete il vostro server FTP, bisogna caricarvi dentro i file di cui abbiamo bisogno e modificarli secondo le nostre esigenze.
Dobbiamo procurarci da file.libxenon.org i file preseed.cfg, postpreseed.sh e xorg.conf. Opzionalmente, xenosfb_drv.so, xorg.conf, vmlinux.
. Il file di preconfigurazione.
Questo è il file così come lo uso io per l'installazione:
Codice:
# Debian-Installer Automated Preconfiguration File by Ethereal
# Most of the settings are self-explanatory. Where they are not
# i'm providing them.
d-i debian-installer/locale string it_IT
# This internal setting allows the installer to skip
# "translation of the installer is not fully complete" warning
d-i localechooser/translation/warn-light boolean true
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/modelcode string pc105
d-i keyboard-configuration/layoutcode string it
d-i netcfg/choose_interface select eth0
# You can comment the entry below when configuring static IP address.
# Additional entries are to be provided.
d-i netcfg/disable_autoconfig boolean false
# Also if specified, you must pass hostname and domain to the kernel (kboot)
# Or d-i will ask for them
# Enter desired hostname. Not tested if it must match entry in kboot.conf
d-i netcfg/get_hostname string ethereal
# Enter desired domain. Not tested if it must match entry in kboot.conf
d-i netcfg/get_domain string localdomain
d-i mirror/country string gb
d-i mirror/http/hostname string ports.ubuntu.com
d-i mirror/http/directory string /
d-i mirror/http/proxy string
d-i mirror/suite string oneiric
d-i mirror/udeb/suite string oneiric
d-i mirror/udeb/components multiselect main, universe, multiverse, restricted
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Rome
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp1.inrim.it
# This internal setting allows the installer to skip missing modules warning
d-i anna/no_kernel_modules boolean true
# This internal setting allows the installer to skip unknown partition table warning
partman-partitioning partman-partitioning/unknown_label boolean true
d-i partman/unknown_label boolean true
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman/confirm_write_new_label boolean true
# This internal setting allows installer to skip partition type question
d-i partman-partitioning/choose_label string msdos
d-i partman/default_filesystem string ext3
d-i partman-auto/expert_recipe string \
boot-root :: \
48 64 128 msdos \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ fat16 } \
mountpoint{ /mnt/boot } \
. \
4096 10240 2199023255552 ext3 \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext3 } \
mountpoint{ / } \
. \
512 1024 300% linux-swap \
method{ swap } format{ } \
.
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i passwd/root-login boolean true
# Change root password needed
d-i passwd/root-password password x360root
# Confirm root password
d-i passwd/root-password-again password x360root
# Enter desired fullname
d-i passwd/user-fullname string Ethereal
# Enter desired account name
d-i passwd/username string ethereal
# Enter user password
d-i passwd/user-password password dx360
# Confirm user password
d-i passwd/user-password-again password dx360
#This option allows password weakness
d-i user-setup/allow-password-weak boolean true
#This option preseeds home folder encryption choice
d-i user-setup/encrypt-home boolean false
#This option adds current user to the underdefined groups
d-i passwd/user-default-groups string adm cdrom sudo sambashare
xserver-xorg xserver-xorg/config/device/driver select xenosfb
xserver-xorg xserver-xorg/autodetect_mouse boolean true
xserver-xorg xserver-xorg/autodetect_monitor boolean true
# This internal settings allow the installer to skip kernel image installing
d-i base-installer/kernel/image string none
d-i base-installer/kernel/override-image string none
d-i base-installer/kernel/linux/initramfs-generators string none
#This internal settings allow the installer to skip no kernel install warning
bootstrap-base base-installer/kernel/image select none
bootstrap-base base-installer/kernel/skip-install boolean true
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/restricted boolean true
d-i apt-setup/universe boolean true
d-i apt-setup/backports boolean true
d-i apt-setup/services-select multiselect security
d-i apt-setup/security_host string security.ubuntu.com
d-i apt-setup/security_path string /ubuntu
tasksel tasksel/first multiselect standard
d-i pkgsel/include string openssh-server build-essential subversion
# Select upgrade if needed
d-i pkgsel/upgrade select full-upgrade
# Select additional language packs
d-i pkgsel/language-packs multiselect it
d-i pkgsel/update-policy select unattended-upgrades
nobootloader nobootloader/confirmation_common note
popularity-contest popularity-contest/participate boolean false
d-i pkgsel/updatedb boolean true
postfix postfix/protocols select ipv4
d-i preseed/late_command string \
wget ftp://192.168.1.2/./postpreseed.sh; cp /postpreseed.sh /target/root/; chroot /target chmod +x /root/postpreseed.sh; chroot /target bash /root/postpreseed.sh
d-i finish-install/reboot_in_progress note
d-i debian-installer/exit/poweroff boolean true
Molte di queste impostazioni sono ad uso ristretto/interno, quindi non troverete alcun wiki su come utilizzarle nella documentazione ufficiale.
Vediamo cosa modificare secondo quello che può servire a noi.
Primo, la lingua di installazione:
Viene gestita da questa impostazione:
Codice:
d-i debian-installer/locale string it_IT
Siccome la traduzione italiana dell'installazione non è ancora completa, verrà restituito normalmente un messaggio d'errore, che noi evitiamo in questo modo:
Codice:
# This internal setting allows the installer to skip
# "translation of the installer is not fully complete" warning
d-i localechooser/translation/warn-light boolean true
Layout della tastiera:
Modifichiamo la stringa sotto in modo che abbia "it" come parametro.
Codice:
d-i keyboard-configuration/layoutcode string it
Impostazioni di zona e fuso orario:
Codice:
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Rome
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp1.inrim.it
Viene chiesto se si desidera criptare la propria cartella home. Per preconfigurare questa richiesta:
Codice:
#This option preseeds home folder encryption choice
d-i user-setup/encrypt-home boolean false
Per questo tutorial scegliamo di non cifrare la nostra cartella personale, per semplicità. Perchè se al posto di false metteste true, il programma di installazione chiederebbe altre informazioni, anche queste non disponibili ufficialmente. Se vorrete provare questa opzione, o non inserite questa stringa, in modo che vi venga chiesto cosa fare oppure chiedete supporto e vi indicherò le stringhe di configurazione da aggiungere.
Nel caso conosciamo già la partizione dove vogliamo installare Linux, possiamo preconfigurare anche questo:
Codice:
d-i partman-auto/disk string /dev/sda
Sostituite "/dev/sda" con il dispositivo equivalente nella vostra configurazione.
***ATTENZIONE*** nello scegliere il dispositivo. sda è il vostro HDD Xbox. Lo dico soprattutto per chi, magari, copia e incolla lo script senza leggere il tutorial. Io vi ho avvertiti e non mi ritengo responsabile di eventuali danni a seguito dell'uso non diligente di queste configurazioni.
Quindi nel caso di un dispositivo USB scegliete sdb, sdc, eccetera.
Utente root e utente Ubuntu.
Qui andiamo a preconfigurare la password di root e il nome utente Ubuntu e la sua password.
Codice:
# Change root password needed
d-i passwd/root-password password PASSWORD
# Confirm root password
d-i passwd/root-password-again password PASSWORD
# Enter desired fullname
d-i passwd/user-fullname string NOME UTENTE
# Enter desired account name
d-i passwd/username string NOME ACCOUNT (TUTTO MINUSCOLO)
# Enter user password
d-i passwd/user-password password PASSWORD UTENTE
# Confirm user password
d-i passwd/user-password-again password PASSWORD UTENTE
Normalmente vi verrebbe dato un avviso se la password non è abbastanza complessa. Preconfiguriamolo così:
Codice:
#This option allows password weakness
d-i user-setup/allow-password-weak boolean true
Questa preconfigurazione è invece relativa all'installazione:
Se desiderate venga installato anche l'ambiente grafico accanto a standard inserite "ubuntu-desktop"
Nella stringa sotto, scrivete qualunque altro pacchetto vogliate che sia installato durante il processo di installazione, che so, ffmpeg, gstreamer, vlc, openoffice...
Codice:
tasksel tasksel/first multiselect standard
d-i pkgsel/include string openssh-server build-essential subversion
# Select upgrade if needed
d-i pkgsel/upgrade select full-upgrade
# Select additional language packs
d-i pkgsel/language-packs multiselect it
L'ultima impostazione da modificare è questa:
Sono gli ultimi comandi che l'installazione esegue prima di terminare. Sostituite l'IP con quello della vostra configurazione.
Codice:
d-i preseed/late_command string \
in-target wget ftp://192.168.1.2/./postpreseed.sh -O /root/postpreseed.sh; \
in-target /bin/bash /root/postpreseed.sh
La configurazione del file di preseed è terminata.
Ora, perchè il vostro file venga recepito dal kernel per avviare l'installazione dovete modificare il file kboot.conf
Questo è l'esempio del mio, usato per l'installazione. Modificate l'indirizzo IP a seconda della vostra configurazione.
***ATTENZIONE*** Il punto dopo lo slash, [url]ftp://192.168.1.2[/url] ==> QUESTO! "/./" non lo togliete per nessun motivo! ***
Codice:
#KBOOTCONFIG
speedup=1
default=ubuntu_from_usb
timeout=10
ubuntu_from_usb="uda:/vmlinux initrd=uda:/initrd.gz url=ftp://192.168.1.2/./preseed.cfg auto=true ip=dhcp locale=it_IT console=tty0 fb=false video=xenonfb panic=10 --"
Passiamo al file di postconfigurazione. Questo è quello che uso io.
Ciò che dovete cambiare sono gli indirizzi IP perchè puntino al vostro server FTP e il bootentry perchè il parametro root punti alla partizione della vostra installazione.
Codice:
#!/bin/bash
wget ftp://192.168.1.2/xenosfb_drv.so_oneiric
mv xenosfb_drv.so_oneiric /usr/lib/xorg/modules/drivers/xenosfb_drv.so
wget ftp://192.168.1.2/vmlinux
mv vmlinux /boot/vmlinux
wget ftp://192.168.1.2/xorg.conf
mv xorg.conf /etc/X11/xorg.conf
cat > /boot/kboot.conf << EOF
#KBOOTCONFIG
; #KBOOTCONFIG (and nothing else) has to stay in FIRST line of the file
# General XeLL options
; netconfig - only if the ip= is valid and isnt the same as eventually in the previously parsed kboot.conf, the netconfig gets set
; ip=192.168.1.99
; netmask=255.255.255.0
; gateway=192.168.1.98
; set custom tftp server IP
; tftp_server=192.168.11.40
; XeLL's videomode - valid modes:
; 0: VIDEO_MODE_VGA_640x480
; 1: VIDEO_MODE_VGA_1024x768
; 2: VIDEO_MODE_PAL60
; 3: VIDEO_MODE_YUV_480P
; 4: VIDEO_MODE_PAL50
; 5: VIDEO_MODE_VGA_1280x768
; 6: VIDEO_MODE_VGA_1360x768
; 7: VIDEO_MODE_VGA_1280x720
; 8: VIDEO_MODE_VGA_1440x900
; 9: VIDEO_MODE_VGA_1280x1024
; 10: VIDEO_MODE_HDMI_720P
; 11: VIDEO_MODE_YUV_720P
; 12: VIDEO_MODE_NTSC
; videomode=10
; speed up cpu - valid modes:
; 1: XENON_SPEED_FULL
; 2: XENON_SPEED_3_2
; 3: XENON_SPEED_1_2
; 4: XENON_SPEED_1_3
; speedup=1
# Linux/ELF BootMenu
# Supplying boot-entries is optional - you can delete those from the config to just set "General XeLL options"
; label of the default bootenty - if none is set, it default to first bootentry
default=ubuntu_usb
; timeout of the bootmenu in seconds - timeout=0 skips user input completely!
timeout=10
; Kernel / Bootentries
; ! first parameter: kernel path !
ubuntu_usb="uda:/vmlinux root=/dev/sda5 console=tty0 video=xenonfb ip=dhcp panic=60"
EOF
update-alternatives --set editor /usr/bin/vim.tiny
echo "xbox ALL=(ALL) ALL">>/target/etc/sudoers
sync
Infine, il file xorg.conf.
Questo è il mio:
Codice:
Section "Device"
Identifier "Microsoft Xenon Framebuffer"
Driver "xenosfb"
Option "UseFBDev" "true"
EndSection
I vostri file sono pronti. Potete eseguire la vostra installazione personalizzata.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2. L'installazione dei moduli.
Il kernel che ho fornito in un post precedente ha un solo modulo da installare. Come contropartita, caricando tutto in memoria, rende il S.O. più pesante.
I file .diff e .config standard invece presentano quasi la totalità dei driver per Xbox 360 caricati come moduli.
Questo vuol dire che alla prima installazione di Linux sulla console voi non avrete la disponibilità di tutti i dispositivi perchè i rispettivi moduli non sono installati.
Infatti, nel caricamento del kernel, dovreste vedere a schermo il messaggio:
[FATAL] Could not load kernel modules.....
Ecco come si installano i moduli:
Dalla vostra macchina virtuale Linux, quella dove avete compilato il vostro kernel (ecco perchè è necessario imparare a compilarselo un kernel, altrimenti non avrete mai i moduli associati), da terminale, nella cartella del kernel, lanciate:
Codice:
make ARCH=powerpc CROSS_COMPILE=xenon- INSTALL_MOD_PATH=/home/ethereal/linux-2.6.38.8/modules modules_install
Sostituite il path con il vostro path. Il comando sopra, esegue un ulteriore compilazione e installazione dei moduli creati durante la compilazione del kernel e copia i file nella cartella "modules" nella vostra cartella del kernel.
Questa cartella però non potrete mai copiarla cosi com'è in una chiave USB o via SMB, perchè contiene dei link simbolici.
Entrate nella cartella modules e navigate fino alla cartella 2.6.38.8. All'interno troverete una cartella "kernel" e vari files, comprese due cartelle, link simbolici. Copiate la cartella kernel ed i file in una chiave USB, magari facendone prima un pacchetto compresso.
Nel vostro Linux su Xbox 360, andate nella cartella "/lib/modules"
Create una cartella "2.6.38.8-xbox0.11.1", via ambiente grafico o da terminale con "mkdir".
Copiate o scompattate all'interno i file dei moduli.
Poi, da terminale, nella cartella dei moduli:
Riavviate, et voilà, niente più messaggio d'errore e moduli caricati. Adesso avete il controllo di tutto l'HW della Xbox.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3. Installazione di un RAM File System.
Initramfs. Cos'è?
E' un filesystem con privilegi di root, caricato in uno stadio primitivo durante il processo di boot del Sistema Operativo. Permette di eseguire molte funzioni, non normalmente gestite dal kernel.
Dopo l'inizializzazione di base il kernel estrae l'archivio initramfs e lo monta come un filesystem di root temporaneo. initramfs contiene i moduli del kernel e programmi che girano nello userspace necessari per inizializzare il dispositivo fisico o logico che contengono il vero e proprio filesystem root. Si passa poi allo script di init che carica i moduli ed esegue altre operazioni di inizializzazione. Dopodiche init cancella initramfs dalla memoria, monta il filesystem di root reale e passa il controllo al programma /sbin/init.
Gli obiettivi principali che possiamo ottenere con l'installazione di un initramfs sono ad esempio:
- La dimensione del kernel viene tenuta sotto controllo, consentendo la maggior parte dei driver per essere compilati come moduli (senza initramfs tutti i moduli e i driver devono essere integrati nel kernel o caricati in memoria permanentemente)
- Configurazioni che richiedono inizializzazione che non può essere eseguita nel kernel, ad esempio una modalità di ripristino d'emergenza (rescue)
Ad esempio senza questo passaggio non riuscirete ad ottenere il login di Ubuntu 12.04 per un bug in Upstart, a meno che non scegliate di non loggare le operazioni del kernel (e non è mai una buona idea).
Quindi, per creare un initramfs: (L'operazione riuscirà solo dopo aver installato preventivamente i moduli.)
Da terminale:
Codice:
sudo update-initramfs -c -k 2.6.38.8-xbox0.11.1
Quest'operazione crea un nuovo file initramfs e lo esporta nella cartella boot del vostro filesystem.
Copiate quel file nella vostra chiave USB, rinominandolo, se credete
Adesso modificate il file kboot.conf: (esempio)
Codice:
uda:/vmlinux initrd=uda:/initramfs.gz root=/dev/sda5.........
Al riavvio potrete notare come, prima della schermata di login, il kernel eseguirà diverse operazioni aggiuntive che prima non poteva eseguire.
Ma, cosa più importante, adesso potete compilare un kernel davvero leggero, lasciando ad initramfs il caricamento dei moduli aggiuntivi. E le prestazioni del Sistema Operativo saranno maggiori.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
4. Connessione alla Xbox 360 (Linux) dal nostro PC usando il protocollo SSH.
SSH sta per Secure Shell ed è un protocollo cifrato di comunicazione.
Se avete usato il metodo di installazione tramite file di preseed, dovreste avere SSH automaticamente installato.
Altrimenti, installatelo così:
Codice:
sudo apt-get install openssh-server
Adesso scaricate puTTY, da [URL="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html"]QUI[/URL]
Apritelo e avrete davanti questa schermata:
Inserite l'indirizzo IP della vostra console nella casella "Host Name (Or IP Address). Se non conoscete il suo indirizzo IP, da terminale:
Si aprirà la shell. Riceverete un avviso che vi comunicherà che la chiave RSA non è stata verificata. Non vi preoccupate, è solo perchè vi connettete per la prima volta. Scegliete di proseguire.
Vi apparirà una schermata di login. Inserite le vostre credenziali.
Perfetto. Siete dentro. Ora potete controllare Linux anche da remoto, eseguire installazioni, spegnere, riavviare la console.
Per uscire dalla sessione, digitate exit.
Quarta Parte del Tutorial terminata.
Confido che nessuno riproduca il contenuto di questo o degli altri tutorial senza autorizzazione.In ogni caso, meglio specificarlo.
Al prossimo tutorial ^^
Ethereal
Segnalibri