Freebox Server (Ultra V9/ Pop V8/ Delta V7 / Revolution V6 / Mini 4K)

  • État Nouveau
  • Pourcentage achevé
    0%
  • Type Évolution
  • Catégorie Services locaux → VM
  • Assignée à Personne
  • Système d'exploitation Freebox Server V7 (Delta)
  • Sévérité Basse
  • Priorité Très Basse
  • Basée sur la version 4.8.11
  • Due pour la version Non décidée
  • Échéance Non décidée
  • Votes
  • Privée

FS#39598 - Add opensuse MicroOS image

Bonjour,

Est-il possible d’ajouter OpenSUSE MicroOS à la liste des images disponibles ?
La distribution est très légère et avec ses mises à jour atomiques automatiques, cette distribution est a mon sens parfaite pour faire tourner des containers sur la box et se maintenir toute seule.

Merci d’avance,
FVT.

"Minimum 1GB of physical RAM"

je crains que ca provoque pas mal de soucis…

_fvt a commenté le 29.07.2024 16:44

Bonjour,

Oui les config recommandées sont plutôt étranges sur leur site, d'après ce qu'on voit c'est lié aux besoins lors de l'installation… et avec un environement desktop.

De mon coté avec l'installation de base sans destkop environment ça tourne dans les 200-300MB.

fcrozat a commenté le 20.08.2024 12:21

J'ai fait en sorte que openSUSE MicroOS fonctionne parfaitement sur la Freebox Delta (et je confirme que ça marche nickel).

Il faut télécharger https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/openSUSE-MicroOS.aarch64-ContainerHost-OpenStack-Cloud.qcow2 et importer directement l'image et redimensionner le disque (prévoir large dès le départ). Et vous pouvez utiliser l'integration cloud-init pour la configuration initiale.

Par contre, évitez de faire tourner k3s + home-assistant en k3s dessus, ça fait beaucoup trop d'IO constamment (surtout k3s) et si vous êtes en RAID, vous pouvez vous retrouver avec du RAID qui ne redémarre plus ou une partition btrfs qui ne se monte plus, lors d'un reboot un peu trop sauvage de la freebox (coupure electrique voire parfois reboot depuis l'interface freebox)..

nbanba a commenté le 25.08.2024 17:43

Bonjour

Merci @fcrozat !

Si l'image n'est pas dispo dans la liste, vous pouvez quand même automatiser 100% de la création d'une VM MicroOS dans la freebox depuis l'API avec la lib bash :
https://github.com/nbanb/fbx-delta-nba_bash_api.sh

Pour download :

enc_dl_task_api download_url=https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/openSUSE-MicroOS.aarch64-ContainerHost-OpenStack-Cloud.qcow2 download_dir=${download_dir} filename=openSUSE-MicroOS.aarch64-ContainerHost-OpenStack-Cloud.qcow2

monitor_dl_task_adv_api $id
dl_task_log_api $id
del_dl_task_api $id

Merci @fcrozat pour le data-www-url-encode ;)

Puis la lib permet maintenant de gérer les VM directement (create, resize, start, stop…) :

nba@lap-nba:~/fbx-delta-api/api$ vm_
vm_add         vm_deldisk     vm_list        vm_param       vm_resource    vm_show        vm_stop        
vm_adddisk     vm_delete      vm_listdisk    vm_reload      vm_restart     vm_shutdown    vm_svnc        
vm_console     vm_detail      vm_modify      vm_resizedisk  vm_sconsole    vm_start       vm_vnc  

Encore merci @fcrozat, sans tes suggestions sur GH je n'aurais jamais dev tout ça…!

2è solution : avec iPXE :
Recompilez iPXE avec un home made script et vous pourrez booter une VM de la freebox directement sur le net (l'iso build fait 1M)

Si ça vous interesse, je peux vous passer mon ipxe script (ça donne ça quand ça boot, le menu est customisable):

 _____              _                __     ____  __ 
|  ___| __ ___  ___| |__   _____  __ \ \   / /  \/  |
| |_ | '__/ _ \/ _ \ '_ \ / _ \ \/ /  \ \ / /| |\/| |
|  _|| | |  __/  __/ |_) | (_) >  <    \ V / | |  | |
|_|  |_|  \___|\___|_.__/ \___/_/\_\    \_/  |_|  |_|

____________________/Network-config\____________________

Configuring (net0 aa:e7:cf:5b:38:72)....

   iPXE NetBoot / Recovery - FreeboxVM - NBA
      
   ---------- Linux RESCUE -------------------                                 
   <e> Rescue mode Debian Stable                                         (19)  
   <b> Busybox shell on Debian Stable                                          
   ---------- Linux install ------------------                                 
   <i> Install Debian Stable                                                   
   <j> Install Debian Stable - Expert mode                                     
   ---------- Tools and utilities ------------                                 
   <s> iPXE shell                                                              
   <n> iPXE network information                                                
   <q> Exit iPXE and continue BIOS boot                                        
   <r> Reboot computer                                                         
   <p> poweroff computer                                                       
   ---------- iPXE netboot.XYZ ---------------                                 
   <x> Chain to netboot.xyz                                                    
   --------------------------------------------                                
                                                                                
                                                          

Cordialement
nbanba

_fvt a commenté le 05.09.2024 09:40

Merci @fcrozat,

C'est ce que jai fait et ça tourne très bien en effet avec le cloud-init.

@nbanba ah je veux bien le script ipxe svp, fonctionne avec le lien open suse directement pour booter sur l'ISO ? cloud-init est supporté ?

Cordialement
Fvt

nbanba a commenté le 08.09.2024 17:25

Bonjour

@_fvt

Cloud init doit être supporté sur le boot online (pas testé sur OpenSUZE mais le boot online perdrait beaucoup d'intérêt si cloud-init n'est pas installed)
Dans tous les cas, si vous installez vous même OpenSUZE, cloud-int est supporté par l'API de la freebox donc le sera sur votre propre image (en installant le pkg cloud-init bien sûre)

Concernant iPXE, pour boot online avec l'iso généré depuis mon script créant le custom menu iPXE :
Au démarrage selectionnez <x> puis openSUZE
Puis la version souhaitée

Pour avoir le code de ipxe :

cd /usr/src
git clone https://github.com/ipxe/ipxe.git

Ensuite, j'ai fais les modifs suivantes pour que ça fonctionne (lire compile sans erreur avec les features souhaitées ):

Dans general.h :

$ grep -A2 NBA /usr/src/ipxe/src/config/general.h 
/* NBA 20240325 enable HTTPS */
/*#undef	DOWNLOAD_PROTO_HTTPS*/	/* Secure Hypertext Transfer Protocol */
#define	DOWNLOAD_PROTO_HTTPS	/* Secure Hypertext Transfer Protocol */
--
/* NBA 20240328 */
#define	IMAGE_SCRIPT		/* iPXE script image support */
--
/* NBA 20240328 */
#define VLAN_CMD		/* VLAN commands */

/* NBA 20240328 */
#define REBOOT_CMD		/* Reboot command */
#define POWEROFF_CMD		/* Power off command */
--
/* NBA 20240328 */
#define CONSOLE_CMD		/* Console command */

et pour que les flèches du clavier fonctionnent dans les websocket API de la freebox avec websocat tel qu'utilisé par la lib bash pour lancer la console ou VNC (lib bash citée dans les échanges ci-dessus et disponible ici https://github.com/nbanb/fbx-delta-nba_bash_api.sh ), j'ai modifié dans console.h

/* NBA 20240327 to make arrow work on serial console - enable CONSOLE_SERIAL */
#define	CONSOLE_SERIAL		/* Serial port console */
#define	CONSOLE_FRAMEBUFFER	/* Graphical framebuffer console */

Aussi, pour le support de ma PKI interne pour HTTPS, j'ai fais d'autres modifs (j'ai du revoir pas mal de trucs avec le cross-signing), je ne détaillerai pas ici mais dans l'idée c'est décrit ici : https://ipxe.org/crypto

Une fois ces modif faites, on compile avec un "EMBEDDED iPXE SCRIPT" :
/!\ Attention, ici je 'cross-compile' pour ARM64 depuis une machine de dev AMD64 avec 16 CPU dispo (-j16 dans la command):

cd /usr/src/ipxe/src/
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 bin-arm64-efi/ipxe.iso -j16 EMBED=_nba/ipxe_script/freebox-vm_nba_netbootxyz.ipxe 
cp /usr/src/ipxe/src/bin-arm64-efi/ipxe.iso ~/freebox-vm_nba_netbootxyz_ipxe.iso

Pour ne build que le firmware pour flasher la carte réseau, on peut faire :

cd /usr/src/ipxe/src/
make clean
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 bin-arm64-efi/ipxe.efi -j16 EMBED=_nba/ipxe_script/freebox-vm_nba_netbootxyz.ipxe 

Puis on en arrive enfin au script iPXE en question :

cat /usr/src/ipxe/src/_nba/ipxe_script/freebox-vm_nba_netbootxyz.ipxe
#!ipxe
#

set esc:hex 1b
set cls ${esc:string}[2J
set rst ${esc:string}[3J
echo ${cls}
echo ${rst}
set sp:hex 20
set sp ${sp:string}

set tputinit:hexraw 1b5b21701b5b3f333b346c1b5b346c1b3e1b5b3f36396c
echo \"${tputinit:string}\"

console
colour --rgb 0xa0522d 7
colour --rgb 0x4682b4 4
colour --rgb 0x2cc4e2 5
cpair --foreground 7 --background 4 0
cpair --foreground 7 --background 9 1
cpair --foreground 7 --background 6 2


echo ${sp}_____${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}_${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}__${sp}${sp}${sp}${sp}${sp}____${sp}${sp}__${sp}
echo |${sp}${sp}___|${sp}__${sp}___${sp}${sp}___|${sp}|__${sp}${sp}${sp}_____${sp}${sp}__${sp}\${sp}\${sp}${sp}${sp}/${sp}/${sp}${sp}\/${sp}${sp}|
echo |${sp}|_${sp}|${sp}'__/${sp}_${sp}\/${sp}_${sp}\${sp}'_${sp}\${sp}/${sp}_${sp}\${sp}\/${sp}/${sp}${sp}\${sp}\${sp}/${sp}/|${sp}|\/|${sp}|
echo |${sp}${sp}_||${sp}|${sp}|${sp}${sp}__/${sp}${sp}__/${sp}|_)${sp}|${sp}(_)${sp}>${sp}${sp}<${sp}${sp}${sp}${sp}\${sp}V${sp}/${sp}|${sp}|${sp}${sp}|${sp}|
echo |_|${sp}${sp}|_|${sp}${sp}\___|\___|_.__/${sp}\___/_/\_\${sp}${sp}${sp}${sp}\_/${sp}${sp}|_|${sp}${sp}|_|


echo
echo ____________________/Network-config\____________________
echo
dhcp net0
echo
echo Network info from DHCP:
show net0/ip
show net0/mac
show net0/netmask
show net0/gateway
show dns
route
echo ________________________________________________________
echo
echo
#sleep 1
prompt --key 0x02 --timeout 2000 Press Ctrl-B for the iPXE command line... && shell ||
echo

# console (not working on freebox VM or on arm64 ? - to investigate ...)  : 
#console --picture https://iliad-strapi.s3.fr-par.scw.cloud/Freebox_Delta_Server_5671cbc6f7.png --left 32 --right 32 --top 32 --bottom 48 --keep

:main-menu
menu iPXE NetBoot / Recovery - FreeboxVM - NBA
item --gap --              ---------- Linux RESCUE -------------------
item --key e debian-stable-rescue       <e>  Rescue mode Debian Stable
item --key b debian-stable-busybox      <b>  Busybox shell on Debian Stable  
item --gap --              ---------- Linux install ------------------
item --key i debian-stable-install      <i>  Install Debian Stable
item --key j debian-expert-install      <j>  Install Debian Stable - Expert mode
item --gap --              ---------- Tools and utilities ------------
item --key s shell          <s> iPXE shell
item --key n net            <n> iPXE network information
item --key q exit           <q> Exit iPXE and continue BIOS boot
item --key r reboot         <r> Reboot computer
item --key p poweroff       <p> poweroff computer
item --gap --              ---------- iPXE netboot.XYZ ---------------
item --key x netbootxyz                 <x>  Chain to netboot.xyz
item --gap --              --------------------------------------------
choose --default debian-stable-rescue --timeout 20000 option && goto ${option}


:debian-stable-busybox
kernel https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/debian-installer/arm64/linux console=ttyS0,115200n8 root=/dev/ram0  init=/bin/sh
initrd https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/debian-installer/arm64/initrd.gz
boot

:debian-stable-rescue
kernel https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/debian-installer/arm64/linux emergency/enable=true console=ttyS0,115200n8
initrd https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/debian-installer/arm64/initrd.gz
boot

:debian-stable-install
kernel https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/debian-installer/arm64/linux console=ttyS0,115200n8 root=/dev/ram0 
initrd https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/debian-installer/arm64/initrd.gz
boot

:debian-expert-install
kernel https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/debian-installer/arm64/linux console=ttyS0,115200n8 priority=low
initrd https://deb.debian.org/debian/dists/stable/main/installer-arm64/current/images/netboot/debian-installer/arm64/initrd.gz
boot



:netbootxyz
chain --autofree https://boot.netboot.xyz/ipxe/netboot.xyz-arm64.efi

:net
#echo 'fbxvm i PXE' | figlet | sed -e 's/ /\${sp}/g' -e 's/^\.*/echo /g'
echo ${sp}${sp}__${sp}_${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}_${sp}${sp}${sp}______${sp}${sp}_______${sp}
echo ${sp}/${sp}_|${sp}|____${sp}${sp}____${sp}${sp}${sp}___${sp}__${sp}___${sp}${sp}${sp}${sp}(_)${sp}|${sp}${sp}_${sp}\${sp}\/${sp}/${sp}____|
echo |${sp}|_|${sp}'_${sp}\${sp}\/${sp}/\${sp}\${sp}/${sp}/${sp}'_${sp}`${sp}_${sp}\${sp}${sp}${sp}|${sp}|${sp}|${sp}|_)${sp}\${sp}${sp}/|${sp}${sp}_|${sp}${sp}
echo |${sp}${sp}_|${sp}|_)${sp}>${sp}${sp}<${sp}${sp}\${sp}V${sp}/|${sp}|${sp}|${sp}|${sp}|${sp}|${sp}${sp}|${sp}|${sp}|${sp}${sp}__//${sp}${sp}\|${sp}|___${sp}
echo |_|${sp}|_.__/_/\_\${sp}${sp}\_/${sp}|_|${sp}|_|${sp}|_|${sp}${sp}|_|${sp}|_|${sp}${sp}/_/\_\_____|

echo ___________________________________________________________
echo
echo _______________________
echo Network info from DHCP:
echo
show net0/ip
show net0/mac
show net0/netmask
show net0/gateway
echo
echo ___________________
echo DNS info from DHCP:
echo
show dns
echo
echo _____________________
echo Route info from DHCP:
echo
route
echo
echo
echo ___________________________________________________________
prompt --key 0x04 --timeout 20000 Press Ctrl-D for iPXE main menu... && goto main-menu || goto main-menu


:shell
#echo 'i PXE SHELL' | figlet | sed -e 's/ /\${sp}/g' -e 's/^\.*/echo /g'
echo ${sp}_${sp}${sp}${sp}______${sp}${sp}_______${sp}${sp}${sp}____${sp}${sp}_${sp}${sp}${sp}_${sp}_____${sp}_${sp}${sp}${sp}${sp}${sp}_${sp}${sp}${sp}${sp}${sp}
echo (_)${sp}|${sp}${sp}_${sp}\${sp}\/${sp}/${sp}____|${sp}/${sp}___||${sp}|${sp}|${sp}|${sp}____|${sp}|${sp}${sp}${sp}|${sp}|${sp}${sp}${sp}${sp}
echo |${sp}|${sp}|${sp}|_)${sp}\${sp}${sp}/|${sp}${sp}_|${sp}${sp}${sp}\___${sp}\|${sp}|_|${sp}|${sp}${sp}_|${sp}|${sp}|${sp}${sp}${sp}|${sp}|${sp}${sp}${sp}${sp}
echo |${sp}|${sp}|${sp}${sp}__//${sp}${sp}\|${sp}|___${sp}${sp}${sp}___)${sp}|${sp}${sp}_${sp}${sp}|${sp}|___|${sp}|___|${sp}|___${sp}
echo |_|${sp}|_|${sp}${sp}/_/\_\_____|${sp}|____/|_|${sp}|_|_____|_____|_____|
echo
shell

:reboot
#echo 'reboot' | figlet | sed -e 's/ /\${sp}/g' -e 's/^\.*/echo /g'
echo ${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}_${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}_${sp}${sp}${sp}
echo ${sp}_${sp}__${sp}___|${sp}|__${sp}${sp}${sp}___${sp}${sp}${sp}___${sp}|${sp}|_${sp}
echo |${sp}'__/${sp}_${sp}\${sp}'_${sp}\${sp}/${sp}_${sp}\${sp}/${sp}_${sp}\|${sp}__|
echo |${sp}|${sp}|${sp}${sp}__/${sp}|_)${sp}|${sp}(_)${sp}|${sp}(_)${sp}|${sp}|_${sp}
echo |_|${sp}${sp}\___|_.__/${sp}\___/${sp}\___/${sp}\__|
reboot

:poweroff
#echo 'poweroff' | figlet | sed -e 's/ /\${sp}/g' -e 's/^\.*/echo /g'
echo ${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}${sp}__${sp}${sp}__${sp}
echo ${sp}_${sp}__${sp}${sp}${sp}_____${sp}${sp}${sp}${sp}${sp}${sp}_____${sp}_${sp}__${sp}___${sp}${sp}/${sp}_|/${sp}_|
echo |${sp}'_${sp}\${sp}/${sp}_${sp}\${sp}\${sp}/\${sp}/${sp}/${sp}_${sp}\${sp}'__/${sp}_${sp}\|${sp}|_|${sp}|_${sp}
echo |${sp}|_)${sp}|${sp}(_)${sp}\${sp}V${sp}${sp}V${sp}/${sp}${sp}__/${sp}|${sp}|${sp}(_)${sp}|${sp}${sp}_|${sp}${sp}_|
echo |${sp}.__/${sp}\___/${sp}\_/\_/${sp}\___|_|${sp}${sp}\___/|_|${sp}|_|${sp}${sp}
echo |_|${sp}${sp}
poweroff


:exit
exit

Ensuite, vous modifiez la VM pour qu'elle boot sur l'iso iPXE (avec la lib bash ça donne):

. loginfreebox
vm_modify 13 disk_type="qcow2" disk_path=/FBX24T/box-vm/14RV-FSRV-13.qcow2 cd_path=/FBX24T/iso/freebox-vm_nba_netbootxyz_ipxe.iso  memory=4096 os=unknown enable_screen=0 bind_usb_ports='"usb-external-type-c"' enable_cloudinit=true cloudinit_userdata=cloudinit-ud.yml name=14RV-FSRV-13 vcpus=2

Puis on lance la VM et on se connecte au websocket de la freebox pour accéder à la console depuis le shell courant (avec la lib bash ça donne):

vm_start 13
vm_console 13
# or 'vm_vnc 13' for a graphical output

ou en 1 seule commande :

vm_sconsole 13
# or 'vm_svnc 13' for a graphical output


NB:
pour quitter la console websocket j'ai mis la valeur 'hex 11' qui correspond à CTRL+K comme 'control kill' au lieu de CTRL+\Q = 'control quit' (trop chiant à tapper sur un clavier pas qwerty)

N'hésitez pas à demander si besoin d'aide,

Cordialement
nbanba

Chargement...

Activer les raccourcis clavier

Liste des tâches

Détails de la tâche

Édition de la tâche