Naturalmente non e' tutta farina del mio sacco ma mi sono limitato a prendere pezzi in giro per la rete e a metterli insieme per soddisfare le mie esigenze.
La particolarita' della synology e' l'estrema semplicita' nel gestire i dischi compresi i target iscsi per questo ho voluto provare a vedere se potevo per esempio, installare un sistema operativo su un target iscsi senza tribolarci troppo, questo howto si riferisce in particolare a questa specifica esigenza.
Ingredienti:
Una synology,una linuxbox una connessione internet,iso di windows da 2008 in poi, tempo e pazienza.
Consiglio, anche se non e' indispensabile, dotarsi di virtualizzatore come per esempio virtual box io personalmente uso vmware workstation che e' vero essere a pagamento, ma, almeno nel mio caso, e' adattissimo allo scopo e mi semplifica non poco le prove.
Un breve cenno ai pezzi che ci servono, come software assumo che abbiate installato e correttamente configurato i pacchetti dhcp e dns nella synobox, dovete anche abilitare il servizio tftpd che si trova tra i servizi ftp/sftp io l'ho configurato cosi'

Come potete vedere ho scelto come nome per la root-folder del tftpd la cartella tftproot ma giusto perche' si chiama cosi' negli ambienti unix, ovviamente voi potete scegliere il nome che volete.
Notate anche la dicitura "caricatore di avvio" altri non e' che il file che sara' caricato dalla macchina che fara' il boot da rete, come si ottiene questo file?
Adesso passiamo alla parte piu' "tecnica" della faccenda, cioe' a compilare quel file che ci servira' per far partire tutta la faccenda, e' richiesta una minima manualita' con linux.
Spostiamoci sulla linuxbox e se non l'avete fatto dovete installare i pacchetti che servono per compilare, ossia gcc, librerie varie, ed il pacchetto syslinux , gogolate per sapere come si fa' in base alla distro che usate, personalmente uso centos, ma qualunque distro va' bene.
Logghiamoci come root nella linuxbox.
Posizioniamoci in una folder che abbiamo creato o per esempio in /opt e digitiamo il comando che vedete
Come potete Vedere il comando non fa altro che sincronizzare il tree GIT con quello del sito, ovviamente non essendoci un tree copia tutto.
Posizioniamoci nella cartella ipxe/src/ e digitiamo il comando make, dopo qualche minuto e dopo una serie di messaggi a video, avremo terminato la compilazione, a questo punto il file che ci serve che si chiama undionly.kpxe e' stato compilato ed e' presente nella cartella ipxe/src/bin cosi' come evidenziato dal comando ls undionly.kpxe
Non ci rimane che copiarlo in tftproot della synology, ma dobbiamo conoscere il percorso completo, nel mio caso e' /volume1/tftproot/ il comando per copiare da una macchina unix ad un altra macchina unix e' scp
Come potete vedere il comando e' semplicissimo, praticamente dice: copia il file undionly.kpxe in root@nome-o-ip-host:/cartella/di/destinazione il root@ prima del nome serve perche' stiamo facendo una secure copy usando ssh, quindi, una volta dato invio vi chiedera' la password di root che nel caso della synology e' uguale a quella di admin.
L'uso della linux box e' finito qui quindi possiamo passare a sistemare i file di configurazione del dhcp serve della synology.
Colleghiamoci in ssh sulla synology e spostiamoci nella cartella /etc/dhcpd/ come potete vedere dando un ls ( analogo al comando dir del dos ) vedrete una sequela di file cerchiamo di spiegare cosa significano.
La struttura dei file e' la seguente dhcpd- e il nome dei settings a cui si riferiscono, come potete notare c'e' un file relativo al dns uno alla eth0 e via dicendo, a noi interessa il file dhcpd-eth0-qxe.conf perche' questo nome?
Piccola spiegazione, il file dhcpd-conf che e' quello di configurazione del servizio, viene composto leggendo il contenuto di tutti i file dhcpd-qualcosa-qualcosa.conf, mentre viene deciso se includere o meno tali informazioni, leggendo il contenuto del file dhcpd-qualcosa-qualcosa.info al cui interno c'e' semplicemente scritto se includerlo o meno.
Per comodita' e per tenere separati i settaggi ho semplicemente aggiunto i 2 file, cioe', dhcpd-eth0-qxe.info e dhcpd-eth0-qxe.conf cosi' da sapere dove mettere le mani.
Vediamo cosa c'e' scritto nel file dhcpd-eth0-qxe.conf
il Comando per editare i file e' vi nome file
La prima riga controlla se il client ha fornito nella l'opzione 175 che e'relativa alle estensioni iPXE/gPXE nel caso tagga questa richiesta come specifica per iPXE/gPXE
la seconda riga dice di spedire il file bootstrap.ipxe se la richiesta viene da un client iPXE/gPXE
La terza riga crea una classe chiamata iPXE per tutte le richieste che contengono l'opzione 175 ossia ipxe, perche' usare un nome? perche' e' piu' facile

ovviamente tale file lo dovete creare voi nella cartella /etc/dhcpd
per comodita' vi posto le righe
dhcp-match=ipxe,175
dhcp-boot=tag:ipxe,bootstrap.ipxe
dhcp-vendorclass=set:ipxe,iPXE
Copiatele e incollatele dentro al file, salvate e siete a posto.
Nell'altro file, ossia dhcpd-eth0-qxe.info e' presente solo una riga che e' questa
enable="yes"
copiatela cosi' come e' doppi apici compresi, praticamente, per il discorso dei file fatto precedentemente, significa includi nel dhcpd.conf anche il contenuto del file dhcpd-eth0-qxe.conf.
Perche' non possiamo scrivere il tutto dentro al file dhcpd.conf? perche' ad ogni riavvio del servizio il file viene rigenerato secondo il metodo specificato sopra, quindi ogni modifica fatta al suo interno che non viene da questi file, andrebbe persa.
Abbiamo bisogno di effettuare una modifica ulteriore al dhcp.
Siccome questo servizio non supporta il dynamic update del dns, per avere un hostname valido dobbiamo dire al dhcp che quando una richiesta arrivera' da un particolare mac address, assegnare a questo specifico host uno specifico hostname, ed un specifico ip, questo ci servira' in seguito per discriminare l'host che fa' il boot in modo da associargli il corretto target iscsi, vediamo come si fa.
Per prima cosa dobbiamo conoscere il mac address della scheda di rete montata sull host che vogliamo installare, per conoscere tale indirizzo ci sono diverse strade, la prima e' smontare la scheda e guardare se c'e' un etichetta con su scritto mac= l'indirizzo ha una forma come questa 00:0c:29:03:4e:3f sono 6 cifre esadecimali se c'e' questa etichetta, segnatevi questo indirizzo su un pezzo di carta.
La seconda opzione implica l'utilizzo di una distro live di linux con cui fare il boot, una volta fatto il boot aprite un terminale e digitate il comando ifconfig
Avrete un output come questo:
DuDeStation> ifconfig
eth0 Link encap:Ethernet HWaddr A0:B3:CC:E9:49:6A
inet addr:192.168.3.9 Bcast:192.168.3.255 Mask:255.255.255.0
inet6 addr: fe80::a2b3:ccff:fee9:496a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:167961 errors:0 dropped:0 overruns:0 frame:0
TX packets:172027 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:63703541 (60.7 MiB) TX bytes:117213020 (111.7 MiB)
Interrupt:18
la riga Link encap:Ethernet HWaddr A0:B3:CC:E9:49:6A vi dice il mac-address, quindi segnatelo in minuscolo, una volta conosciuto questo parametro dobbiamo dire al dhcp di assegnare uno specifico hostname e uno specifico ip a questo mac-address, questo si fa' dal menu' configurazione del dhcp nella synology.
Come potete vedere e' facilissimo, basta cliccare su aggiungi e riempire i campi come indicato.
Messo da parte il dhcp veniamo ai file di configurazione di iPXE
bootstrap.ipxe
ecco il contenuto.
#!ipxe
set boot-url tftp://dudestation.dude.local
# setta la variabile boot-url con potocollo e nomehost.dom della synology
set bootstrap-url ${boot-url}/bootstrap
# setta la variabile bootsrap-url con tftp://dudestation.dude.local/bootstrap
set menu-url ${boot-url}/menu.ipxe
# setta la variabie menu-url con tftp://dudestation.dude.local/menu.ipxe
# che altri non e' il file di menu' da cui tutto e' pilotato.
# Boot /bootstrap/hostname-.ipxe
# if hostname DHCP variable is set and script is present
isset ${hostname} && chain --replace --autofree ${bootstrap-url}/hostname-${hostname}.ipxe && exit ||
# Boot /bootstrap/uuid-.ipxe
# if uuid SMBIOS variable is set and script is present
isset ${uuid} && chain --replace --autofree ${bootstrap-url}/uuid-${uuid}.ipxe && exit ||
# Boot /bootstrap/mac-01-02-03-04-05-06.ipxe if script is present
chain --replace --autofree ${bootstrap-url}/mac-${mac:hexhyp}.ipxe && exit ||
# Boot /bootstrap/bus-01-80-86-10-0e.ipxe if PCI Intel adapter
# is present and script is present
chain --replace --autofree ${bootstrap-url}/bus-${busid:hexhyp}.ipxe && exit ||
# Boot /menu.ipxe script if all other options have been exhausted
chain --replace --autofree ${menu-url}
Gli altri commenti li lascio in inglese perche' sono autoesplicativi.il file e' disponibile QUI quindi i maggiori ringraziamenti vanno a chi l'ha scritto e non a me.
Veniamo al file menu.ipxe vero motore del tutto, siccome e' molto lungo vi consiglio di reperirlo all indirizzo sopra riportato mi limitero' a mostrare le righe che dobbiamo modificare per adattarle al nostro ambiente.
#!ipxe
# boot-url is set in bootstrap.ipxe
# Setup some basic convenience variables
set menu-timeout 5000
set submenu-timeout ${menu-timeout}
set base-iqn iqn.2000-01.com.synology
set base-iscsi iscsi:dudestation.dude.local::::${base-iqn}
# Set initiator-iqn to either hostname or mac
isset ${hostname} && set initiator-iqn ${base-iqn}:${hostname} || set initiator-iqn ${base-iqn}:${mac}
# Ensure we have menu-default set to something
isset ${menu-default} || set menu-default exit
La riga in grassetto si riferisce alla parte standard della generazione dei target iscsi come vedremo in seguito.
La riga subito sotto altri non e' che l fqdn(*) della synology
(*) fqdn = fully qualified domain name ossia pasta.carbonara.com
la riga dove c'e' scritto isset non e' altro che un controllo con diverse condizioni messe in or tra di loro i simboli "||" significano appunto or
cosa dice? se e' passato da iPXE l'hostname l'iqn diverra' iqn.2000-01.com.synology:$hostname
altrimenti l'iqn sara' iqn.2000-01.com.synology:macaddress
I due file, ossia boostrap.ipxe e menu.ipxe devono risiedere nella cartella /volume1/tftproot o in quella che avete designato come tftproot.
Ci siamo quasi, ora e' giunta l'ora di definire il target iscsi da associare ad un host specifico, per determinare il nome, consiglio di usare la dicitura da me usata, siccome la definzione di target esula da questo howto la salto e mi limito a farvi vedere come ho settato io il nome
Come potete osservare il target si chiama
iqn.2000-01.com.synology:test-iscsi.boot.windows7
Perche' ho scelto questo tipo naming? per rispecchiare il tipo di naming che e' gia' definito nella parte di menu' che si occupa di installare windows dentro al target iscsi la parte e' cosi' definita.
:windows7-install
echo Starting Windows 7 x64 installer for ${initiator-iqn}
# Hook iSCSI drive
set root-path ${base-iscsi}:${hostname}.boot.windows7
sanhook ${root-path} || goto failed
# Start Windows 7 installer DVD
sanboot --no-describe --drive 0x81 #${boot-url}/windows-7/w7-ent-64.iso || goto failed
# Better solution, according to Oliver Rath on the mailing-list
# Requires massive amounts of RAM, though
#initrd ${boot-url}/windows-7/ultimate-x64.iso
#chain ${boot-url}/memdisk iso raw || goto failed
goto start
Notate la riga set root-path ${base-iscsi}:${hostname}.boot.windows7
cosa dice? dice di settare il root-path componendolo secondo le variabili impostate, come potete vedere c'e' a variabile ${hostname} ecco il perche' della associazione mac-address ip e nome host, subito dopo troviamo .boot.windows7 che e' la parte che possiamo variare come ci pare e piace, ma dobbiamo ricordarci che deve riflettere il settaggio che andremo ad effettuare quando generiamo l iscsi target.
a questo punto abbiamo settato tutto a modo, non ci resta che provare a vedere cosa succede, e qui debbo spendere 2 parole.
Normalmente e' il tftp che si occupa di spedire file al host che ne fa' richiesta, ma siccome abbiamo a che fare con una iso abbastanza corposa potremmo usare anche l http, ma io personalmente ancora non l'ho implementato se decidete di farlo dovete mettere su un web-server e rendere visibile un www-folder al cui interno ci mettere i file menu.ipxe, bootstrap.ipxe la cartella bootstrap che serve per far partire in automatico gli host gia' installati, e una folder conterra' TUTTE le immagini di installazione che potete desumere dal fle menu.ipxe siccome ne prevede un fottio io mi sono limitato a windows ma usando un diverso sistema che ora vado a spiegarvi.
al primo boot e selezionando installing windows 7 installing accadra' che l'installazione fallira' perche' non ho definito il protocollo http per dargli in pasto la iso, ma, c'e' una soluzione, semplicemente dovete settare la macchina in modo che faccia il boot da rete e dopo da cdrom inserendo nel cdrom il dvd di windows, oppure, come nel mio caso, collegare la iso alla macchina virtuale, e' indispensabile che la boot sequence sia
rete
cdrom
hdd
in questo modo si evita di implementare il protocollo http che pero' ho in agenda di provare.
Vi invito a farmi notare errori, passaggi oscuri,o cose poco chiare.
la maggior parte delle informazioni le ho pescate Da iPXE.org
I file menu.ipxe e bootstrap.ipxe sono disponibili QUI