From nobody Tue May 13 13:40:32 2025 X-Original-To: freebsd-embedded@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Zxd086l14z5vMyC for ; Tue, 13 May 2025 13:40:40 +0000 (UTC) (envelope-from karl@denninger.net) Received: from colo1.denninger.net (colo1.denninger.net [104.236.120.189]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4Zxd0819HXz3FJd for ; Tue, 13 May 2025 13:40:40 +0000 (UTC) (envelope-from karl@denninger.net) Authentication-Results: mx1.freebsd.org; dkim=none; spf=pass (mx1.freebsd.org: domain of karl@denninger.net designates 104.236.120.189 as permitted sender) smtp.mailfrom=karl@denninger.net; dmarc=pass (policy=none) header.from=denninger.net Received: from denninger.net (unknown [162.81.130.228]) by colo1.denninger.net (Postfix) with ESMTP id BFA5CB16C5 for ; Tue, 13 May 2025 09:40:43 -0400 (EDT) Received: from [192.168.10.28] (D18.Denninger.Net [192.168.10.28]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by denninger.net (Postfix) with ESMTPSA id 5F07D487EBF for ; Tue, 13 May 2025 09:40:33 -0400 (EDT) Message-ID: <5887b3f9-8820-47fb-8d26-94e184cdafeb@denninger.net> Date: Tue, 13 May 2025 09:40:32 -0400 List-Id: Dedicated and Embedded Systems List-Archive: https://lists.freebsd.org/archives/freebsd-embedded List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-embedded@FreeBSD.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: freebsd-embedded@freebsd.org From: Karl Denninger Subject: Where/how to submit proposed patches to Nanobsd provided files? Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms050203030001090701070005" X-Rspamd-Queue-Id: 4Zxd0819HXz3FJd X-Spamd-Bar: / X-Spamd-Result: default: False [-0.53 / 15.00]; SIGNED_SMIME(-2.00)[]; SUBJECT_ENDS_QUESTION(1.00)[]; NEURAL_SPAM_LONG(1.00)[1.000]; NEURAL_SPAM_MEDIUM(1.00)[1.000]; NEURAL_HAM_SHORT(-0.73)[-0.730]; DMARC_POLICY_ALLOW(-0.50)[denninger.net,none]; R_SPF_ALLOW(-0.20)[+mx]; MIME_GOOD(-0.20)[multipart/signed,multipart/alternative,text/plain]; MIME_BASE64_TEXT(0.10)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~,4:~]; RCPT_COUNT_ONE(0.00)[1]; HAS_ATTACHMENT(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; ARC_NA(0.00)[]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:14061, ipnet:104.236.64.0/18, country:US]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; FREEFALL_USER(0.00)[karl]; PREVIOUSLY_DELIVERED(0.00)[freebsd-embedded@freebsd.org]; R_DKIM_NA(0.00)[]; MLMMJ_DEST(0.00)[freebsd-embedded@freebsd.org]; MID_RHS_MATCH_FROM(0.00)[]; FROM_HAS_DN(0.00)[] This is a cryptographically signed message in MIME format. --------------ms050203030001090701070005 Content-Type: multipart/alternative; boundary="------------lBZTrX5Qva2KeCQ0F4sz07q4" --------------lBZTrX5Qva2KeCQ0F4sz07q4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SSd2ZSBwdXQgc29tZSB0aW1lIGluIG9uIHRoZSAiTmFub2JzZCIgYnVpbGQgcHJvY2VzcyBm aWxlcyB0aGF0IGRvIGEgZmV3IA0KdGhpbmdzOg0KDQoxLiBTdXBwb3J0IGVmaSBkdWFsLWJv b3QgbW9kZSAoRUZJIG9yIG5vdCkgd2hpbGUga2VlcGluZyBhbiBNQlIgDQpwYXJ0aXRpb24g bGF5b3V0IHNvIG9sZGVyIGRldmljZXMgY2FuIHN0aWxsIGJvb3QgdGhlIG1lZGlhIGFuZCBh bHNvIGtlZXAgDQp0aGUgZGF0YSBwYXJ0aXRpb24uwqAgQmFzaWNhbGx5LCBzZXQgdXAgUGFy dGl0aW9uIDQgYXMgYW4gZXh0ZW5kZWQgIkJTRCIgDQpwYXJ0aXRpb24gd2l0aCAiYSIgKGNm ZykgYW5kICJkIiAoZGF0YSwgaWYgbm9uLXplcm8gc2l6ZSkgc28gdGhleSBib3RoIA0Kd29y ay7CoCBUaGlzIGludm9sdmVkIGVzc2VudGlhbGx5IGEgcmV3cml0ZSBvZiB0aGUgImxlZ2Fj eSIgZmlsZSBlbnRpcmVseSANCnNpbmNlIHRoZSBwYXJ0aXRpb24gY3JlYXRpb24gd2FzIGRv bmUgdGhyb3VnaCBhd2sgYmFzaWNhbGx5IGVtaXR0aW5nIGEgDQpzY3JpcHQgaXQgdGhlbiBl eGVjdXRlZDsgaXQgd2FzIG11Y2ggZWFzaWVyIHRvLCBkdWUgdG8gdGhlIGRpZmZlcmVudCAN CnR5cGVzIGludm9sdmVkLCBqdXN0IGRvICJuYWgiLCBtYWtlIGEgY2FsY3VsYXRpb24gZm9y IHRoZSBjb2RlIHNlZ21lbnRzLCANCnN1YnRyYWN0IG9mZiBzcGFjZSBmb3IgdGhlIEVGSSBw YXJ0aXRpb24gYW5kIGNmZyBhcmVhIGFuZCB0aGVuIHVzZSANCndoYXQncyBsZWZ0IGZvciBk YXRhLg0KDQoyLiBQdXQgdGhlIEVGSSBwYXJ0aXRpb24gaW4gc2xvdCAzIHRodXMgdGhlICJk dWFsIGltYWdlLCBvbmxpbmUgdXBkYXRlIiANCmNhcGFjaXR5IGlzIHVucGVydHVyYmVkLsKg IFBsYWNlIHRoZSBsb2FkZXIgaW4gDQpFRkkvQk9PVC97YXJjaGl0ZWN0dXJlLXNwZWNpZmlj LW5hbWV9IGFzIGRlZmluZWQgaW4gdGhlIGNvbmZpZyBmaWxlLsKgIA0KVGhpcyBpcyBoYXJt bGVzcyBpZiB0aGUgbWFjaGluZSBpcyBDU00gYm9vdCBidXQgaWYgaXRzIEVGSSBpdCB3aWxs IGZpbmQgDQppdCBhbmQgYm9vdCB1c2luZyBpdC4NCg0KMy4gVXBkYXRlIHRoZSAidXBkYXRl cHgiIGZpbGVzIGRpc3RyaWJ1dGVkIHRvIGxvb2sgZm9yIGFuIEVGSSBwYXJ0aXRpb24gDQpv biB0aGUgTmFub0JTRCBkZXZpY2UgYW5kLCBpZiBmb3VuZCwgc2V0IGxvYWRlci5lbnYgd2hp Y2ggc2hvdWxkIHRoZW4gDQpjYXVzZSB0aGUgRUZJIGxvYWRlciB0byB1c2UgdGhlIGNvcnJl Y3QgbG9hZCBwYXJ0aXRpb24gc2luY2UgdGhlIA0KImFjdGl2ZSIgZmxhZyBpcyBpZ25vcmVk IG90aGVyd2lzZS4NCg0KU2hvdWxkIEkgcHV0IHRoZXNlIHVwIHNvbWV3aGVyZSBmb3IgcG9z c2libGUgcmV2aWV3IGFuZCBpbmNsdXNpb24/wqAgSSANCnVzZSB0aGlzIHRvIGJ1aWxkIGJv b3RhYmxlIHN0aWNrcyBvciBTRCBjYXJkcyBmb3IgZmlyZXdhbGwgYXBwbGlhbmNlcyANCnRo YXQgcnVuICJyZWFkLW9ubHkiIGFuZCB0aHVzIGFyZSBwb3dlci1mYWlsIHNhZmUsIGFuZCBo YXZlIHRlc3RlZCANCmFnYWluc3QgYm90aCBhIGNvbW1vZGl0eSBFRkktYm9vdC1vbmx5IGR1 YWwtTklDICJOVUMiIHN0eWxlIFBDIGFuZCBhbHNvIA0KdGhlIG9sZGVyIHBjRW5naW5lcyBh cHUyIHNlcmllcy4NCg0KLS0gDQpLYXJsIERlbm5pbmdlcg0Ka2FybEBkZW5uaW5nZXIubmV0 DQovVGhlIE1hcmtldCBUaWNrZXIvDQovW1MvTUlNRSBlbmNyeXB0ZWQgZW1haWwgcHJlZmVy cmVkXS8NCg== --------------lBZTrX5Qva2KeCQ0F4sz07q4 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

I've put some time in on the "Nanobsd" build process files that do a few things:

1. Support efi dual-boot mode (EFI or not) while keeping an MBR partition layout so older devices can still boot the media and also keep the data partition.=C2=A0 Basically, set up Partition 4 a= s an extended "BSD" partition with "a" (cfg) and "d" (data, if non-zero size) so they both work.=C2=A0 This involved essentially a rewrite = of the "legacy" file entirely since the partition creation was done through awk basically emitting a script it then executed; it was much easier to, due to the different types involved, just do "nah", make a calculation for the code segments, subtract off space for the EFI partition and cfg area and then use what's left for data.

2. Put the EFI partition in slot 3 thus the "dual image, online update" capacity is unperturbed.=C2=A0 Place the loader in EFI/BOOT/{architecture-specific-name} as defined in the config file.=C2=A0 This is harmless if the machine is CSM boot but if its = EFI it will find it and boot using it.

3. Update the "updatepx" files distributed to look for an EFI partition on the NanoBSD device and, if found, set loader.env which should then cause the EFI loader to use the correct load partition since the "active" flag is ignored otherwise.

Should I put these up somewhere for possible review and inclusion?=C2=A0 I use this to build bootable sticks or SD cards fo= r firewall appliances that run "read-only" and thus are power-fail safe, and have tested against both a commodity EFI-boot-only dual-NIC "NUC" style PC and also the older pcEngines apu2 series.

--
Karl Denninger
karl@denninger.net
The Market Ticker
[S/MIME encrypted email preferred]<= /div> --------------lBZTrX5Qva2KeCQ0F4sz07q4-- --------------ms050203030001090701070005 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwEAAKCC C4owggWZMIIDgaADAgECAhRZU8dKdMneRI1Vq5kv0k54Q5rQuDANBgkqhkiG9w0BAQsFADB2 MQswCQYDVQQGEwJVUzESMBAGA1UECAwJVGVubmVzc2VlMRYwFAYDVQQKDA1EZW5uaW5nZXIu TmV0MRcwFQYDVQQDDA5EZW5uaW5nZXIgUm9vdDEiMCAGCSqGSIb3DQEJARYTYWRtaW5AZGVu bmluZ2VyLm5ldDAeFw0yNDA1MDkyMTA4MDNaFw00NDA1MDQyMTA4MDNaMF0xCzAJBgNVBAYT AlVTMRIwEAYDVQQIDAlUZW5uZXNzZWUxFjAUBgNVBAoMDURlbm5pbmdlci5uZXQxIjAgBgNV BAMMGURlbm5pbmdlci5OZXQgU2lnbmluZyBJbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQDbR0tSiuLG5HPfo+cWtdeYQ8jc8Bjfuo0GTcNRT0glHnH1apUtInIktUknEZDH ohahInN+mMBdKg54FCHOiYZrJbyxBIo9FwX7hRmOc+spxmSYWnOd2E/YcGInMK4ZpjPzldzB Yt1n3zygkhx2bssxTJS3x4nv1qAXfLSZd1VwqoQufifEoPyTtymkkvHLv86vLgqAqooM/cXc 4LSIQ5u2uM308n42r8RkKtp7X1v9fJW8oRZN2XnFZtiUPH44YY2rHqyN2Hea9Y3+TXbldXjo xhPHTA+JYVFq8KTmbQBqU7YcMhlIG0cSxPeFLMxnP6pqPcIVTAlK+a6YGRFppfjZAgMBAAGj ggE2MIIBMjAdBgNVHQ4EFgQUH+VuxXhBxaJAQrvDekwkH91hBi4wgbMGA1UdIwSBqzCBqIAU RFYC4p6L6KITnEvrpx2cyt+PcMmheqR4MHYxCzAJBgNVBAYTAlVTMRIwEAYDVQQIDAlUZW5u ZXNzZWUxFjAUBgNVBAoMDURlbm5pbmdlci5OZXQxFzAVBgNVBAMMDkRlbm5pbmdlciBSb290 MSIwIAYJKoZIhvcNAQkBFhNhZG1pbkBkZW5uaW5nZXIubmV0ghQZE7NBItWtQsCouuwU6jZ+ HPPwnjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vd3d3LmRlbm5pbmdlci5uZXQvcm9vdC1yZXZva2VkLmNybDANBgkqhkiG9w0B AQsFAAOCAgEAfFbhPc82AfhyUqONs7IccYD36w+OP4nQgwfC4IWf3y/aQAZ2Zk6IITzYqwf7 PFM0bJRT3zi7xyetolqHDhfMJvnOQWpITZiyM/FSKwIvuBsy/uJUqPuqui4XQMYoSbAA1qmI MW/z7VZZHwaRFoeWE40UirYcf0fNcooBZ72bmd+iBaVyjtZvky0Vgcz0eC6e6LR5kNb23yC6 TkyQIlGyQkK5/afXUYFzk49rOHVbVyxW3oXRfq8Ow6HCrpDGAS8p84S04MFwBVAUfbe4aXs3 bampaI2LzKgkVywyFP14LSvvdjCfLYfnLy1Z9hm2EHMqNHA2tCGdRhWp2d7aZC1MYFqng0ZS fjPJjqHrI1qPU0p6k9A1GxAtrQlL2v/IUzUnMZkiawFV3qlxMGZf/kTYTUOcJhx1KU4zSLHu 80qO7ldRpp5gHssCAGFbeTu2gp6LxfmaFhLPDBJ1VGfdPx9lUrU/9OcoHczcl5x2Rb8IUZyX 9elzP5WdAU8p5R/DLlOAq24VcabhFtYBCA2dOESLupSfWKNQuJCN/1gz7ysSc+mjnnPV77IO mpszJfkFFJEDNJlGIVKX1vwwygtC/9Ulox8frgbZlRAYAgDc/YbOBFxticVVre0Y3Ujx6Kzb tkgZRlgfdZWbT1W5smncqJxg5qAL8e/yTb3fCe2nJ0jhiP4wggXpMIIE0aADAgECAhMAmNFt CiCF3j+FwQLYtBTmGjzkMA0GCSqGSIb3DQEBCwUAMF0xCzAJBgNVBAYTAlVTMRIwEAYDVQQI DAlUZW5uZXNzZWUxFjAUBgNVBAoMDURlbm5pbmdlci5uZXQxIjAgBgNVBAMMGURlbm5pbmdl ci5OZXQgU2lnbmluZyBJbnQwHhcNMjQwNTEwMTkyNjU5WhcNMjkwNTA5MTkyNjU5WjBXMQsw CQYDVQQGEwJVUzESMBAGA1UECAwJVGVubmVzc2VlMRcwFQYDVQQKDA5LYXJsIERlbm5pbmdl cjEbMBkGA1UEAwwSa2FybEBkZW5uaW5nZXIubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAvh1UssVbSYctzobPjwBkbjv/w4WvQNepeRTwE6+sLnXvc41+X9pa5EclPL4Q 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 L3OZQpz45M7ckDmVBWhjAAAAAAAA --------------ms050203030001090701070005--