Primer reto reducir el uso de RAM, compilando kernel en FreeBSD

Ya hemos visto el proyecto de la web en 500ms y el ecomerce en menos de 1.2 en el anterior POST 

Recapitulemos, tenemos un freebsd en 1 core con 512 MB de RAM y necesitamos optimizar al máximo, más adelante subiremos RAM, pero primero tenemos que arrancar aquí a ver donde flaquea y antes de meter Mariadb y PHP y optimizarlo, veremos si podemos rascar algo de RAM al kernel

El estado actual es:

Mem: 22M Active, 225M Inact, 14M Laundry, 142M Wired, 54M Buf, 58M Free

El sistema es casi base, pero el kernel esta chupando algo de recursos:

 

Id Refs Address                Size Name
 1   44 0xffffffff80200000  2345580 kernel
 2    1 0xffffffff82546000     3800 cc_htcp.ko
 3    1 0xffffffff8254b000     a440 cryptodev.ko
 4    1 0xffffffff82556000     4190 virtio_random.ko
 5    1 0xffffffff82718000     3218 intpm.ko
 6    1 0xffffffff8271c000     2180 smbus.ko
 7    1 0xffffffff8271f000     3340 uhid.ko
 8    1 0xffffffff82723000     3380 usbhid.ko
 9    1 0xffffffff82727000     32b0 hidbus.ko
10    1 0xffffffff8272b000     3320 wmt.ko
11    1 0xffffffff8272f000    44038 pf.ko

 

He descargado módulos y sigue consumiendo lo mismo, así que vamos a compilar y quitar algunas cosas para reducir el consumo.

 

Sí, dirán que es un trabajo innecesario hoy en día ya que los recursos sobran, pero estamos empezando en un VPS con 512 MB de RAM y si reducimos el consumo en 20 MB es muchísimo, un 10%, si tuvieras 250 GB y reduces un 10% son 25 GB y lo notarías, esta claro que si tienes 250GB de ram y reduces 20 MB no te merece la pena, pero en porcentaje puede ser una decisión acertada 

Pero con un core y 512 MB de RAM esto es una odisea, así que montamos un maquina en virtualbox

 

Nada complicado, descargamos el VHD: https://download.freebsd.org/releases/VM-IMAGES/13.5-RELEASE/amd64/Latest/

Creamos la VM en virtualbox -> configuración almacenamiento, borramos el disco que tiene y seleccionamos el que hemos descargado.

Pero antes de arrancar, la maquina viene con el espacio justo, tenemos que redimencionar el vhd:

vboxmanage modifymedium FreeBSD-13.5-RELEASE-amd64.vhd --resize=20000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Eso tarda 5 segundos

Una vez levantada, entramos sin contraseña en root.

Desde la consola de vbox no podemos trabajar así que si hemos iniciado con la red ( adaptador puente ) asignará la IP automáticamente si el router tiene DHCP.

Tenemos que levantar SSH, creamos las keys:

ssh-keygen -A

service sshd onerestart

Y necesitamos un usuario :

useradd

y luego

pw groupmod wheel -m skamasle

Con esto ya podemos iniciar por ssh y hacer su -

root no nos pide contraseña por defecto, al estar en pruebas, pero seria conveniente asignarle una contraseña :

passwd root

 

Hora de compilar:

Primero descargar el src para compilar el kernel:

cd /usr/src
# Descargar
fetch https://download.freebsd.org/releases/amd64/13.5-RELEASE/src.txz
# Extraer:
tar -C / -xvf src.txz

Ahora viene cuando la mataron:

cd /usr/src/sys/amd64/conf/
# Copiamos la config MINIMAL para dejarla aún mas minimal
cp MINIMAL SKAMASLE-MINIMAL

Ahora no queda otra que ver que hace cada cosa, buscando, leyendo documentación o preguntando a la IA para ver que podemos ir quitando.

El resumen es, quitar todo lo que no haga falta estamos en una VPS, no nos hacen falta drivers para USB, ni graficas, ni drivers para discos, dejar solo VIRTIO para red, almacenamiento y demás.

Funciones básicas del kernel y el resto fuera.

Por ejemplo:

options         COMPAT_FREEBSD32        # Compatible with i386 binaries
options         COMPAT_FREEBSD4         # Compatible with FreeBSD4
options         COMPAT_FREEBSD5         # Compatible with FreeBSD5
options         COMPAT_FREEBSD6         # Compatible with FreeBSD6
options         COMPAT_FREEBSD7         # Compatible with FreeBSD7
options         COMPAT_FREEBSD9         # Compatible with FreeBSD9
options         COMPAT_FREEBSD10        # Compatible with FreeBSD10
options         COMPAT_FREEBSD11        # Compatible with FreeBSD11
options         COMPAT_FREEBSD12        # Compatible with FreeBSD12

Todo eso lo quito menos COMPAT_FREBSD12 por si acaso, estamos en la 13.5 a saber si vamos a necesitar algo antiguo pero no muy antiguo

El tema esta en que si no sabemos que hace, lo dejamos, si suena evidente lo quitamos, al final estamos probando en un entorno de pruebas, fallando vamos a aprender cosas, por eso mejor aventurarse y no copiar simplemente por cosas por ahí.

Yo voy a quitar esto:

# Debugging support.  Always need this:
options         KDB                     # Enable kernel debugger support.
options         KDB_TRACE               # Print a stack trace for a panic.

No me interesa depurar nada, si el sistema se cuelga, que se colgará, sera por temas de RAM, reboot y listo

En resumen AUDIT, MAC, drivers VESA, spalsh y todo lo que sea enfocado a equipos de escritorio va fuera.

El MINIMAL  no tiene casi nada más, el problema es que tampoco tiene el driver que necesitamos que es el virtio

Así que lo sacamos del GENERIC y lo añadimos a nuestro MINIMAL personalizado

 # grep -i virtio NOTES

device          virtio          # Generic VirtIO bus (required)
device          virtio_pci      # VirtIO PCI Interface
device          vtnet           # VirtIO Ethernet device
device          virtio_blk      # VirtIO Block device
device          virtio_scsi     # VirtIO SCSI device
device          virtio_balloon  # VirtIO Memory Balloon device
device          virtio_random   # VirtIO Entropy device
device          virtio_console  # VirtIO Console device

He sacado el virtio de NOTES y no de GENERIC ya que en notes esta virtio_random y en GENERIC y nos hace falta para SSL

Toca cruzar los dedos y empezar , primero comprobamos que no falten dependencias y que todo este OK con la config

cd /usr/src
make kernel-toolchain 
cd sys/amd64/conf/
config sys/amd64/conf/SKAMASLE-MINIMAL

Y ahora lo gordo -j6 ya que le di 6 cores a la VM

cd /usr/src
make -j6 buildkernel KERNCONF=SKAMASLE-MINIMAL

 

Antes de matar nada, nuestro kernel original pesa 191 MB, es el especial virtuales el VHD que descargamos, lo mismo pesa en el VPS

du -lh /boot/kernel/
191M    /boot/kernel/
# ls /boot/kernel
aac.ko					if_iavf.ko				ng_l2tp.ko
aacraid.ko				if_ic.ko				ng_lmi.ko
accf_data.ko				if_ice.ko				ng_macfilter.ko
accf_dns.ko				if_igb.ko				ng_mppc.ko
accf_http.ko				if_igc.ko				ng_nat.ko
acl_nfs4.ko				if_infiniband.ko			ng_netflow.ko
acl_posix1e.ko				if_ipheth.ko				ng_one2many.ko
acpi_asus.ko				if_ipw.ko				ng_patch.ko
acpi_asus_wmi.ko			if_iwi.ko				ng_pipe.ko
acpi_dock.ko				if_iwlwifi.ko				ng_ppp.ko
acpi_fujitsu.ko				if_iwm.ko				ng_pppoe.ko
acpi_ged.ko				if_iwn.ko				ng_pptpgre.ko
acpi_hp.ko				if_ix.ko				ng_pred1.ko
acpi_ibm.ko				if_ixl.ko				ng_rfc1490.ko
acpi_panasonic.ko			if_ixlv.ko				ng_socket.ko
acpi_sony.ko				if_ixv.ko				ng_source.ko
acpi_toshiba.ko				if_jme.ko				ng_split.ko
acpi_video.ko				if_kue.ko				ng_sppp.ko
acpi_wmi.ko				if_lagg.ko				ng_sscfu.ko
ads111x.ko				if_le.ko				ng_sscop.ko
aesni.ko				if_lge.ko				ng_tag.ko
agp.ko					if_lio.ko				ng_tcpmss.ko
ahc.ko					if_malo.ko				ng_tee.ko
ahc_isa.ko				if_me.ko				ng_tty.ko
ahc_pci.ko				if_mgb.ko				ng_ubt.ko
ahci.ko					if_mos.ko				ng_uni.ko
ahd.ko					if_msk.ko				ng_vjc.ko
aibs.ko					if_muge.ko				ng_vlan.ko
alias_dummy.ko				if_mwl.ko				ng_vlan_rotate.ko
alias_ftp.ko				if_mxge.ko				ngatmbase.ko
alias_irc.ko				if_my.ko				nmdm.ko
alias_nbt.ko				if_ndis.ko				ntb.ko
alias_pptp.ko				if_nfe.ko				ntb_hw_amd.ko
alias_skinny.ko				if_nge.ko				ntb_hw_intel.ko
alias_smedia.ko				if_ntb.ko				ntb_hw_plx.ko
alpm.ko					if_oce.ko				ntb_tool.ko
alq.ko					if_otus.ko				ntb_transport.ko
amd_ecc_inject.ko			if_qlnxe.ko				nullfs.ko
amdgpio.ko				if_qlnxev.ko				nvd.ko
amdpm.ko				if_qlxgb.ko				nvdimm.ko
amdsbwd.ko				if_qlxgbe.ko				nvme.ko
amdsmb.ko				if_qlxge.ko				nvram.ko
amdsmn.ko				if_ral.ko				nxprtc.ko
amdtemp.ko				if_re.ko				ocs_fc.ko
amr.ko					if_rl.ko				ohci.ko
amr_cam.ko				if_rsu.ko				opensolaris.ko
amr_linux.ko				if_rtw88.ko				ossl.ko
aout.ko					if_rtwn_pci.ko				otusfw_init.ko
arcmsr.ko				if_rtwn_usb.ko				otusfw_main.ko
asmc.ko					if_rue.ko				ow.ko
at45d.ko				if_rum.ko				ow_temp.ko
ata.ko					if_run.ko				owc.ko
ataacard.ko				if_sge.ko				padlock.ko
ataacerlabs.ko				if_sis.ko				padlock_rng.ko
ataamd.ko				if_sk.ko				pca954x.ko
ataati.ko				if_smsc.ko				pccard.ko
atacenatek.ko				if_ste.ko				pcf.ko
atacypress.ko				if_stf.ko				pcf8574.ko
atacyrix.ko				if_stge.ko				pcf8591.ko
atahighpoint.ko				if_sume.ko				pchtherm.ko
ataintel.ko				if_ti.ko				pf.ko
ataisa.ko				if_tuntap.ko				pflog.ko
ataite.ko				if_uath.ko				pfsync.ko
atajmicron.ko				if_udav.ko				plasma_saver.ko
atamarvell.ko				if_upgt.ko				plip.ko
atamicron.ko				if_ural.ko				pmspcv.ko
atanational.ko				if_ure.ko				ppbus.ko
atanetcell.ko				if_urndis.ko				ppc.ko
atanvidia.ko				if_urtw.ko				ppi.ko
atapci.ko				if_vge.ko				pps.ko
atapromise.ko				if_vlan.ko				procfs.ko
ataserverworks.ko			if_vmx.ko				profile.ko
atasiliconimage.ko			if_vr.ko				proto.ko
atasis.ko				if_vte.ko				prototype.ko
atavia.ko				if_vtnet.ko				ps4dshock.ko
ath_dfs.ko				if_vxlan.ko				pseudofs.ko
ath_hal.ko				if_wg.ko				pty.ko
ath_hal_ar5210.ko			if_wpi.ko				puc.ko
ath_hal_ar5211.ko			if_xl.ko				pvscsi.ko
ath_hal_ar5212.ko			if_zyd.ko				pwmbus.ko
ath_hal_ar5416.ko			iflib.ko				pwmc.ko
ath_hal_ar9300.ko			ig4.ko					qat.ko
ath_main.ko				iic.ko					qat_c2xxxfw.ko
ath_rate.ko				iicbb.ko				qat_c3xxxfw.ko
atp.ko					iicbus.ko				qat_c62xfw.ko
autofs.ko				iichid.ko				qat_d15xxfw.ko
backlight.ko				iicmux.ko				qat_dh895xccfw.ko
bcm5974.ko				iicsmb.ko				qlnxr.ko
bcma.ko					iir.ko					rain_saver.ko
bcma_bhndb.ko				imcsmb.ko				random_OTHER.ko
beastie_saver.ko			imgact_binmisc.ko			random_fortuna.ko
bhnd.ko					intelspi.ko				rc4.ko
bhnd_pci.ko				intpm.ko				rdrand_rng.ko
bhnd_pci_hostb.ko			io.ko					rsu-rtl8712fw.ko
bhnd_pcib.ko				ioat.ko					rt2561fw.ko
bhndb.ko				ip6_mroute.ko				rt2561sfw.ko
bhndb_pci.ko				ip_mroute.ko				rt2661fw.ko
blake2.ko				ipdivert.ko				rt2860fw.ko
blank_saver.ko				ipfw.ko					rtc8583.ko
bridgestp.ko				ipfw_nat.ko				rtsx.ko
bytgpio.ko				ipfw_nat64.ko				rtw8723d_fw.bin.ko
callout_test.ko				ipfw_nptv6.ko				rtw8821c_fw.bin.ko
cam.ko					ipfw_pmod.ko				rtw8822b_fw.bin.ko
cardbus.ko				ipl.ko					rtw8822c_fw.bin.ko
carp.ko					ipmi.ko					rtw8822c_wow_fw.bin.ko
cbb.ko					ipmi_linux.ko				rtwn-rtl8188eefw.ko
cc_cdg.ko				ipoib.ko				rtwn-rtl8188eufw.ko
cc_chd.ko				ips.ko					rtwn-rtl8192cfwE.ko
cc_cubic.ko				ipsec.ko				rtwn-rtl8192cfwE_B.ko
cc_dctcp.ko				ipw_bss.ko				rtwn-rtl8192cfwT.ko
cc_hd.ko				ipw_ibss.ko				rtwn-rtl8192cfwU.ko
cc_htcp.ko				ipw_monitor.ko				rtwn-rtl8192eufw.ko
cc_vegas.ko				irdma.ko				rtwn-rtl8812aufw.ko
ccp.ko					isci.ko					rtwn-rtl8821aufw.ko
ccr.ko					iscsi.ko				rtwn.ko
cd9660.ko				iscsi_initiator.ko			runfw.ko
cd9660_iconv.ko				iser.ko					s3.ko
cfiscsi.ko				isl.ko					s35390a.ko
cfumass.ko				isl12xx.ko				safe.ko
chromebook_platform.ko			ismt.ko					safexcel.ko
chvgpio.ko				isp.ko					sbp.ko
ciss.ko					isp_2400.ko				sbp_targ.ko
cloudabi.ko				isp_2500.ko				scc.ko
cloudabi32.ko				isp_2600.ko				sctp.ko
cloudabi64.ko				isp_2700.ko				sdhci.ko
coretemp.ko				isp_2800.ko				sdhci_acpi.ko
cp2112.ko				ispfw.ko				sdhci_pci.ko
cpuctl.ko				itwd.ko					sdio.ko
cpufreq.ko				iw_cxgbe.ko				sdt.ko
crypto.ko				iwi_bss.ko				sem.ko
cryptodev.ko				iwi_ibss.ko				send.ko
ctl.ko					iwi_monitor.ko				sfxge.ko
cuse.ko					iwlwifi-3160-17.ucode.ko		sgx.ko
cxgb_t3fw.ko				iwlwifi-3168-29.ucode.ko		sgx_linux.ko
cxgbei.ko				iwlwifi-7260-17.ucode.ko		siba.ko
cyapa.ko				iwlwifi-7265-17.ucode.ko		siba_bhndb.ko
daemon_saver.ko				iwlwifi-7265D-29.ucode.ko		siftr.ko
dcons.ko				iwlwifi-8000C-36.ucode.ko		siis.ko
dcons_crom.ko				iwlwifi-8265-36.ucode.ko		smartpqi.ko
dpdk_lpm4.ko				iwlwifi-9000-pu-b0-jf-b0-46.ucode.ko	smb.ko
dpdk_lpm6.ko				iwlwifi-9260-th-b0-jf-b0-46.ucode.ko	smbfs.ko
dpms.ko					iwlwifi-Qu-b0-hr-b0-77.ucode.ko		smbios.ko
dragon_saver.ko				iwlwifi-Qu-b0-jf-b0-77.ucode.ko		smbus.ko
ds1307.ko				iwlwifi-Qu-c0-hr-b0-77.ucode.ko		snake_saver.ko
ds13rtc.ko				iwlwifi-Qu-c0-jf-b0-77.ucode.ko		snd_ad1816.ko
ds1672.ko				iwlwifi-QuZ-a0-hr-b0-77.ucode.ko	snd_als4000.ko
ds3231.ko				iwlwifi-QuZ-a0-jf-b0-77.ucode.ko	snd_atiixp.ko
dtaudit.ko				iwlwifi-cc-a0-77.ucode.ko		snd_cmi.ko
dtmalloc.ko				iwlwifi-gl-c0-fm-c0-83.ucode.ko		snd_cs4281.ko
dtnfscl.ko				iwlwifi-gl-c0-fm-c0.pnvm.ko		snd_csa.ko
dtrace.ko				iwlwifi-so-a0-gf-a0-83.ucode.ko		snd_driver.ko
dtrace_test.ko				iwlwifi-so-a0-gf-a0.pnvm.ko		snd_ds1.ko
dtraceall.ko				iwlwifi-so-a0-gf4-a0-83.ucode.ko	snd_emu10k1.ko
dummynet.ko				iwlwifi-so-a0-gf4-a0.pnvm.ko		snd_emu10kx.ko
efirt.ko				iwlwifi-so-a0-hr-b0-81.ucode.ko		snd_envy24.ko
ehci.ko					iwlwifi-so-a0-jf-b0-77.ucode.ko		snd_envy24ht.ko
esp.ko					iwlwifi-ty-a0-gf-a0-83.ucode.ko		snd_es137x.ko
evdev.ko				iwlwifi-ty-a0-gf-a0.pnvm.ko		snd_ess.ko
exca.ko					iwm3160fw.ko				snd_fm801.ko
ext2fs.ko				iwm3168fw.ko				snd_hda.ko
fade_saver.ko				iwm7260fw.ko				snd_hdspe.ko
fasttrap.ko				iwm7265Dfw.ko				snd_ich.ko
fbt.ko					iwm7265fw.ko				snd_maestro.ko
fdc.ko					iwm8000Cfw.ko				snd_maestro3.ko
fdescfs.ko				iwm8265fw.ko				snd_mss.ko
fib_dxr.ko				iwm9000fw.ko				snd_neomagic.ko
filemon.ko				iwm9260fw.ko				snd_sb16.ko
fire_saver.ko				iwn1000fw.ko				snd_sb8.ko
firewire.ko				iwn100fw.ko				snd_sbc.ko
firmware.ko				iwn105fw.ko				snd_solo.ko
ftwd.ko					iwn135fw.ko				snd_spicds.ko
fusefs.ko				iwn2000fw.ko				snd_t4dwave.ko
g_audio.ko				iwn2030fw.ko				snd_uaudio.ko
g_keyboard.ko				iwn4965fw.ko				snd_via8233.ko
g_modem.ko				iwn5000fw.ko				snd_via82c686.ko
g_mouse.ko				iwn5150fw.ko				snd_vibes.ko
geom_bde.ko				iwn6000fw.ko				snp.ko
geom_cache.ko				iwn6000g2afw.ko				sound.ko
geom_ccd.ko				iwn6000g2bfw.ko				speaker.ko
geom_concat.ko				iwn6050fw.ko				spibus.ko
geom_eli.ko				jedec_dimm.ko				spigen.ko
geom_flashmap.ko			kbdmux.ko				splash_bmp.ko
geom_gate.ko				kern_testfrwk.ko			splash_pcx.ko
geom_journal.ko				kernel					splash_txt.ko
geom_label.ko				kgssapi.ko				sppp.ko
geom_linux_lvm.ko			kgssapi_krb5.ko				star_saver.ko
geom_md.ko				krpc.ko					superio.ko
geom_mirror.ko				krping.ko				sym.ko
geom_mountver.ko			ksyms.ko				systrace.ko
geom_multipath.ko			ktls_ocf.ko				systrace_freebsd32.ko
geom_nop.ko				libalias.ko				systrace_linux.ko
geom_part_apm.ko			libiconv.ko				systrace_linux32.ko
geom_part_bsd.ko			libmchain.ko				sysvmsg.ko
geom_part_bsd64.ko			lindebugfs.ko				sysvsem.ko
geom_part_ebr.ko			linker.hints				sysvshm.ko
geom_part_gpt.ko			linprocfs.ko				t4_tom.ko
geom_part_ldm.ko			linsysfs.ko				t4fw_cfg.ko
geom_part_mbr.ko			linux.ko				t5fw_cfg.ko
geom_raid.ko				linux64.ko				t6fw_cfg.ko
geom_raid3.ko				linux_common.ko				tcpmd5.ko
geom_shsec.ko				linuxkpi.ko				tmpfs.ko
geom_stripe.ko				linuxkpi_wlan.ko			toecore.ko
geom_uzip.ko				logo_saver.ko				tpm.ko
geom_vinum.ko				lpbb.ko					twa.ko
geom_virstor.ko				lpt.ko					twe.ko
geom_zero.ko				ltc430x.ko				tws.ko
gpiobus.ko				mac_biba.ko				u3g.ko
gpioiic.ko				mac_bsdextended.ko			uacpi.ko
gpioled.ko				mac_ifoff.ko				uark.ko
gpiospi.ko				mac_lomac.ko				uart.ko
gpioths.ko				mac_mls.ko				ubsa.ko
green_saver.ko				mac_none.ko				ubser.ko
h_ertt.ko				mac_ntpd.ko				ubtbcmfw.ko
hconf.ko				mac_partition.ko			uchcom.ko
hcons.ko				mac_portacl.ko				ucom.ko
hgame.ko				mac_priority.ko				ucycom.ko
hid.ko					mac_seeotheruids.ko			udbp.ko
hidbus.ko				mac_stub.ko				udf.ko
hidmap.ko				mac_test.ko				udf_iconv.ko
hidquirk.ko				max44009.ko				udl.ko
hidraw.ko				mdio.ko					uep.ko
hifn.ko					mem.ko					uether.ko
hkbd.ko					mfi.ko					ufoma.ko
hms.ko					mfi_linux.ko				ufs.ko
hmt.ko					mfip.ko					uftdi.ko
hpen.ko					miibus.ko				ugensa.ko
hpt27xx.ko				mlx.ko					ugold.ko
hptiop.ko				mlx4.ko					uhci.ko
hptmv.ko				mlx4en.ko				uhid.ko
hptnr.ko				mlx4ib.ko				uhid_snes.ko
hptrr.ko				mlx5.ko					uhso.ko
hsctrl.ko				mlx5en.ko				uinput.ko
htu21.ko				mlx5ib.ko				uipaq.ko
hv_hid.ko				mlxfw.ko				ukbd.ko
hv_netvsc.ko				mly.ko					uled.ko
hv_sock.ko				mmc.ko					ulpt.ko
hv_storvsc.ko				mmcsd.ko				umass.ko
hv_utils.ko				mpr.ko					umcs.ko
hv_vmbus.ko				mps.ko					umct.ko
hwpmc.ko				mpt.ko					umodem.ko
ibcore.ko				mqueuefs.ko				umoscom.ko
ice_ddp.ko				mrsas.ko				ums.ko
icee.ko					mrsas_linux.ko				unionfs.ko
ichsmb.ko				msdosfs.ko				uplcom.ko
ichwd.ko				msdosfs_iconv.ko			urio.ko
ida.ko					mthca.ko				usb.ko
ietp.ko					mvs.ko					usb_quirk.ko
if_ae.ko				mw88W8363fw.ko				usb_template.ko
if_age.ko				mx25l.ko				usbhid.ko
if_alc.ko				mxge_eth_z8e.ko				usfs.ko
if_ale.ko				mxge_ethp_z8e.ko			usie.ko
if_an.ko				mxge_rss_eth_z8e.ko			uslcom.ko
if_ath.ko				mxge_rss_ethp_z8e.ko			uvisor.ko
if_ath_pci.ko				nctgpio.ko				uvscom.ko
if_aue.ko				ndis.ko					vesa.ko
if_axe.ko				netgraph.ko				viapm.ko
if_axge.ko				netlink.ko				viawd.ko
if_axp.ko				nfscl.ko				videomode.ko
if_bce.ko				nfscommon.ko				virtio.ko
if_bfe.ko				nfsd.ko					virtio_balloon.ko
if_bge.ko				nfslockd.ko				virtio_blk.ko
if_bnxt.ko				nfsmb.ko				virtio_console.ko
if_bridge.ko				nfssvc.ko				virtio_pci.ko
if_bwi.ko				ng_UI.ko				virtio_random.ko
if_bwn.ko				ng_async.ko				virtio_scsi.ko
if_bxe.ko				ng_atmllc.ko				vkbd.ko
if_cas.ko				ng_bluetooth.ko				vmci.ko
if_cc.ko				ng_bpf.ko				vmd.ko
if_ccv.ko				ng_bridge.ko				vmm.ko
if_cdce.ko				ng_btsocket.ko				vpd.ko
if_cdceem.ko				ng_car.ko				warp_saver.ko
if_cue.ko				ng_ccatm.ko				wbwd.ko
if_cxgb.ko				ng_checksum.ko				wlan.ko
if_cxgbe.ko				ng_cisco.ko				wlan_acl.ko
if_cxgbev.ko				ng_deflate.ko				wlan_amrr.ko
if_cxl.ko				ng_device.ko				wlan_ccmp.ko
if_cxlv.ko				ng_echo.ko				wlan_rssadapt.ko
if_dc.ko				ng_eiface.ko				wlan_tkip.ko
if_disc.ko				ng_etf.ko				wlan_wep.ko
if_edsc.ko				ng_ether.ko				wlan_xauth.ko
if_em.ko				ng_ether_echo.ko			wmt.ko
if_ena.ko				ng_frame_relay.ko			wpifw.ko
if_enc.ko				ng_gif.ko				wsp.ko
if_epair.ko				ng_gif_demux.ko				x86bios.ko
if_et.ko				ng_hci.ko				xb360gp.ko
if_fwe.ko				ng_hole.ko				xdr.ko
if_fwip.ko				ng_hub.ko				xhci.ko
if_fxp.ko				ng_iface.ko				xz.ko
if_gem.ko				ng_ip_input.ko				zfs.ko
if_gif.ko				ng_ipfw.ko				zlib.ko
if_gre.ko				ng_ksocket.ko
if_gve.ko				ng_l2cap.ko
root@free:/usr # 

 

Compilando... usa 1 GB de RAM y la carga a subido hasta 6 y ha tardado unos cuantos minutos, en el VPS con 512 GB de RAM o muere o tarda la vida

Primer intento fallido

Murio :/

linking kernel.full
ld: error: undefined symbol: vid_configure
>>> referenced by syscons.c:366 (/usr/src/sys/dev/syscons/syscons.c:366)
>>>               syscons.o:(sc_probe_unit)
>>> referenced by syscons.c:366 (/usr/src/sys/dev/syscons/syscons.c:366)
>>>               syscons.o:(sc_cnprobe)

Buscando información al respecto...

Time later...

Parece que el error ya dice cosas: refenced by syscons

Parece que he quitado drivers de más y dejado alguno que genera conflicto

# syscons is the legacy console driver, resembling an SCO console
device          sc
options         SC_PIXEL_MODE           # add support for the raster text mode

No he entendido del todo bien el problema, parece que syscons es una consola antigua, que por si sola no funciona si no encuentra drivers antiguos que hemos quitado

Entiendo que ese driver antiguo es:

#device         vga                     # VGA video card driver
#options        VESA                    # Add support for VESA BIOS Extensions (VBE)

Que esta cargado justo antes de syscos

Quito syscons pero no me quedo tranquilo a ver si luego no va a funcionar el KVM para gestión remota, aunque debería funcionar con el vt y vt_vga, en todo casi si no funciona volvemos a compilar y ya, esto es un aprendizaje, tenemos tiempo

Bien vuelta a empezar y a ver que pasa....

Time LATER...

Parece que acabo bien ahora, solo ha tardado 120 segundos y como no, si hemos quitado todo, supongo que quedará tan ligero que podemos montarlo en un microhondas ( a ver si arranca en el vps primero )

MAKE="make" sh /usr/src/sys/conf/newvers.sh "-R" SKAMASLE-MINIMAL
--- vers.o ---
cc -target x86_64-unknown-freebsd13.5 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -c -O2 -pipe  -fno-strict-aliasing  -g -nostdinc  -I. -I/usr/src/sys -I/usr/src/sys/contrib/ck/include -I/usr/src/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common    -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer  -fdebug-prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float  -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error=tautological-compare -Wno-error=empty-body -Wno-error=parentheses-equality -Wno-error=unused-function -Wno-error=pointer-sign -Wno-error=shift-negative-value -Wno-address-of-packed-member -Wno-error=array-parameter -Wno-error=deprecated-non-prototype -Wno-error=strict-prototypes -Wno-error=unused-but-set-variable -Wno-error=unused-but-set-variable -Wno-format-zero-length   -mno-aes -mno-avx  -std=iso9899:1999 -Werror  vers.c
ctfconvert -L VERSION -g vers.o
--- kernel.full ---
linking kernel.full
ctfmerge -L VERSION -g -o kernel.full ...
     text     data       bss       dec        hex   filename
  4565323   458647   3739712   8763682   0x85b922   kernel.full
--- kernel.debug ---
objcopy --only-keep-debug kernel.full kernel.debug
--- kernel ---
objcopy --strip-debug --add-gnu-debuglink=kernel.debug  kernel.full kernel
--------------------------------------------------------------
>>> Kernel build for SKAMASLE-MINIMAL completed on Sun Feb  1 13:00:19 UTC 2026
--------------------------------------------------------------
>>> Kernel(s)  SKAMASLE-MINIMAL built in 120 seconds, ncpu: 6, make -j6
--------------------------------------------------------------

Se compilo bien pero no metio los drivers virtio, por mi culpa, por estar documentando copie en otro lado  device vitio y no en el fichero de configuración.

Vuelta a empezar...

Time Later...

Error otra vez, 

__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error=tautological-compare -Wno-error=empty-body -Wno-error=parentheses-equality -Wno-error=unused-function -Wno-error=pointer-sign -Wno-error=shift-negative-value -Wno-address-of-packed-member -Wno-error=array-parameter -Wno-error=deprecated-non-prototype -Wno-error=strict-prototypes -Wno-error=unused-but-set-variable -Wno-error=unused-but-set-variable -Wno-format-zero-length -mno-aes -mno-avx -std=iso9899:1999 -Werror -mmmx -msse -msse2 /usr/src/sys/kern/subr_clockcalib.c
ctfconvert -L VERSION -g subr_clockcalib.o
--- hack.pico ---
rm -f hack.c
--- local_apic.o ---
1 warning generated.
ctfconvert -L VERSION -g local_apic.o
--- vnode_if.o ---
ctfconvert -L VERSION -g vnode_if.o
--- x86emu.o ---
ctfconvert -L VERSION -g x86emu.o
--- pmap.o ---
2 warnings generated.
ctfconvert -L VERSION -g pmap.o
--- vers.c ---
MAKE="make" sh /usr/src/sys/conf/newvers.sh "-R" MINIMAL
--- vers.o ---
cc -target x86_64-unknown-freebsd13.5 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -c -O2 -pipe  -fno-strict-aliasing  -g -nostdinc  -I. -I/usr/src/sys -I/usr/src/sys/contrib/ck/include -I/usr/src/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common    -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer  -fdebug-prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float  -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error=tautological-compare -Wno-error=empty-body -Wno-error=parentheses-equality -Wno-error=unused-function -Wno-error=pointer-sign -Wno-error=shift-negative-value -Wno-address-of-packed-member -Wno-error=array-parameter -Wno-error=deprecated-non-prototype -Wno-error=strict-prototypes -Wno-error=unused-but-set-variable -Wno-error=unused-but-set-variable -Wno-format-zero-length   -mno-aes -mno-avx  -std=iso9899:1999 -Werror  vers.c
ctfconvert -L VERSION -g vers.o
--- kernel.full ---
linking kernel.full
ld: error: undefined symbol: xpt_setup_ccb
>>> referenced by virtio_scsi.c:717 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:717)
>>>               virtio_scsi.o:(vtscsi_detach)
>>> referenced by virtio_scsi.c:701 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:701)
>>>               virtio_scsi.o:(vtscsi_register_cam)

ld: error: undefined symbol: xpt_action
>>> referenced by virtio_scsi.c:723 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:723)
>>>               virtio_scsi.o:(vtscsi_detach)
>>> referenced by virtio_scsi.c:707 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:707)
>>>               virtio_scsi.o:(vtscsi_register_cam)

ld: error: undefined symbol: xpt_free_path
>>> referenced by virtio_scsi.c:659 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:659)
>>>               virtio_scsi.o:(vtscsi_detach)
>>> referenced by virtio_scsi.c:638 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:638)
>>>               virtio_scsi.o:(vtscsi_register_cam)
>>> referenced by virtio_scsi.c:1737 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1737)
>>>               virtio_scsi.o:(vtscsi_complete_reset_dev_cmd)

ld: error: undefined symbol: xpt_bus_deregister
>>> referenced by virtio_scsi.c:662 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:662)
>>>               virtio_scsi.o:(vtscsi_detach)
>>> referenced by virtio_scsi.c:643 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:643)
>>>               virtio_scsi.o:(vtscsi_register_cam)

ld: error: undefined symbol: cam_sim_free
>>> referenced by virtio_scsi.c:666 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:666)
>>>               virtio_scsi.o:(vtscsi_detach)

ld: error: undefined symbol: cam_simq_alloc
>>> referenced by virtio_scsi.c:581 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:581)
>>>               virtio_scsi.o:(vtscsi_alloc_cam)

ld: error: undefined symbol: cam_sim_alloc
>>> referenced by virtio_scsi.c:587 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:587)
>>>               virtio_scsi.o:(vtscsi_alloc_cam)

ld: error: undefined symbol: cam_simq_free
>>> referenced by virtio_scsi.c:591 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:591)
>>>               virtio_scsi.o:(vtscsi_alloc_cam)

ld: error: undefined symbol: xpt_bus_register
>>> referenced by virtio_scsi.c:610 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:610)
>>>               virtio_scsi.o:(vtscsi_register_cam)

ld: error: undefined symbol: xpt_create_path
>>> referenced by virtio_scsi.c:618 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:618)
>>>               virtio_scsi.o:(vtscsi_register_cam)
>>> referenced by virtio_scsi.c:0 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:0)
>>>               virtio_scsi.o:(vtscsi_event_vq_intr)
>>> referenced by virtio_scsi.c:1730 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1730)
>>>               virtio_scsi.o:(vtscsi_complete_reset_dev_cmd)

ld: error: undefined symbol: xpt_alloc_ccb_nowait
>>> referenced by virtio_scsi.c:1747 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1747)
>>>               virtio_scsi.o:(vtscsi_event_vq_intr)
>>> referenced by virtio_scsi.c:1747 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1747)
>>>               virtio_scsi.o:(vtscsi_event_vq_intr)

ld: error: undefined symbol: xpt_rescan
>>> referenced by virtio_scsi.c:0 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:0)
>>>               virtio_scsi.o:(vtscsi_event_vq_intr)

ld: error: undefined symbol: xpt_free_ccb
>>> referenced by virtio_scsi.c:0 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:0)
>>>               virtio_scsi.o:(vtscsi_event_vq_intr)

ld: error: undefined symbol: xpt_release_simq
>>> referenced by virtio_scsi.c:2144 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:2144)
>>>               virtio_scsi.o:(vtscsi_enqueue_request)
>>> referenced by virtio_scsi.c:2050 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:2050)
>>>               virtio_scsi.o:(vtscsi_reset_bus)

ld: error: undefined symbol: xpt_done
>>> referenced by virtio_scsi.c:994 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:994)
>>>               virtio_scsi.o:(vtscsi_cam_action)
>>> referenced by virtio_scsi.c:0 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:0)
>>>               virtio_scsi.o:(vtscsi_cam_action)
>>> referenced by virtio_scsi.c:1412 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1412)
>>>               virtio_scsi.o:(vtscsi_complete_scsi_cmd)
>>> referenced 4 more times

ld: error: undefined symbol: cam_calc_geometry
>>> referenced by virtio_scsi.c:775 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:775)
>>>               virtio_scsi.o:(vtscsi_cam_action)

ld: error: undefined symbol: xpt_freeze_simq
>>> referenced by virtio_scsi.c:1691 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1691)
>>>               virtio_scsi.o:(vtscsi_cam_action)
>>> referenced by virtio_scsi.c:1691 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1691)
>>>               virtio_scsi.o:(vtscsi_cam_action)
>>> referenced by virtio_scsi.c:1691 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1691)
>>>               virtio_scsi.o:(vtscsi_cam_action)
>>> referenced 1 more times

ld: error: undefined symbol: xpt_freeze_devq
>>> referenced by virtio_scsi.c:1402 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:1402)
>>>               virtio_scsi.o:(vtscsi_complete_scsi_cmd)

ld: error: undefined symbol: xpt_path_string
>>> referenced by virtio_scsi.c:2355 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:2355)
>>>               virtio_scsi.o:(vtscsi_printf_req)

ld: error: undefined symbol: scsi_command_string
>>> referenced by virtio_scsi.c:2358 (/usr/src/sys/dev/virtio/scsi/virtio_scsi.c:2358)
>>>               virtio_scsi.o:(vtscsi_printf_req)

ld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors)
*** [kernel.full] Error code 1

make[2]: stopped in /usr/obj/usr/src/amd64.amd64/sys/MINIMAL
1 error

make[2]: stopped in /usr/obj/usr/src/amd64.amd64/sys/MINIMAL

make[1]: stopped in /usr/src

make: stopped in /usr/src

Error por driver de disco

Más problemas, ahora con virtio_scsi parece que nos faltan dependencias, en este setup voy a quitar virtio_scsi, realmente  no hace falta si la VPS arranca con virtio_blk, virtio_scsi nos sobra, el problema puede venir si un día esa VPS se migra a otro sistema y se estable para arrancar con virtio_scsi, así que vamos a dejar un único driver y si en un futuro tenemos problemas, sabiendo que lo hemos dejando así lo solventaremos cargando otro kernel.

¿ Como estoy seguro que debería funcionar ? virtualizamos con KVM a diario y algunos sistemas no tienen incluido virtio_blk y arracan con scsi y otros no tienen scsi y arrancan con blk y si no tienen ninguno arrancan con IDE o SATA,  luego no es tan grave, si seleccionas mal el driver en proxmox por ejemplo lo único que pasa es que el sistema te dice que no encuentra el disco.

Entonces quitamos virtio_scsi y vuelta a empezar... mernos mal que compilamos lo minimo posible y tarda menos de 3 minutos, si no nos tiramos aquí 2 días, incluso estoy por poner más cores para que tarde menos.

Time later...

Ahora ya quedo, compilado y tenemos virtio para todo lo que nos hace falta.

# strings /usr/obj/usr/src/amd64.amd64/sys/SKAMASLE-MINIMAL/kernel | grep virtio
virtio_device_name
virtio_describe_sbuf
virtio_describe
virtio_filter_transport_features
virtio_bus_is_modern
virtio_read_ivar
virtio_read_device_config_array
virtio_bus_config_generation_desc
virtio_bus_read_device_config_desc
virtio_config_generation
virtio_read_device_config
virtio_write_ivar
virtio_negotiate_features
virtio_bus_negotiate_features_desc
virtio_finalize_features
virtio_bus_finalize_features_desc
virtio_alloc_virtqueues
virtio_bus_alloc_virtqueues_desc
virtio_setup_intr
virtio_bus_setup_intr_desc
virtio_with_feature
virtio_bus_with_feature_desc
virtio_stop
virtio_bus_stop_desc
virtio_reinit
virtio_bus_reinit_desc
virtio_reinit_complete
virtio_bus_reinit_complete_desc
virtio_write_device_config
virtio_bus_write_device_config_desc
virtio_child_pnpinfo_str
virtio_bus_notify_vq_desc
virtio_bus_poll_desc
virtio_attach_completed_desc
virtio_config_change_desc
virtio_pci_disable_vq_desc
virtio_pci_get_vq_size_desc
virtio_pci_set_vq_desc
virtio_pci_register_cfg_msix_desc
virtio_pci_register_vq_msix_desc
virtio_pci_get_vq_notify_off_desc
virtio_pci_read_isr_desc
hw.virtio.pci.transitional
virtio_mmio/virtio_blk
virtio_random_virtio_pci
virtio_balloon
virtio_console_virtio_pci
virtio
virtio_random_virtio_mmio
virtio_pci/virtio_blk
pci/virtio_pci_legacy
virtio_mmio/virtio_console
virtio_pci
virtio_balloon_virtio_mmio
virtio_pci_legacy_pci
pci/virtio_pci_modern
virtio_pci/virtio_console
vtnet_virtio_mmio
virtio_blk_virtio_pci
virtio_console
virtio_mmio/vtnet
virtio_mmio
virtio_random
virtio_pci/vtnet
virtio_pci/virtio_random
virtio_blk
virtio reinit error %d
virtio_blk_virtio_mmio
virtio_pci/virtio_balloon
virtio_mmio/virtio_random
virtio_console_virtio_mmio
virtio_pci_modern_pci
virtio_mmio/virtio_balloon
hw.virtio.pci.disable_msix
virtio_console: Waiting for all detached TTY devices to have open fds closed.
virtio_balloon_virtio_pci
vtnet_virtio_pci
device	virtio
device	virtio_pci
device	virtio_blk
device	virtio_balloon
device	virtio_random
device	virtio_console

 

Antes de meterlo en el VPS vamos a ver si arranca virtualbox con este nuevo kernel

Hacemos backup del kernel actual:

cp -Rp /boot/kernel /boot/kernel.original

He instalamos lo que hemos compilado

cd /usr/src
make installkernel KERNCONF=SKAMASLE-MINIMAL

Copia todo y la salida final:

install -T release -o root -g wheel -m 444   xz.ko /boot/kernel/
install -T dbg -o root -g wheel -m 444   xz.ko.debug /usr/lib/debug/boot/kernel/
===> zfs (install)
install -T release -o root -g wheel -m 444   zfs.ko /boot/kernel/
install -T dbg -o root -g wheel -m 444   zfs.ko.debug /usr/lib/debug/boot/kernel/
===> zlib (install)
install -T release -o root -g wheel -m 444   zlib.ko /boot/kernel/
install -T dbg -o root -g wheel -m 444   zlib.ko.debug /usr/lib/debug/boot/kernel/
kldxref /boot/kernel
--------------------------------------------------------------
>>> Installing kernel SKAMASLE-MINIMAL completed on Sun Feb  1 13:27:43 UTC 2026
--------------------------------------------------------------

Reiniciamos y ....

freebsd boot fail

Nos hemos pasado de quitar cosas al parecer enc uanto estaba arrancando he pesando, no he metido nada en el archivo de configuración para el tema del sistema de ficheros :/ 

Event timer "RTC" frequency 32768 Hz quality 0
Timecounter "TSC-low" frequency 1843195023 Hz quality 0
Timecounters tick every 10.000 msec
Trying to mount root from ufs:/dev/gpt/rootfs [rw]...
Mounting from ufs:/dev/gpt/rootfs failed with error 2: unknown file system.

Loader variables:
    vfs.root.mountfrom=ufs:/dev/gpt/rootfs
    vfs.root.mountfrom.options=rw

Manual root filesystem specification:
  <fstype>:<device> [options]
      Mount <device> using filesystem <fstype>
      and with the specified (optional) option list.

    eg. ufs:/dev/da0s1a
        zfs:zroot/ROOT/default
        cd9660:/dev/cd0 ro
          (which is equivalent to: mount -t cd9660 -o ro /dev/cd0 /)

  ?               List valid disk boot devices
  .               Yield 1 second (for background tasks)
  <empty line>    Abort manual input

mountroot>
error 2: unknown file system

De momento estamos a salvo, lo bueno ha sido que renombramos la carpeta kernel por kernel.orignal así que podemos arrancar desde el kernel viejo

Reinciamos y presionamos 3 para modificar el arranque ( lo que hariamos en el grub en linux presionando e ) y escribimos:

boot /boot/kernel.original

Y listo:

Arrancar kernel original

 

Con esto estamos dentro, vamos a recopilar otra vez, directamente viendo el error y lo que no detecta lo sacamos desde GENERIC, he comprado y en principio tenemos UFS y todo, pero parece que falta :

 # grep FFS GENERIC
options 	FFS			# Berkeley Fast Filesystem

Todas las demás opciones están en MINIMAL

 grep -i UFS SKAMASLE-MINIMAL 
options 	UFS_ACL			# Support for access control lists
options 	UFS_DIRHASH		# Improve performance on big directories
options 	UFS_GJOURNAL		# Enable gjournal-based UFS journaling
options 	QUOTA			# Enable disk quotas for UFS

Supongo que al ser una VM hace falta FFS pero en una física no ? ni idea, pero no venia, compilamos a ver si es eso.

Time Later...

Mismo error, no era FFS, y aquí te das cuenta que igual era mejor pagar por 512 MB más de RAM, pero luego piensas, que el aprendizaje es más importante, toca investigar un poco más y profundizar a ver que hace falta.

Revisando.....

Time later...

Bien, estoy agilipollado, horas antes, hablamos de virtio_iscsi, pues, virtualbox usa virtio_iscsi... no tiene opción para seleccionar otro driver.

Como posiblemente en el VPS no haga falta, probaremos el kernel así.

Voy a empaquetar antes de subir

mkdir /tmp/skamasle-minimal
cd /usr/src
make installkernel KERNCONF=SKAMASLE-MINIMAL DESTDIR=/tmp/skamasle-minimal
cd  /tmp/skamasle-minimal
tar -cvzf ~/skamasle-minimal-kernel.tar.gz .

Lo movemos al VPS y descomprimimos con previo backup de la carpeta kernel como hicimos en virtualbox por si no arranca podamos arrancar desde ese kernel antiguo

# Descomprimimos y machacamos no olvides el backup.. cp -Rp que hicimos antes
 tar -xvpzf /root/skamasle-minimal-kernel.tar.gz  -C /

 

Malas noticias 

El VPS tampoco arranca, voy a revisar más a fondo, igual el problema es ZFS o que el VPS si que necesita virtio_scsi, tocará añadirlo y ver que pasa.

Ahora bien he estado revisando y ZFS no viene por defecto en ningńu archivo, ni en minimal, ni en generic ni en ningún lado, pero hay una referencia de ello en NOTES

# ZFS support

# NB: This depends on crypto, cryptodev and ZSTDIO
options         ZFS

 

Toca modificar SKAMASLE-MINIMAL

# ZFS
options         ZFS 
device          crypto
device          cryptodev
options         ZSTDIO 

Perdí el número de veces que hemos compilado ya, pero por no leer bien las notas pasan estas cosas.

Time later...

Error again..

ld: error: undefined symbol: xdr_opaque
>>> referenced by nvpair.c:3386 (/usr/src/sys/contrib/openzfs/module/nvpair/nvpair.c:3386)
>>>               nvpair.o:(nvs_xdr_nvp_op)

ld: error: undefined symbol: xdr_array
>>> referenced by nvpair.c:0 (/usr/src/sys/contrib/openzfs/module/nvpair/nvpair.c:0)
>>>               nvpair.o:(nvs_xdr_nvp_op)
*** [kernel.full] Error code 1

make[2]: stopped in /usr/obj/usr/src/amd64.amd64/sys/SKAMASLE-MINIMAL
1 error

make[2]: stopped in /usr/obj/usr/src/amd64.amd64/sys/SKAMASLE-MINIMAL

make[1]: stopped in /usr/src

Añadimos :

options         KRPC

 NOTES no decia que hacia falta KRPC para ZFS... así que leer notas tampoco nos soluciona nada.

Vuelta a empezar...

Time LATER...

Con los módulos nuevos +10 segundos de compilación desde el primer intento

--------------------------------------------------------------
>>> Kernel(s)  SKAMASLE-MINIMAL built in 130 seconds, ncpu: 6, make -j6
--------------------------------------------------------------

Nada, sigue el problema del arranque en Vbox, toca meter virtio_scsi pero en la documentación no menciona nada de las dependencias https://man.freebsd.org/cgi/man.cgi?query=virtio_scsi&sektion=4

Vamos devuelta......

Time Later...

Leyendo: https://forums.freebsd.org/threads/boot-failed-with-error-2-unknown-file-system-after-ugrade-10-3-to-11-2.68886/

He visto que podía faltar soporte para GEOM

Lo he añadido y nada

He añadido soporte para PCI y nada

Y un repaso general de la config, he visto que dije de añadir  FFS que es el fast file system y convencido estaba que lo había añadido................ y horas después veo que no lo añadí.......

Haciendo pruebas también veo que no arranco la red ya que deshabilite DHCP

En fin, el kernel ya arranca, falta hacer algún ajuste a la red

En virtualbox me da un poco igual la red ya que no usamos virtio de inicio y no me hace falta para nada ese freebsd

Lo importante es el VPS cuando se suba el kernel.

Subiendo....

Y tenemos red..

¿ La hora de verdad, todo este trabajo ha valido la pena ?

Yo diría que poco, podemos enfocarnos en que he aprendido bastante a la hora de compilar el kernel y sobre todo para que sirve cada modulo, pero la ganancia no ha sido mucha, en porcentaje inicialmente, al arrancar el sistema consumimos un 7 a 10% menos de RAM pero si no usamos RAM wired crece y va ocupando RAM que luego se puede liberar.

Si, ahorramos algo de RAM quitando muchos módulos que una VPS no va a usarla, y con 512MB ahorrar unos 30 MB se puede considerar un logro para este proyecto.

Me quedo con lo aprendido, la ganancia no es mucha, tampoco se esperaba que fuera demasiado y sobre todo se nota al arrancar el sistema, luego entre caches y demás esa percepción desaparece, pero esta claro que el sistema ya de inicio necesita menos RAM.