From nobody Mon Jan 22 06:55:58 2024 X-Original-To: freebsd-current@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 4TJLbf0T1cz57FPS for ; Mon, 22 Jan 2024 06:56:14 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic308-8.consmr.mail.gq1.yahoo.com (sonic308-8.consmr.mail.gq1.yahoo.com [98.137.68.32]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 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 4TJLbc4xPYz42rf for ; Mon, 22 Jan 2024 06:56:12 +0000 (UTC) (envelope-from marklmi@yahoo.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=yahoo.com header.s=s2048 header.b=li0k1ghU; dmarc=pass (policy=reject) header.from=yahoo.com; spf=pass (mx1.freebsd.org: domain of marklmi@yahoo.com designates 98.137.68.32 as permitted sender) smtp.mailfrom=marklmi@yahoo.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1705906570; bh=oOcWTFBGzs8eNkLyPPmb5vsartPyMqM/sTeS7V9VAu0=; h=From:Subject:Date:To:References:From:Subject:Reply-To; b=li0k1ghUTrYKIcRwG1nTr3NcaP8YxhbouhLPCGUjkzq4sa3htXM6Ub5/IG1xRs6gKNRP8r4narCQpZrUj16BOTJ1XVDSGlDic7VDe2YDFP4oTjLxlfqNDgkydET7xWbSonpsTPXtJxr64vf4Q6DWCGpgQll/0oDAC/3jd7MnnQkzHYpODbzT61V4BoakvbE4Xf+fWnRttkUx9lWWuTyw853xJLp/FtYJO3u++I1dlWGJys+6awU8vmIFQYYtmAi56zo4NUK9nwC0/INNADL7RFa4guQS35Nuwu/YvNuhBKhSCfVCvVas8t19WOdYcT3EM4Scyjblw1a2qJ0MLlAF5w== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1705906570; bh=KCariv8OCeZv4RGPEee2ng0cfPemADzV/tK4S6l9PO2=; h=X-Sonic-MF:From:Subject:Date:To:From:Subject; b=KyyRp/xLo+ilK07ha9a2+OfPqzFU5ejOu9YY7mLZtprZokwCak3wKbNVFrvUKTOsuYa+Vugy5yglupgspKpFUbUeopwkF3U9gjn9PpXhKWKgYTowUoJzl2qHdkqoLiSv7i5SdN78jz3RijnaxpLP7mcx93ir7oKXYar878CPiWh4kWMYyclFaCRj0GMnX6TJTkorwKBGbX2y2OPle2kQof1qULpgtr3soKQXyIN1diPKV51X3jhN0CcvkCXgYtnzrNYB7/8OGEfnIyPyXJoWSF0rh7KM5Z8KZC489vxi/0vpu1hn80VsC6OWgH3pBg+uHMvMI4OFXDJutJF4VdHx+A== X-YMail-OSG: WzAeECoVM1m.1ykm98snWww.nEaFk.52ObeE0aQlaAjSorZ2.c08KfWe2MRk63f PcZl8kHOfKa0APtZ9LXlPbF69VFntoj1B2k_eKBporB2NsLU30xD.46rfNwwDYbTA4SCtIs8wqpW nkGHu3F7tFWOzQ4oVQ2bYGW2GVRAF9pNuNHAmBdmHWz35Ejj82roNzyDE3zDSX1owpJApzm0QU4D C4HegWSBfoDyo2hUhb7J55UfZUrZ2sp1xsUYp0kGwe2OsBZkcDkCFxiLOKeEfC8yEPFNqwGqOaJi tibqMdslvfiNQORqruRWtmnWu5oOF.hoaEkrh1KgVJ_4QO_3fTiyhsGSXBrBwOSBKrIn.R48w7Na Ys6hjxusEmVtLFxFd2tRO9FwGyD3TqOcPhhFPzYRiiuXulqDec8ovj23Y6hQngXcp0na44o3OR0p phjH6Urbvh6s3lZ.ZgI.lWr4dLdrGdN2ZpVVaUxbWj299nFTnTOmXeBgfX4H_8htaDb_PaTZOP7n 7xiCq0UuKLSqFs3gigqI9pcWkEDMHxjJiVHiyhGCq5wVISBs7KmbE.OjHd8tbOeIvqiqK.0yxiS4 ys91rwfM.JEFLoRRaBqePmN0loQd9E0wzolfXjaUPRq0e1JSrRsiAP27YSBN4zihsHEPAMLT7fQq odTxXWNbD8309c7g2vzfCKiM0s4Y4hXG_QxyTgNuW8NQVOqcD.GRJ2qaLwW3S.xRzwNdM8ekZuRc BgrHM6dOJP3QID80EOhm.ijRUERUKZW0juRmZW0VMN7FjEclUBqhR1wR1eVOoXXHPEo5AOeRYRKc gQUslJdOA1uKZJiRDR4ACjF8gepIC1w38Ds3ZYOM7ujMfnsUk_yl2ZUfswu2zpxj7LT8Diw3RvaX 3_CqCHwLkAvnPZoBTlO1dtG4NbXXqnBmlU_SaP4.hrRk0LvgQDQr33DYzkKoDfdZXaZTuNNOfg_d _qryu8stVhvRlKQ4BQ4rv5o6_v4uDUr_nm1EYBrHFER_Yyq4J8DvT84pZJdvDMgLebWdu0G8F5yK MFdUncynSG7EA.ZQaFiM9e.1XP_aHQMaxC9IwHaECM_IyfIZuIEhPqb2MCKqOCg2kjYE.CXMGMiE 8mh8jRzihKqc2gdsXcSpvLDUG_VvcybankBkPu8aewtFQeOXT36GfOEimivvytCnjSlHd2mzOz53 oZhqSiQIvOQrVMlpsnh.oXOsOHCuK44JcDpP8.xErubzgk4rEp0otn4l.lOYjJl4ehrV84qLF_6H uASrxgew4u1JQT5FoqFOz4XXlf5PZ2KFWUuSnKpkRktpx8YEhKFCsxDSXO0obyh6FxH6aVFIgzWk DQ3QBWc_9cS5tFTjG66rw_v3Tlhrc.q54GFr8NMz_c6l.LY_2gH0VVvC8fuhkjYyC_liv_yb65cz jcV_CTGwPFyv67.efC3XTpv397lcnw_0yOH41Wg3FQZ9pe8wtmDS31Xo6C0zjteLxycrEjapFnkP m8I6.Bra1xpmQfAMbWNzfwRigd7PVw6tcA9qCVk3GnoRTn3brzhH9x2JU5k_NA4JDFLzTJvF_rTI k2x7mF4ytgow62v8yRwelxs3Fv7A5zCbWbJmxeC6eu3Jk1LnWX8u_YGO8IYNBuyDuJ6hWWB3.z1J X5rx_Q0oTpD24w1nSsIwxOWepuHOIyK5dZmG2XRTdfnzvoDicKdDk26zfjeNX33xcdoKlds1bm0U 6PTJP33VOP5r_5qbz41zpYO26X5CMF0szrIkFy4YU7I_BCfVGHWn2qIsU2l3UOPiLVsGth6DBTwS RDrjVIKDzT9H__th7CqMUWE67MrCxilaGHZ96XPisNH.7.fk_42Hbtgeyp2w2.B6h9g_gigB4C1R s.5kmq.uVasemIgVq4.ZkV9zNn4GTHT15tPTGLWsc6PFPcPdsj3PFmll8a552MQo87tmsI9w2V3F OyCYSoYNbo2rMrBx0.euoDvN52Pnr8zgjO1et3xFoGWkowCI4_mie1oZojH1T9_oqt_khlBxhFob .EsSbQmG._WiW6aMUHjsVYQjNz4FKba8Uu2KPArhk0mrfbUxu4hEugFaLi0nU3zNQxhv3EtY3LW6 fZ9qtbqI.cw9rg7oovaxSkpilrLrzEWopr32WQgZbvZrvzrZVbRYsbko0xY2HOfzNXQ1yOAJmjBx dZBZLAzxp9bs9HfXNm.Kni1JnzVy0x0o8YyDglNlsXhnnLq8O64ikJ9uuYc3cg0r9Lwnt6A1hkT8 VxFFK8nhlmG3zhxXaxn4KD_Dmk3YrFjROdE9aSwyiKKfkWwt0D24.gk3oqg-- X-Sonic-MF: X-Sonic-ID: e2b1e58d-b303-4325-8d6a-c90c6adc2c6c Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.gq1.yahoo.com with HTTP; Mon, 22 Jan 2024 06:56:10 +0000 Received: by hermes--production-gq1-78d49cd6df-tswkb (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 2246da0ae1f18cc38d754507f535c748; Mon, 22 Jan 2024 06:56:09 +0000 (UTC) From: Mark Millard Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Subject: SDHCI_QUIRK_BROKEN_SDMA_BOUNDARY, maxphys, SDHCI_BLKSZ_SDMA_BNDRY_512K, and alloc_bounce_zone behavior [RPi5 example] Message-Id: Date: Sun, 21 Jan 2024 22:55:58 -0800 To: Current FreeBSD X-Mailer: Apple Mail (2.3774.300.61.1.2) References: X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.50 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; MV_CASE(0.50)[]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; MIME_GOOD(-0.10)[text/plain]; TO_DN_ALL(0.00)[]; RCVD_TLS_LAST(0.00)[]; FREEMAIL_FROM(0.00)[yahoo.com]; DWL_DNSWL_NONE(0.00)[yahoo.com:dkim]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; FROM_HAS_DN(0.00)[]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; DKIM_TRACE(0.00)[yahoo.com:+]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[98.137.68.32:from]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/20, country:US]; RCVD_IN_DNSWL_NONE(0.00)[98.137.68.32:from] X-Rspamd-Queue-Id: 4TJLbc4xPYz42rf I had previously reported on the freebsd-arm list that on the RPi5 used via the EDK2 draft I was seeing: # sysctl hw.busdma hw.busdma.zone0.total_deferred_time: 0 0 hw.busdma.zone0.domain: 0 hw.busdma.zone0.alignment: 524288 hw.busdma.zone0.lowaddr: 0xffffffff hw.busdma.zone0.total_deferred: 0 hw.busdma.zone0.total_bounced: 12018773 hw.busdma.zone0.active_bpages: 12 hw.busdma.zone0.reserved_bpages: 0 hw.busdma.zone0.free_bpages: 1227 hw.busdma.zone0.total_bpages: 1239 hw.busdma.total_bpages: 1239 Note the large alignment. It turns out that the first alloc_bounce_zone call on the RPi5 is for: if (!(slot->quirks & SDHCI_QUIRK_BROKEN_SDMA_BOUNDARY)) { if (maxphys <=3D 1024 * 4) slot->sdma_boundary =3D = SDHCI_BLKSZ_SDMA_BNDRY_4K; else if (maxphys <=3D 1024 * 8) slot->sdma_boundary =3D = SDHCI_BLKSZ_SDMA_BNDRY_8K; else if (maxphys <=3D 1024 * 16) slot->sdma_boundary =3D = SDHCI_BLKSZ_SDMA_BNDRY_16K; else if (maxphys <=3D 1024 * 32) slot->sdma_boundary =3D = SDHCI_BLKSZ_SDMA_BNDRY_32K; else if (maxphys <=3D 1024 * 64) slot->sdma_boundary =3D = SDHCI_BLKSZ_SDMA_BNDRY_64K; else if (maxphys <=3D 1024 * 128) slot->sdma_boundary =3D = SDHCI_BLKSZ_SDMA_BNDRY_128K; else if (maxphys <=3D 1024 * 256) slot->sdma_boundary =3D = SDHCI_BLKSZ_SDMA_BNDRY_256K; else slot->sdma_boundary =3D = SDHCI_BLKSZ_SDMA_BNDRY_512K; } slot->sdma_bbufsz =3D = SDHCI_SDMA_BNDRY_TO_BBUFSZ(slot->sdma_boundary); /* * Allocate the DMA tag for an SDMA bounce buffer. * Note that the SDHCI specification doesn't state any alignment * constraint for the SDMA system address. However, controllers * typically ignore the SDMA boundary bits in SDHCI_DMA_ADDRESS = when * forming the actual address of data, requiring the SDMA buffer = to * be aligned to the SDMA boundary. */ err =3D bus_dma_tag_create(bus_get_dma_tag(slot->bus), = slot->sdma_bbufsz, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, slot->sdma_bbufsz, 1, slot->sdma_bbufsz, BUS_DMA_ALLOCNOW, NULL, NULL, &slot->dmatag); That gives the alignment 524288 and lowaddr 0xffffffff on the RPi5 used via the EDK2 draft. That gives only 8192 aligment positions that fit in the 32 bit address space lowaddr spans. alloc_bounce_zone does: . . . /* Check to see if we already have a suitable zone */ STAILQ_FOREACH(bz, &bounce_zone_list, links) { if ((dmat_alignment(dmat) <=3D bz->alignment) && #ifdef dmat_domain =20 dmat_domain(dmat) =3D=3D bz->domain && #endif (dmat_lowaddr(dmat) >=3D bz->lowaddr)) { dmat->bounce_zone =3D bz; return (0); } =20 } . . . bz->alignment =3D MAX(dmat_alignment(dmat), PAGE_SIZE); . . . so later calls end up with: dmat_alignment(dmat) <=3D bz->alignment // actually < 524288 and: dmat_lowaddr(dmat) >=3D bz->lowaddr // actually > 0xffffffffu So everything ends up using: hw.busdma.zone0.alignment: 524288 hw.busdma.zone0.lowaddr: 0xffffffff and no other busdma zone is created for the RPi5 EDK2 context. One could imaging a smaller lowaddr being in the first alloc_bounce_zone call --and/or a larger alignment. The code is sensitive to the ordering that the value pairs happen to occur in and just a reversed order could give very different results, for example. I would expect that avoiding everything sharing a small lowaddr value or huge alignment value (or a combination of both) would be appropriate. In other words, I'm suggesting that alloc_bounce_zone probably should be adjusted. I'll warn that there is another oddity that many calls to alloc_bounce_zone end up with dmat_alignment(dmat) being < PAGE_SIZE, tiny even. But the bz->alignment was forced to a PAGE_SIZE as a minimum value in the first call. The comparison is not based on a common value-standard for the 2 sides. =3D=3D=3D Mark Millard marklmi at yahoo.com From nobody Mon Jan 22 11:46:21 2024 X-Original-To: freebsd-current@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 4TJT2r6rpfz57kXn; Mon, 22 Jan 2024 11:46:44 +0000 (UTC) (envelope-from void@f-m.fm) Received: from wout1-smtp.messagingengine.com (wout1-smtp.messagingengine.com [64.147.123.24]) (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 4TJT2r07VCz4kdM; Mon, 22 Jan 2024 11:46:44 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=f-m.fm header.s=fm3 header.b=uPg0o26E; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=tq1IMm4a; dmarc=pass (policy=none) header.from=f-m.fm; spf=pass (mx1.freebsd.org: domain of void@f-m.fm designates 64.147.123.24 as permitted sender) smtp.mailfrom=void@f-m.fm Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 203353200AA5; Mon, 22 Jan 2024 06:46:42 -0500 (EST) Received: from imap46 ([10.202.2.96]) by compute6.internal (MEProxy); Mon, 22 Jan 2024 06:46:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm3; t=1705924001; x=1706010401; bh=hLQ/vsk9VynSbt/HKhqsYihXMEMrEonP cy/WDxi4h50=; b=uPg0o26EMxCNDsREczG/kbp8D9vOBL8k3igO1wPe2S9W+Yoo FRGUoBGtM/t4XcJ9vaIL3oQLbOed0YhTnMuxpz283lViJJ+2+FeyJPi6IsYIANaY D7AXua/8wjvrsRX1c98bjj3mbTPGEBLqHYOK0G/99DCmweWwiQPMPNsWQhBCkI+Y g0UcICmCtzRygYodArwVrPmCkPA92PXDlJT5KUGzaMaX9Wi8B2KPSFyfLN6cyc3z mJOTIyg4Sz/6F6T8a0IkDkk54gU74XGB7eJHCxa4jfRqpZke6pglSTClJK7i+wxo F3fM40veS3YMagVtLgjuL0SKOP8a0ippNe1kbg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1705924001; x=1706010401; bh=hLQ/vsk9VynSbt/HKhqsYihXMEMrEonPcy/ WDxi4h50=; b=tq1IMm4ah192GkzTw4fkfk2LbU1B5VXkv/i6nmMXYvj+IS2P95Q MLCxmvmz+XXGauaIZU9MMXm721TrXHSLky3aUt8tDU6fAZ+M6jZo290OvLcrYV8X ahbiKV02SRcLANDbTq+i9F8k6VNCpH10D1guhfhRvKI0KWWvvVMbp4gRdCEmq9PF O66lmMFGiYBBgBaoDZwcHokRBiyM5En80UAd3KKsaNhfkoZcQ61IbXyMyQmYQjSn cX3YEFhxe3QUY8txekhhnn1RK1QinXCP8Y13o84FejGElmASFjTgHoGGbZgur1Di sv3eXIMEeLcjZNYndoBOZf4nnZdw1EcbTFA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdekiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfffhffvvefutgesthdtre dtreertdenucfhrhhomhepvhhoihguuceovhhoihgusehfqdhmrdhfmheqnecuggftrfgr thhtvghrnhepueefjeevudfgvdehgffgueduveekvefhfeetueeugfeuvdevfedtveekvd eltdegnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhep vhhoihgusehfqdhmrdhfmh X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id 604E52A2008B; Mon, 22 Jan 2024 06:46:41 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.9.0-alpha0-1374-gc37f3abe3d-fm-20240102.001-gc37f3abe List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Message-Id: <264b801d-8fb6-46c1-a8f2-c9f2070e4ca0@app.fastmail.com> Date: Mon, 22 Jan 2024 11:46:21 +0000 From: void To: freebsd-current@freebsd.org Cc: freebsd-virtualization@freebsd.org Subject: vmm_load crashes to debugger early Content-Type: text/plain X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.09 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[f-m.fm,none]; R_DKIM_ALLOW(-0.20)[f-m.fm:s=fm3,messagingengine.com:s=fm3]; R_SPF_ALLOW(-0.20)[+ip4:64.147.123.24]; RCVD_IN_DNSWL_LOW(-0.10)[64.147.123.24:from]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:29838, ipnet:64.147.123.0/24, country:US]; FREEMAIL_ENVFROM(0.00)[f-m.fm]; DWL_DNSWL_NONE(0.00)[messagingengine.com:dkim]; FREEMAIL_FROM(0.00)[f-m.fm]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org,freebsd-virtualization@freebsd.org]; RCVD_COUNT_THREE(0.00)[3]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; TO_DN_NONE(0.00)[]; RCVD_TLS_LAST(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[f-m.fm:+,messagingengine.com:+] X-Rspamd-Queue-Id: 4TJT2r07VCz4kdM Hello, On a very recent -current, vmm_load="YES" in /boot/loader.conf crashes the system to debugger early on in the boot sequence. I can't even reach single user mode How can I prevent this one element of /boot/loader.conf from loading? thanks in advance for any advice -- From nobody Mon Jan 22 12:48:10 2024 X-Original-To: freebsd-current@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 4TJVPv4bptz57r34; Mon, 22 Jan 2024 12:48:19 +0000 (UTC) (envelope-from SRS0=QJpW=JA=klop.ws=ronald-lists@realworks.nl) Received: from smtp-relay-int.realworks.nl (smtp-relay-int.realworks.nl [194.109.157.24]) (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 4TJVPv2NwFz4vbr; Mon, 22 Jan 2024 12:48:19 +0000 (UTC) (envelope-from SRS0=QJpW=JA=klop.ws=ronald-lists@realworks.nl) Authentication-Results: mx1.freebsd.org; none Date: Mon, 22 Jan 2024 13:48:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=klop.ws; s=rw2; t=1705927691; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=8NokvAe5NG4FQTkFM2eXxEEh4oezERKwcgVWfjZvogw=; b=pBcLtpyIZKy48u77Yn6R54SVZ2XYMpaoF/+EjrJK9qjwOVpdZlsNi45seQgeFVVrCbxpPq v+xX40AJpZaZdgD0MGdiFJvlBCC2uDijUdULdFEQwL6SUjF9oJi25Fv3ZHDjrire0gsTmt PVq8mEZrHfrQ9FwXqd2g6khLGIehU2AGhtODmThMIhNPScuaJELNVTabAPNUA6JBPXfR7Z zq6DnEI5jH0s+FWhfINw3SSIIt7edXAkf4UHb0gN4gsH/gWQdwabWDgwL2ujZ43dYenh7p FhUO1ukIKgQpOKFx8DGkHN9ZHbMdvIRKQZ+ggwomjmp9PW4QQT22TIGH0OMMXA== From: Ronald Klop To: void Cc: freebsd-virtualization@freebsd.org, freebsd-current@freebsd.org Message-ID: <992106378.5645.1705927690900@localhost> In-Reply-To: <264b801d-8fb6-46c1-a8f2-c9f2070e4ca0@app.fastmail.com> References: <264b801d-8fb6-46c1-a8f2-c9f2070e4ca0@app.fastmail.com> Subject: Re: vmm_load crashes to debugger early List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_5644_1612566089.1705927690894" X-Mailer: Realworks (686.7) Importance: Normal X-Priority: 3 (Normal) X-Rspamd-Queue-Id: 4TJVPv2NwFz4vbr X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:3265, ipnet:194.109.0.0/16, country:NL] ------=_Part_5644_1612566089.1705927690894 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, Can you mount /boot on another system? Can you press a key to interrupt booting the kernel? I'm not sure what the name of this stage of the booting is called and if it depends on which bootloader you are using. In my VM I get this on the text "Beastie"-menu with the text: > "Autoboot in 9 seconds. [Space] to pause". > "3. Escape to loader prompt" <3> > Type '?' for a list of commands, 'help' for more detailed help. > OK set vmm_load=NO > OK unload vmm > OK boot You can use the command "lsmod" and "show" to see what modules are already loaded and what variables are used while booting. I hope this helps. Regards, Ronald. Van: void Datum: maandag, 22 januari 2024 12:46 Aan: freebsd-current@freebsd.org CC: freebsd-virtualization@freebsd.org Onderwerp: vmm_load crashes to debugger early > > Hello, > > On a very recent -current, vmm_load="YES" in /boot/loader.conf crashes > the system to debugger early on in the boot sequence. I can't even reach > single user mode > > How can I prevent this one element of /boot/loader.conf from loading? > > thanks in advance for any advice > -- > > > > ------=_Part_5644_1612566089.1705927690894 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit Hi,

Can you mount /boot on another system?

Can you press a key to interrupt booting the kernel? I'm not sure what the name of this stage of the booting is called and if it depends on which bootloader you are using.

In my VM I get this on the text "Beastie"-menu with the text:

> "Autoboot in 9 seconds. [Space] to pause".
<press space>
> "3. Escape to loader prompt"
<3>
> Type '?' for a list of commands, 'help' for more detailed help.
> OK
set vmm_load=NO
> OK
unload vmm
> OK
boot


You can use the command "lsmod" and "show" to see what modules are already loaded and what variables are used while booting.

I hope this helps.

Regards,
Ronald.

 

Van: void <void@f-m.fm>
Datum: maandag, 22 januari 2024 12:46
Aan: freebsd-current@freebsd.org
CC: freebsd-virtualization@freebsd.org
Onderwerp: vmm_load crashes to debugger early

Hello,

On a very recent -current, vmm_load="YES" in /boot/loader.conf crashes
the system to debugger early on in the boot sequence. I can't even reach
single user mode

How can I prevent this one element of /boot/loader.conf from loading?

thanks in advance for any advice
-- 
 


  ------=_Part_5644_1612566089.1705927690894-- From nobody Mon Jan 22 14:48:00 2024 X-Original-To: freebsd-current@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 4TJY4T5sn1z583JC for ; Mon, 22 Jan 2024 14:48:25 +0000 (UTC) (envelope-from void@f-m.fm) Received: from wout5-smtp.messagingengine.com (wout5-smtp.messagingengine.com [64.147.123.21]) (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 4TJY4S5tmRz4GRZ for ; Mon, 22 Jan 2024 14:48:24 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=f-m.fm header.s=fm3 header.b=wWY9vRlq; dkim=pass header.d=messagingengine.com header.s=fm3 header.b="I2/6ap3r"; dmarc=pass (policy=none) header.from=f-m.fm; spf=pass (mx1.freebsd.org: domain of void@f-m.fm designates 64.147.123.21 as permitted sender) smtp.mailfrom=void@f-m.fm Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id CA91D3200A8F for ; Mon, 22 Jan 2024 09:48:22 -0500 (EST) Received: from imap46 ([10.202.2.96]) by compute6.internal (MEProxy); Mon, 22 Jan 2024 09:48:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1705934902; x=1706021302; bh=vpIefVfijy lKfZd7byrQkTCE/VvkKQmIYtjyHcQzE9o=; b=wWY9vRlqTHtuHd1VnyFpjEv1YF qdvQxzP2RDEHErGOAFqSe7Hr4neV6E7otkFFfVRfJX9DO9vs3vBk0OiN8KMRIrgH +Mz1n+IBKM3OTaOqNQD+LqozlBeNwlM1p+1i4MbMXySc+EN8oUyxdFxhhdInbBYR zHksz5ZkbCcszMwoEpq5cvIbtMfbbbdWF8pV+SjsHbfmv4p4PgwKYpEznKGZxeTn Cn3Lu4illDe9AlhgCfQW/gj8oxPx8AVcXk7GWR9kxHPa03u5b5dBAfnu82FeHmsb GoGgVBuUSiQoKBjrzn1xxNJ8atCoWsBB7Dbf43Bd+PQ75uac55aH/NRjryhQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1705934902; x=1706021302; bh=vpIefVfijylKfZd7byrQkTCE/Vvk KQmIYtjyHcQzE9o=; b=I2/6ap3rg2prMkuiJeineBirzzd7pfUih5UhU3LBD8kE T5EOxqY+oCo9g6+sYvbZqgVauaFv8300eHZvVRpOgjTZeR/NNlYPb/A+22faTVBR pGvg7t+4/r/RBulfQX0SNyk+QtbeAz1T3PMZ7900+dMhFFpApOzCzqarSpTNYFXC 6MOFy418Ix00nrrj+EQ5sRguxsZpQcEnVN6cYQcjZvPuJPPAdhR/z57s3UNR9K3g RpJsXMZqP4kK2pOrvIa8u0FhHGVrLA9bOcMv9yFEImpLBUIdcBgksg/GMeKKAozi Kg5899RyFxqx1nI96wqxuumstXUSxHXaqp7yjN/SIw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdekiedgieejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfgjfhffhffvufgtsehttd ertderredtnecuhfhrohhmpehvohhiugcuoehvohhiugesfhdqmhdrfhhmqeenucggtffr rghtthgvrhhnpeehhfeutdegkefhjefhhfdvgeektddujeegvdeludeljeehudelvddvvd egieegieenucffohhmrghinhepuhhsvghrrdhfmhenucevlhhushhtvghrufhiiigvpedt necurfgrrhgrmhepmhgrihhlfhhrohhmpehvohhiugesfhdqmhdrfhhm X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id 052892A20090; Mon, 22 Jan 2024 09:48:22 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-119-ga8b98d1bd8-fm-20240108.001-ga8b98d1b List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Message-Id: In-Reply-To: <992106378.5645.1705927690900@localhost> References: <264b801d-8fb6-46c1-a8f2-c9f2070e4ca0@app.fastmail.com> <992106378.5645.1705927690900@localhost> Date: Mon, 22 Jan 2024 14:48:00 +0000 From: void To: freebsd-current Subject: Re: vmm_load crashes to debugger early Content-Type: text/plain X-Spamd-Bar: ----- X-Spamd-Result: default: False [-5.09 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; DWL_DNSWL_LOW(-1.00)[messagingengine.com:dkim]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[f-m.fm,none]; R_SPF_ALLOW(-0.20)[+ip4:64.147.123.21]; R_DKIM_ALLOW(-0.20)[f-m.fm:s=fm3,messagingengine.com:s=fm3]; MIME_GOOD(-0.10)[text/plain]; RCVD_IN_DNSWL_LOW(-0.10)[64.147.123.21:from]; XM_UA_NO_VERSION(0.01)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[f-m.fm]; ASN(0.00)[asn:29838, ipnet:64.147.123.0/24, country:US]; FREEMAIL_FROM(0.00)[f-m.fm]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; TO_DN_ALL(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_TLS_LAST(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; DKIM_TRACE(0.00)[f-m.fm:+,messagingengine.com:+] X-Rspamd-Queue-Id: 4TJY4S5tmRz4GRZ Hi, On Mon, 22 Jan 2024, at 12:48, Ronald Klop wrote: > Hi, > > Can you mount /boot on another system? not sure how as the system cannot find the pool called 'zroot'. There are two zpools on the server - zroot for HD and 'ssd' for the ssds. I can boot to -current usb stick and zpool import -f ssd. The problem arose when I found I couldn't start grub2-bhyve-booting VMs. This is after a powercut during a storm. The storm caused the UPS to fail. I think there may have been a surge because mains power went off and on rapidly. It tripped a 30A ring main which very rarely happens. So trying to boot the server - it came back up, but I found that grub2-bhyve caused a drop to db. rebooted and tried to kldload vmm with same result. Rebooted, built new world & kernel, another reboot, same vmm result. I thought "maybe the issue is with kldload" and other stuff in /boot/loader was working so put vmm_load="YES" in the loader and now it won't boot at all :( My own idiot fault... > Can you press a key to interrupt booting the kernel? I'm not sure what > the name of this stage of the booting is called and if it depends on > which bootloader you are using. It can get to the beastie menu. >> OK > set vmm_load=NO >> OK > unload vmm >> OK > boot This still causes the drop to debugger. The machine is a gen8 hp proliant. I can get to a virtual serial console via ssh into iLo (so get a scrollable term) but that returns "monitor in graphics mode or unsupported text mode" when it drops to db>. I got a screengrab on the html5 remote virtual console but there is no way to scroll up and if the console is expanded or maximised the font size scales with it. Screengrab is here: http://void.f-m.fm.user.fm/Screenshot_20240122_135539.png Plenty more of probably very useful information has scrolled off the top :( > You can use the command "lsmod" and "show" to see what modules are > already loaded and what variables are used while booting. "lsmod" showed empty results, "show" displayed the following useful information: http://void.f-m.fm.user.fm/Screenshot_20240122_142642.png I think I now have a plan, of sorts... 1. boot to memstick and zfs import the ssd zpool 2. zfs snapshot the volumes there to another machine 3. format the machine from scratch and restore the ssd zpool Thank you for your help -- From nobody Tue Jan 23 15:07:32 2024 X-Original-To: freebsd-current@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 4TK9Sy3lnzz570b0; Tue, 23 Jan 2024 15:08:18 +0000 (UTC) (envelope-from marietto2008@gmail.com) Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TK9Sx1bmHz4YGr; Tue, 23 Jan 2024 15:08:17 +0000 (UTC) (envelope-from marietto2008@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20230601 header.b=O1O8iL4u; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of marietto2008@gmail.com designates 2a00:1450:4864:20::636 as permitted sender) smtp.mailfrom=marietto2008@gmail.com Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-a308db01df6so190175866b.0; Tue, 23 Jan 2024 07:08:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706022490; x=1706627290; darn=freebsd.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=S8TN3SeHnLMy/MMUFqtW8463ZPdM3XsKdkjS+1GZ+3Q=; b=O1O8iL4uZljmPmPBQ05qeJ3Q56hHMtegFkxJmJloDdc56VQlVEo+UoFNw4RC4aBBPZ gWzSFfSA9Yqviqoj5kiNzbJXhqOLm3+XuqbWWHyQibf6kT/yVMl9VJkDVOwbhykVSUFV f/A1oso6V/j5Ab8XOzLHjj7t/wwCgP2Ottklw87cNOBGO0biEBko+/4YX1chcZTTfyhB pIiXa1Q1oVsx6t/PYkSY0npmBe26DQaU4Wc5dQfXuyze1894+O5ytXmM5F1El0DyaiDS aB8Aj2D6sgZ4txmh0BI3hYqh5cvYTBH4Qovkrm1ybxWfGq4nodpKzY87yZ+Qi/9Osc5u fLbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706022490; x=1706627290; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=S8TN3SeHnLMy/MMUFqtW8463ZPdM3XsKdkjS+1GZ+3Q=; b=h8WddW/Afk+BgkiEthZGQfj6J35qBitsnqDq2Kp5r/Nx0uwL4WN/LJLgNqOoPj6gc3 FJB9fcCeCWzsdDAh81W9PpDinDR9d2GnHQiYQLlh1QbvztqTYdXYMW+LtPgpUNNBqyUz Y2svbjsMIHw6DKjEhX/BV3UBaffUauaVNuKzkEunLzwth2VSc8TPteJXHN/fpG0gNw/p +B0PI3m+v0VEJ1gP/FRq713coCa5rEzxRsh/sGNXNuTA+jj/OMwF1H2OmjLrus+Z4qpc yXxLydxAX1SOxswB4emRAUfAcaS2YY1kYHIXY48k6CHotHsYVRy6CeXbwEM/CKUMw/nS mcVQ== X-Gm-Message-State: AOJu0YzT7BXZBR3NEVq+GVhxGy0HqhXSJ2z8x/qv8NzXVevhVtLz3lzi NqsU2hGneWjLFCmkTM8xx3PweFQJMGXxNZgtUoRXheGeiEn5B7oMdscqwLv2P+D+Wdbgj7q4+sy Gx7/XYaozjfIcRSaXtMTIKGTGxN72nlPNryxshac6 X-Google-Smtp-Source: AGHT+IHEJWGI70AH8B9JAeIiFzxTmZU7qJYXdsl27rrS+o5KusRpA8b50JmtU9CFlplBnIL3LkBd0uPB2/l0xl9r4A8= X-Received: by 2002:a17:906:3d5:b0:a30:b610:c8e4 with SMTP id c21-20020a17090603d500b00a30b610c8e4mr389104eja.310.1706022489623; Tue, 23 Jan 2024 07:08:09 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Mario Marietto Date: Tue, 23 Jan 2024 16:07:32 +0100 Message-ID: Subject: Re: How to upgrade an EOL FreeBSD release or how to make it working again To: freebsd-arm , freebsd-hackers , FreeBSD Mailing List , freebsd-xen@freebsd.org, FreeBSD Current , Warner Losh , =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Content-Type: multipart/related; boundary="0000000000007987aa060f9e509a" X-Spamd-Bar: --- X-Spamd-Result: default: False [-4.00 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-0.999]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20230601]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; MIME_GOOD(-0.10)[multipart/related,multipart/alternative,text/plain]; MISSING_XM_UA(0.00)[]; ARC_NA(0.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_COUNT_ONE(0.00)[1]; FREEMAIL_ENVFROM(0.00)[gmail.com]; FREEMAIL_FROM(0.00)[gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~,4:~]; TO_DN_SOME(0.00)[]; RCPT_COUNT_SEVEN(0.00)[7]; MLMMJ_DEST(0.00)[freebsd-arm@freebsd.org,freebsd-hackers@freebsd.org,freebsd-questions@freebsd.org,freebsd-xen@freebsd.org,freebsd-current@freebsd.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::636:from]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_TLS_LAST(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; MID_RHS_MATCH_FROMTLD(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+] X-Rspamd-Queue-Id: 4TK9Sx1bmHz4YGr --0000000000007987aa060f9e509a Content-Type: multipart/alternative; boundary="0000000000007987a8060f9e5099" --0000000000007987a8060f9e5099 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello. I tried to compile the kernel for armv7 taking the source code of FreeBSD 12.04 and using FreeBSD 11.4 as os to compile it and I've got this error : /mnt/ada0p2/usr/src/11.04-os/12.04-world-kernel-armv7 # make TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-SNOW buildkernel /tmp/hack-d033d3.o: file not recognized: file format not recognized cc : error : linker command failed with exit 1 (use -v to see invocation) I feel that it is not a huge error and I can fix it,but I don't know how. To be able to compile it on FreeBSD 12.04 would be a little success. On Mon, Jan 15, 2024 at 4:59=E2=80=AFPM Mario Marietto wrote: > Hello to everyone. > > I'm trying to install FreeBSD 14 natively on my ARM Chromebook model > xe303c12 ; I've found only one tutorial that teaches how to do that,that'= s > it : > > https://wiki.freebsd.org/arm/Chromebook > > The problem is that it ends with the installation of FreeBSD 11,that's > very EOL. > I can't use it as is. I need to upgrade it to 14 (but I'm on arm 32 > bit,that's TIER-2,so I can't upgrade it automatically using the > freebsd-update script. It is also true that I can't install 14 directly o= n > that machine,as you can read below : > > > [image: unnamed.png] > > I've looked all around and I found the tool pkgbase,that I'm talking abou= t > on the FreeBSD forum,to understand if it allows the 11 to be usable or > upgradable. It does not seem to be the proper tool to achieve my goal. Do > you have any suggestions that can help me ? Thanks. > > -- > Mario. > --=20 Mario. --0000000000007987a8060f9e5099 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello.

I tried to compile th= e kernel for armv7 taking the source code of FreeBSD 12.04 and using FreeBS= D 11.4 as os to compile it and I've got this error :
/mnt/ada0p2/usr/src/11.04-os/12.04-world-kernel-armv7 # make TA= RGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-SNOW buildkernel

=
/tmp/hack-d033d3.o: file not recognized: file format not recogni= zed
cc : error : linker command failed with exit 1 (use -v to= see invocation)

I feel that it is not a huge erro= r and I can fix it,but I don't know how. To be able to compile it on Fr= eeBSD 12.04 would be a little success.

On Mon, Jan 15, 2024 at 4:5= 9=E2=80=AFPM Mario Marietto <m= arietto2008@gmail.com> wrote:
Hello to everyone.
I'm trying to install FreeBSD 14 natively on my ARM Chromeb= ook model xe303c12 ; I've found only one tutorial that teaches how to d= o that,that's it :


The problem is that it ends with the i= nstallation of FreeBSD 11,that's very EOL.
I can't use it= as is. I need to upgrade it to 14 (but I'm on arm 32 bit,that's TI= ER-2,so I can't upgrade it automatically using the freebsd-update scrip= t. It is also true that I can't install 14 directly on that machine,as = you can read below :


3D"unnamed.png"
=

I've looked all around and I found the tool pkgbase= ,that I'm talking about on the FreeBSD forum,to understand if it allows= the 11 to be usable or upgradable. It does not seem to be the proper tool = to achieve my goal. Do you have any suggestions that can help me ? Thanks.<= br>

--
Mario.


--
Mario.
--0000000000007987a8060f9e5099-- --0000000000007987aa060f9e509a Content-Type: image/png; name="unnamed.png" Content-Disposition: inline; filename="unnamed.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_lrf3zpy30 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 --0000000000007987aa060f9e509a-- From nobody Tue Jan 23 15:31:50 2024 X-Original-To: freebsd-current@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 4TKB0t65Q1z573ZS; Tue, 23 Jan 2024 15:32:30 +0000 (UTC) (envelope-from marietto2008@gmail.com) Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKB0s6dwbz4h4g; Tue, 23 Jan 2024 15:32:29 +0000 (UTC) (envelope-from marietto2008@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20230601 header.b=eIQk8B22; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of marietto2008@gmail.com designates 2a00:1450:4864:20::630 as permitted sender) smtp.mailfrom=marietto2008@gmail.com Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-a2e0be86878so1013130066b.1; Tue, 23 Jan 2024 07:32:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706023948; x=1706628748; darn=freebsd.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=q0dbsc6c+7sZ6SNUAy13qd4cz+d9xGvJuJqIN9XRR7M=; b=eIQk8B22SNpN7mjOUQQj68JlWXTzQuNN6E4DocG+u/shV73lQ1PoEqQ54VIJM+MGmR 6DbA9p3qv3N050U+QxJ0GrmBgbpna01joOPkxwC4fbzBtcO6+kpOpxd1amduapevRSi1 PIZ5AAvVKg3R78ReLWB02i/CIv2Tp17Apj/UEO+/zetKzreSivuT1YXoaCZkNYL/0j5Q /rEmjmcsBRtLXQuShMqoB/Ig6x0eXK/vYDR5XPT+DNxWZI8TUetnZ9+wNG8OOiQQg1TM als+xKlmHW17FlOWcqpt+6ex/uhEpEU6fo0AMrDkGk1YAjapgMP1xXAwaFG2vuiTr8df jSTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706023948; x=1706628748; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=q0dbsc6c+7sZ6SNUAy13qd4cz+d9xGvJuJqIN9XRR7M=; b=n+SMmYkjsSWjAWMseeFNkbXlDasr6K2fxxHOWJ/WPsAHLbn0uE/6GiIn9IXMJDouwO d7TGJQxoV2PBEqcifLFwqmv9Dx6DEH9TUGouyd6v4Q6KJSFeCH5viZ5kgNqn6v3THyB2 AQdYNvWsArEdUPUuXTnsZw6w458ZafRgslS67xjbqjPv1QkyihyACTnAyC/caSMFw5z3 jN3HZIF/4GZDdZK7h8xsi7iqBxs/VldPtKf3VGyD9fuXLXn4E6q1c91nHaSZP8cqAqfG xZ/52K3lG+j8jGHf6lyTcnjpmvXfPWov08dAcTn4Ll1TPDcK1AdLhUJezySxnS6+MCXh 09kg== X-Gm-Message-State: AOJu0YxPXasAEUASzOuzEbD6WaeGwv1M9q9B4bsLFCInffgLqrEdcIh+ TlgDkf3dSDoYXcNNvtp+QjJejETMY21m+YGCjN2z67BW05zvWbEHPk8X4k8zzyZbCT6jcD+T1wf P5q6+NKMwhACH8EEC9/6ZdvAhhFVhA3Y1HtkhVDSL9nQ= X-Google-Smtp-Source: AGHT+IFGaVlO8pC0CxiRe9BV68hgM0U6PIF7acGWl/z2ZYgbW1qC3GgPZ7vow8PssMivGDb/hkbQGEGuoo0WXQOK39s= X-Received: by 2002:a17:907:d506:b0:a30:e9a6:68f6 with SMTP id wb6-20020a170907d50600b00a30e9a668f6mr477115ejc.37.1706023947343; Tue, 23 Jan 2024 07:32:27 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Mario Marietto Date: Tue, 23 Jan 2024 16:31:50 +0100 Message-ID: Subject: Re: How to upgrade an EOL FreeBSD release or how to make it working again To: freebsd-arm , freebsd-hackers , FreeBSD Mailing List , freebsd-xen@freebsd.org, FreeBSD Current , Warner Losh , =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Content-Type: multipart/related; boundary="0000000000005cdd54060f9ea75d" X-Spamd-Bar: --- X-Spamd-Result: default: False [-4.00 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20230601]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36:c]; MIME_GOOD(-0.10)[multipart/related,multipart/alternative,text/plain]; MISSING_XM_UA(0.00)[]; ARC_NA(0.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_COUNT_ONE(0.00)[1]; FREEMAIL_ENVFROM(0.00)[gmail.com]; FREEMAIL_FROM(0.00)[gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~,4:~]; TO_DN_SOME(0.00)[]; RCPT_COUNT_SEVEN(0.00)[7]; MLMMJ_DEST(0.00)[freebsd-arm@freebsd.org,freebsd-hackers@freebsd.org,freebsd-questions@freebsd.org,freebsd-xen@freebsd.org,freebsd-current@freebsd.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::630:from]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_TLS_LAST(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; MID_RHS_MATCH_FROMTLD(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+] X-Rspamd-Queue-Id: 4TKB0s6dwbz4h4g --0000000000005cdd54060f9ea75d Content-Type: multipart/alternative; boundary="0000000000005cdd53060f9ea75c" --0000000000005cdd53060f9ea75c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Now I tried to compile the kernel for armv7 taking the source code of FreeBSD 13.0 and using FreeBSD 11.4 as os to compile it and I've got an error that's similar to the previous one : cc: error : linker command failed with exit code 1 (use -v to see invocation) /mnt/ada0p2/usr/src/11.04-os/13.0-world-kernel-armv7 # make TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-SNOW buildkernel /tmp/hack-a5888be-o: file not recognized: file format not recognized cc : error : linker command failed with exit 1 (use -v to see invocation) On Tue, Jan 23, 2024 at 4:07=E2=80=AFPM Mario Marietto wrote: > Hello. > > I tried to compile the kernel for armv7 taking the source code of FreeBSD > 12.04 and using FreeBSD 11.4 as os to compile it and I've got this error = : > > /mnt/ada0p2/usr/src/11.04-os/12.04-world-kernel-armv7 # make > TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-SNOW buildkernel > > /tmp/hack-d033d3.o: file not recognized: file format not recognized > cc : error : linker command failed with exit 1 (use -v to see invocation) > > I feel that it is not a huge error and I can fix it,but I don't know how. > To be able to compile it on FreeBSD 12.04 would be a little success. > > On Mon, Jan 15, 2024 at 4:59=E2=80=AFPM Mario Marietto > wrote: > >> Hello to everyone. >> >> I'm trying to install FreeBSD 14 natively on my ARM Chromebook model >> xe303c12 ; I've found only one tutorial that teaches how to do that,that= 's >> it : >> >> https://wiki.freebsd.org/arm/Chromebook >> >> The problem is that it ends with the installation of FreeBSD 11,that's >> very EOL. >> I can't use it as is. I need to upgrade it to 14 (but I'm on arm 32 >> bit,that's TIER-2,so I can't upgrade it automatically using the >> freebsd-update script. It is also true that I can't install 14 directly = on >> that machine,as you can read below : >> >> >> [image: unnamed.png] >> >> I've looked all around and I found the tool pkgbase,that I'm talking >> about on the FreeBSD forum,to understand if it allows the 11 to be usabl= e >> or upgradable. It does not seem to be the proper tool to achieve my goal= . >> Do you have any suggestions that can help me ? Thanks. >> >> -- >> Mario. >> > > > -- > Mario. > --=20 Mario. --0000000000005cdd53060f9ea75c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Now I tried to compile the kernel for armv7 taking th= e source code of=20 FreeBSD 13.0 and using FreeBSD 11.4 as os to compile it and I've got=20 an error that's similar to the previous one :

cc: error : linker command failed with exit c= ode 1 (use -v to see invocation)
/mnt/ada0p2/usr/src/11.04-os= /13.0-world-kernel-armv7 # make TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-S= NOW buildkernel

/tmp/hack-a5888be-o: file not = recognized: file format not recognized
cc : error : linker co= mmand failed with exit 1 (use -v to see invocation)

<= div class=3D"gmail_quote">
On Tue, Jan= 23, 2024 at 4:07=E2=80=AFPM Mario Marietto <marietto2008@gmail.com> wrote:
Hello.

I tried to compile the kernel for armv7 taking the source c= ode of FreeBSD 12.04 and using FreeBSD 11.4 as os to compile it and I'v= e got this error :

/mnt/ada0p2/usr/src/11.04-= os/12.04-world-kernel-armv7 # make TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOO= K-SNOW buildkernel

/tmp/hack-d033d3.o: file no= t recognized: file format not recognized
cc : error : linker = command failed with exit 1 (use -v to see invocation)

<= div>I feel that it is not a huge error and I can fix it,but I don't kno= w how. To be able to compile it on FreeBSD 12.04 would be a little success.=

On Mon, Jan 15, 2024 at 4:59=E2=80=AFPM Mario Marietto <marietto2008@gmail.co= m> wrote:
Hello to everyone.

I'm = trying to install FreeBSD 14 natively on my ARM Chromebook model xe303c12 ;= I've found only one tutorial that teaches how to do that,that's it= :


The problem is that it ends with the installation of FreeB= SD 11,that's very EOL.
I can't use it as is. I need to up= grade it to 14 (but I'm on arm 32 bit,that's TIER-2,so I can't = upgrade it automatically using the freebsd-update script. It is also true t= hat I can't install 14 directly on that machine,as you can read below :=


=3D"unnamed.png"

I've looked all around and I found the tool pkgbase,that I'm talki= ng about on the FreeBSD forum,to understand if it allows the 11 to be usabl= e or upgradable. It does not seem to be the proper tool to achieve my goal.= Do you have any suggestions that can help me ? Thanks.

<= span class=3D"gmail_signature_prefix">--
Mario.


--
Mario.


--
Mario.
--0000000000005cdd53060f9ea75c-- --0000000000005cdd54060f9ea75d Content-Type: image/png; name="unnamed.png" Content-Disposition: inline; filename="unnamed.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_lrf3zpy30 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 --0000000000005cdd54060f9ea75d-- From nobody Wed Jan 24 00:47:05 2024 X-Original-To: freebsd-current@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 4TKQKF3JWXz58W4N for ; Wed, 24 Jan 2024 00:47:29 +0000 (UTC) (envelope-from void@f-m.fm) Received: from wout5-smtp.messagingengine.com (wout5-smtp.messagingengine.com [64.147.123.21]) (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 4TKQKD5181z45kP for ; Wed, 24 Jan 2024 00:47:28 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=f-m.fm header.s=fm3 header.b=emLiFu5x; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=AUkRVkQM; dmarc=pass (policy=none) header.from=f-m.fm; spf=pass (mx1.freebsd.org: domain of void@f-m.fm designates 64.147.123.21 as permitted sender) smtp.mailfrom=void@f-m.fm Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 218313200AE9 for ; Tue, 23 Jan 2024 19:47:27 -0500 (EST) Received: from imap46 ([10.202.2.96]) by compute6.internal (MEProxy); Tue, 23 Jan 2024 19:47:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc :content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm3; t=1706057246; x=1706143646; bh=yL0H3Ani0sM5hTeGYpA9g8ctL4434Ps1 9G4O5VzQaCg=; b=emLiFu5xFJWlakC8Riqc0K00RDuVQaWby6j3ha4qpecNjppW s/Id6sllKuO94Rwn1OrtzIKRAq75L6VxreWf8wJJKDpLAb9APEZ147ZNHbayytOC F34GeuA+Dvpk1nT9CP46mTjoiGUdvemN6Qy7bbNe00wgwCtq1r6PBtFwgn5oR2bf RaN4l9H0iU8+9SnZ5a+FfQi7dWaS8B5iz9LDGeeLn/RkGrDWV1cH3oylUL2wk0FL fy3V/CQVpZ37eudRn0ereyZ5T7miFXdP36FGak+o/9g8bx5N1KDuiC2NJD8Isp2l B1MPZDAtX4e4H5zkPZA6T97zfuq7YK3luSEoQw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1706057246; x=1706143646; bh=yL0H3Ani0sM5hTeGYpA9g8ctL4434Ps19G4 O5VzQaCg=; b=AUkRVkQMUmTlPb9h/ZrnHZ5fHHiOI2FK8bAjYy25QlJbjRUrcof vMgaOLHsJuwBFfWjnRbV2Srat59uJDi8eyjtKdmpmbY57EGSnFcGkXQ5v53gtbWV 1TYfcVnQ2VVSYHP4g3J86w5pF8E12V54htAtF6BlMY2Y2G3zkbRoP3qtGYNrhQ2w i+9eC8polB3fNrLE5T+pFOBQU3ADRCZ0+mV0vy7TIh0b/GUuGYHhjMSwnriNmomQ bLmYeD2z5OdKBk5Kt84JnrOEpsqpb/I3tHgvr1Ugyg+xs+InOBSl6vFQWFL8zOra 8T1hpFUs6/hIvCg30NP/2PNGLgAt3pzqYCw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdekledgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfffhffvufgtsehttdertd erredtnecuhfhrohhmpehvohhiugcuoehvohhiugesfhdqmhdrfhhmqeenucggtffrrght thgvrhhnpeekieegvdekteefuedulefgheeutdfhtdevtdeuudehgfelveehffeliedufe fghfenucffohhmrghinhepuhhsvghrrdhfmhenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehvohhiugesfhdqmhdrfhhm X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id 6240E2A2008B; Tue, 23 Jan 2024 19:47:26 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-119-ga8b98d1bd8-fm-20240108.001-ga8b98d1b List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Message-Id: <8db9d82d-37a8-472a-adbf-4565748adac4@app.fastmail.com> Date: Wed, 24 Jan 2024 00:47:05 +0000 From: void To: freebsd-current@freebsd.org Subject: loading vmm.ko crashes main-n267684-e4b646ce1610 Content-Type: text/plain X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.09 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[f-m.fm,none]; R_DKIM_ALLOW(-0.20)[f-m.fm:s=fm3,messagingengine.com:s=fm3]; R_SPF_ALLOW(-0.20)[+ip4:64.147.123.21]; MIME_GOOD(-0.10)[text/plain]; RCVD_IN_DNSWL_LOW(-0.10)[64.147.123.21:from]; XM_UA_NO_VERSION(0.01)[]; RCPT_COUNT_ONE(0.00)[1]; ASN(0.00)[asn:29838, ipnet:64.147.123.0/24, country:US]; MIME_TRACE(0.00)[0:+]; DWL_DNSWL_NONE(0.00)[messagingengine.com:dkim]; FREEMAIL_FROM(0.00)[f-m.fm]; FREEMAIL_ENVFROM(0.00)[f-m.fm]; ARC_NA(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; RCVD_COUNT_THREE(0.00)[3]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_TLS_LAST(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[f-m.fm:+,messagingengine.com:+] X-Rspamd-Queue-Id: 4TKQKD5181z45kP Hello, Loading vmm either via vmm_load=YES in /boot/loader.conf or manually via kldload vmm crashes the system to db> prompt as shown in the link below: http://void.f-m.fm.user.fm/Screenshot_20240122_135539.png Thing is, access is via a html5 console with no up/down scrolling or buffer. Nothing can be entered into the db> prompt. There's plenty more information when it crashes, but the output scrolls off the top. The main-n267684 is running a modified GENERIC-NODEBUG kernel and has debugging turned off in /etc/src.conf (it has WITHOUT_ASSERT_DEBUG= and WITHOUT_DEBUG_FILES= and WITH_MALLOC_PRODUCTION=) Apart from turning these on again and rebuilding GENERIC, what other things need to be set to get a usable coredump when this happens? /var/crash has nothing in it. thanks in advance for any assistance -- From nobody Wed Jan 24 02:01:06 2024 X-Original-To: freebsd-current@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 4TKRyP40tYz578Hv for ; Wed, 24 Jan 2024 02:01:17 +0000 (UTC) (envelope-from brian@sonicboom.org) Received: from sheehan.sonicboom.org (sheehan.sonicboom.org [69.75.45.53]) (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 4TKRyN2V9Dz4Glb for ; Wed, 24 Jan 2024 02:01:16 +0000 (UTC) (envelope-from brian@sonicboom.org) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of brian@sonicboom.org designates 69.75.45.53 as permitted sender) smtp.mailfrom=brian@sonicboom.org Received: from [10.10.1.112] (069-075-045-051.biz.spectrum.com [69.75.45.51]) by sheehan.sonicboom.org (Postfix) with ESMTPSA id DE9103A0027B for ; Tue, 23 Jan 2024 18:01:08 -0800 (PST) Content-Type: multipart/alternative; boundary="------------adhZCHFTGoOz2wGYL8wtukUW" Message-ID: Date: Tue, 23 Jan 2024 18:01:06 -0800 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: How to upgrade an EOL FreeBSD release or how to make it working again To: freebsd-current@freebsd.org References: Content-Language: en-US From: Brian In-Reply-To: X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.94 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-0.75)[-0.752]; R_SPF_ALLOW(-0.20)[+ip4:69.75.45.53]; MIME_GOOD(-0.10)[multipart/alternative,text/plain,multipart/related]; ONCE_RECEIVED(0.10)[]; XM_UA_NO_VERSION(0.01)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; RCPT_COUNT_ONE(0.00)[1]; FREEFALL_USER(0.00)[brian]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~,4:~]; ASN(0.00)[asn:20001, ipnet:69.75.0.0/16, country:US]; R_DKIM_NA(0.00)[]; ARC_NA(0.00)[]; TO_DN_NONE(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DMARC_NA(0.00)[sonicboom.org]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; RCVD_TLS_ALL(0.00)[] X-Rspamd-Queue-Id: 4TKRyN2V9Dz4Glb This is a multi-part message in MIME format. --------------adhZCHFTGoOz2wGYL8wtukUW Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Once in the past I had a years out of date version. Before the GIT transition, I wound up catching up by just going to the latest stable version. IIRC I went from like 6-stable to 10-stable but one version at a time instead of making a big leap. Brian On 1/23/2024 7:31 AM, Mario Marietto wrote: > Now I tried to compile the kernel for armv7 taking the source code of > FreeBSD 13.0 and using FreeBSD 11.4 as os to compile it and I've got > an error that's similar to the previous one : > > cc: error : linker command failed with exit code 1 (use -v to see > invocation) > /mnt/ada0p2/usr/src/11.04-os/13.0-world-kernel-armv7 # make > TARGET_ARCH=armv7 KERNCONF=CHROMEBOOK-SNOW buildkernel > > /tmp/hack-a5888be-o: file not recognized: file format not recognized > cc : error : linker command failed with exit 1 (use -v to see invocation) > > On Tue, Jan 23, 2024 at 4:07 PM Mario Marietto > wrote: > > Hello. > > I tried to compile the kernel for armv7 taking the source code of > FreeBSD 12.04 and using FreeBSD 11.4 as os to compile it and I've > got this error : > > /mnt/ada0p2/usr/src/11.04-os/12.04-world-kernel-armv7 # make > TARGET_ARCH=armv7 KERNCONF=CHROMEBOOK-SNOW buildkernel > > /tmp/hack-d033d3.o: file not recognized: file format not recognized > cc : error : linker command failed with exit 1 (use -v to see > invocation) > > I feel that it is not a huge error and I can fix it,but I don't > know how. To be able to compile it on FreeBSD 12.04 would be a > little success. > > On Mon, Jan 15, 2024 at 4:59 PM Mario Marietto > wrote: > > Hello to everyone. > > I'm trying to install FreeBSD 14 natively on my ARM Chromebook > model xe303c12 ; I've found only one tutorial that teaches how > to do that,that's it : > > https://wiki.freebsd.org/arm/Chromebook > > The problem is that it ends with the installation of FreeBSD > 11,that's very EOL. > I can't use it as is. I need to upgrade it to 14 (but I'm on > arm 32 bit,that's TIER-2,so I can't upgrade it automatically > using the freebsd-update script. It is also true that I can't > install 14 directly on that machine,as you can read below : > > > unnamed.png > > I've looked all around and I found the tool pkgbase,that I'm > talking about on the FreeBSD forum,to understand if it allows > the 11 to be usable or upgradable. It does not seem to be the > proper tool to achieve my goal. Do you have any suggestions > that can help me ? Thanks. > > -- > Mario. > > > > -- > Mario. > > > > -- > Mario. --------------adhZCHFTGoOz2wGYL8wtukUW Content-Type: multipart/related; boundary="------------ZkhDIxTsaokJVbaODyMrDwTD" --------------ZkhDIxTsaokJVbaODyMrDwTD Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Once in the past I had a years out of date version. Before the GIT transition, I wound up catching up by just going to the latest stable version. IIRC I went from like 6-stable to 10-stable but one version at a time instead of making a big leap.

Brian

On 1/23/2024 7:31 AM, Mario Marietto wrote:
Now I tried to compile the kernel for armv7 taking the source code of FreeBSD 13.0 and using FreeBSD 11.4 as os to compile it and I've got an error that's similar to the previous one :

cc: error : linker command failed with exit code 1 (use -v to see invocation)
/mnt/ada0p2/usr/src/11.04-os/13.0-world-kernel-armv7 # make TARGET_ARCH=armv7 KERNCONF=CHROMEBOOK-SNOW buildkernel

/tmp/hack-a5888be-o: file not recognized: file format not recognized
cc : error : linker command failed with exit 1 (use -v to see invocation)

On Tue, Jan 23, 2024 at 4:07 PM Mario Marietto <marietto2008@gmail.com> wrote:
Hello.

I tried to compile the kernel for armv7 taking the source code of FreeBSD 12.04 and using FreeBSD 11.4 as os to compile it and I've got this error :

/mnt/ada0p2/usr/src/11.04-os/12.04-world-kernel-armv7 # make TARGET_ARCH=armv7 KERNCONF=CHROMEBOOK-SNOW buildkernel

/tmp/hack-d033d3.o: file not recognized: file format not recognized
cc : error : linker command failed with exit 1 (use -v to see invocation)

I feel that it is not a huge error and I can fix it,but I don't know how. To be able to compile it on FreeBSD 12.04 would be a little success.

On Mon, Jan 15, 2024 at 4:59 PM Mario Marietto <marietto2008@gmail.com> wrote:
Hello to everyone.

I'm trying to install FreeBSD 14 natively on my ARM Chromebook model xe303c12 ; I've found only one tutorial that teaches how to do that,that's it :


The problem is that it ends with the installation of FreeBSD 11,that's very EOL.
I can't use it as is. I need to upgrade it to 14 (but I'm on arm 32 bit,that's TIER-2,so I can't upgrade it automatically using the freebsd-update script. It is also true that I can't install 14 directly on that machine,as you can read below :


unnamed.png

I've looked all around and I found the tool pkgbase,that I'm talking about on the FreeBSD forum,to understand if it allows the 11 to be usable or upgradable. It does not seem to be the proper tool to achieve my goal. Do you have any suggestions that can help me ? Thanks.

--
Mario.


--
Mario.


--
Mario.
--------------ZkhDIxTsaokJVbaODyMrDwTD Content-Type: image/png; name="unnamed.png" Content-Disposition: inline; filename="unnamed.png" Content-Id: Content-Transfer-Encoding: base64 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 AElFTkSuQmCC --------------ZkhDIxTsaokJVbaODyMrDwTD-- --------------adhZCHFTGoOz2wGYL8wtukUW-- From nobody Wed Jan 24 15:44:57 2024 X-Original-To: freebsd-current@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 4TKpF54wgXz58Dvx for ; Wed, 24 Jan 2024 15:45:13 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKpF451jsz4pB6 for ; Wed, 24 Jan 2024 15:45:12 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=freebsd.org (policy=none); spf=pass (mx1.freebsd.org: domain of carpeddiem@gmail.com designates 209.85.208.182 as permitted sender) smtp.mailfrom=carpeddiem@gmail.com Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-2cc9fa5e8e1so60587091fa.3 for ; Wed, 24 Jan 2024 07:45:12 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706111109; x=1706715909; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=7M80f0TW9XbVlBVyLCsRdYlAU9FHIcckfevyXbXpI64=; b=nB4o62WRGDoX8SWFdK0mtxTFQew0OJlfJ3kJ2zWzR5H3wNYKfdmMGJ1L2EJo2uOJIT vTYELpHsLmZNdc3i/WC8iOm8AEPmIc4MhcLwUy5eMHyK5z3Lj5kGrMWV7SG3Cp4bJkZd m1F5WwHh0qKz/65ScwvUCkspWuCy/w/pVLP7scOqcz2tQf70eTdPRk8J/nyBWxb8hGr7 +6tbnhLNIEQMGIkr0Rpc8trDNY2BUGWm3QN20Hg959JFRhxQ+A3lqLFbh/An2HIi6+tE xbaIIs405dY8/cPBL+G5WWkhXdQfKd3j7gVEPx3/wM8pYAEhCGaoVWhe0X/OmApUX6fF ioyQ== X-Gm-Message-State: AOJu0YxU4KIz94QuVpOK1Iyu3PNhJFQWiKfRW6dl34dvN6gyo47H/4/5 6E5RjwsY3B0wSsC/jF+gMYzviq2DNqdMYCVSAH2JfPUrmuVAKY8jzOcgQ7ukh9GQt9YzmiU8hKd BkgjEcbscjgzcbBlzQBaiEyCFzsH6BExSmPA= X-Google-Smtp-Source: AGHT+IEwuyfcRCBvUvThygOh0xrbh3M9SWTp1eDGshi+bYaeSC8PUgqsr5fvrRcMc9Ui+aYxRn05ffgSTzyyFZ6ioyg= X-Received: by 2002:a2e:c42:0:b0:2cf:2ba3:e3d1 with SMTP id o2-20020a2e0c42000000b002cf2ba3e3d1mr394213ljd.38.1706111109232; Wed, 24 Jan 2024 07:45:09 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 From: Ed Maste Date: Wed, 24 Jan 2024 10:44:57 -0500 Message-ID: Subject: Removing fdisk and bsdlabel (legacy partition tools) To: FreeBSD Current Content-Type: text/plain; charset="UTF-8" X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.90 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; FORGED_SENDER(0.30)[emaste@freebsd.org,carpeddiem@gmail.com]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17:c]; MIME_GOOD(-0.10)[text/plain]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : SPF not aligned (relaxed), No valid DKIM,none]; TO_DN_ALL(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; MISSING_XM_UA(0.00)[]; FREEFALL_USER(0.00)[carpeddiem]; FREEMAIL_ENVFROM(0.00)[gmail.com]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; FROM_NEQ_ENVFROM(0.00)[emaste@freebsd.org,carpeddiem@gmail.com]; RCVD_COUNT_ONE(0.00)[1]; R_DKIM_NA(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.208.182:from]; TO_DOM_EQ_FROM_DOM(0.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; RCVD_IN_DNSWL_NONE(0.00)[209.85.208.182:from] X-Rspamd-Queue-Id: 4TKpF451jsz4pB6 MBR (PC BIOS) partition tables were historically maintained with fdisk(8), but gpart(8) has long been the preferred method for working with partition tables of all types. fdisk has been declared as obsolete in the man page since 2015. Similarly BSD disklabels were historically maintained with bsdlabel. It does not yet have a deprecation notice - I have proposed a man page addition in https://reviews.freebsd.org/D43563. I would like to disconnect these from the build, and subsequently remove them. This is prompted by a recent bsdlabel bug report which uncovered a longstanding buffer overflow in that tool. Effort is much better focused on contemporary, maintained tools rather than investigating issues in deprecated ones. Removing these tools would happen in FreeBSD 15 only (no change in 14 or 13). Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 Note that this effort is limited to these maintenance tools only - there is no change to kernel or gpart support for MBR or BSD disklablel partitioning. That said, MBR partitioning and BSD disklabels are best considered legacy formats and should be avoided for new installations, if possible. If anyone is using fdisk and/or bsdlabel rather than gpart I would appreciate knowing what is preventing you from using the contemporary tools. From nobody Wed Jan 24 17:30:17 2024 X-Original-To: freebsd-current@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 4TKrZZ4QKZz58PyT for ; Wed, 24 Jan 2024 17:30:30 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKrZY5JNFz51Pc for ; Wed, 24 Jan 2024 17:30:29 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-55ad2a47b7aso5171611a12.3 for ; Wed, 24 Jan 2024 09:30:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706117428; x=1706722228; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=KY8Wls/2QkA/pAvEneJGY8AAIWQB7UYRxFdArZBzJVo=; b=d1FHorfJwK/g54bZDuITVo+n+6+/69J5hau2kc/QJgadazY6XreATjHT2U7v4kTcYi 1UM2p3+99me2OZCDFedwJ1FWO1PFlO7e3u6w3CwyxXOWTZlJtBIKoQIus+HizQZOtZ6u JIKF9EQAsm2raE/CA8iAWShfz+e551bnbNL7YQD7aEdgHneUPcIPOPBzZAFirjBOtOz6 /u6WB9+TeqkhhnnQaYb8O0pnrWZJ1PliAaiJEDZSuBnb0MTu0k74uTw8XmDrxl2e1WTU wvSumQGGT4l5Myut2EUOHyffi1EcYYAHKMqQCyomUmRb2iWbqRF6xp9ZzJHx88gcGFwH wJ5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706117428; x=1706722228; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KY8Wls/2QkA/pAvEneJGY8AAIWQB7UYRxFdArZBzJVo=; b=aSSY17C9OI3PIZ+/f9YLLo6pGAWKh4iqpBdUUldSuKG+u+kVOu9nDgRWW6tfTqZnJT xqWU4E41nqbwoFqk+QoWijgGfwglxgr7iPdOQfy+EsIdFIn/iRLcvoM/OBN0mD+Pl1Gh sYJV+tEsPnEC9cqpRy2XrZMZmFfm+Be+SRWekDxYIFlUuuuu1QZe17JNB9h5qClHQul7 YietPdpOob6wQoO2eWZuem9jHmrIBeY3Iol2fbHZfgRckSLiTT3SCYqJlv7RHmuE2e4n iRCI/Q/E+1NUYyNeUTj2Eajwx7m+qC38J2fiKc2XEpp9XCsg/5jy2b4VBGK1TEyhJsIv GGUg== X-Gm-Message-State: AOJu0YwkS/cIpZizicfhfQQeA9mLkUiiSfX9iQFAzibX0Tl0NVUAq4ct TmRRK2vvpQM1oBhL0JogwamsnenxiX8jvqRL8ymGFvarqTp465RVSvB0NziYOridWJ9EQmVmm8u xRMj6G/Aamqw8MvrRO+2Ey8WKRL/SZ4FcxJAbcxgdPxQsBHxK+fc= X-Google-Smtp-Source: AGHT+IFqdyOXAP7aZh8IO/sLJVP9z3Ektp+EnU5Q9JIZxmjE2KBA38JAv1MwFrxrqz6XcMGdM3r9ilZuiGxEeMEAhQA= X-Received: by 2002:a05:6402:518b:b0:55c:7b3b:5990 with SMTP id q11-20020a056402518b00b0055c7b3b5990mr1669854edd.7.1706117428432; Wed, 24 Jan 2024 09:30:28 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Warner Losh Date: Wed, 24 Jan 2024 10:30:17 -0700 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Ed Maste Cc: FreeBSD Current Content-Type: multipart/alternative; boundary="000000000000446006060fb46b31" X-Rspamd-Queue-Id: 4TKrZY5JNFz51Pc X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000446006060fb46b31 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 24, 2024 at 8:45=E2=80=AFAM Ed Maste wrote= : > MBR (PC BIOS) partition tables were historically maintained with > fdisk(8), but gpart(8) has long been the preferred method for working > with partition tables of all types. fdisk has been declared as > obsolete in the man page since 2015. Similarly BSD disklabels were > historically maintained with bsdlabel. It does not yet have a > deprecation notice - I have proposed a man page addition in > https://reviews.freebsd.org/D43563. > > I would like to disconnect these from the build, and subsequently > remove them. This is prompted by a recent bsdlabel bug report which > uncovered a longstanding buffer overflow in that tool. Effort is much > better focused on contemporary, maintained tools rather than > investigating issues in deprecated ones. Removing these tools would > happen in FreeBSD 15 only (no change in 14 or 13). > > Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 > > Note that this effort is limited to these maintenance tools only - > there is no change to kernel or gpart support for MBR or BSD > disklablel partitioning. That said, MBR partitioning and BSD > disklabels are best considered legacy formats and should be avoided > for new installations, if possible. > > If anyone is using fdisk and/or bsdlabel rather than gpart I would > appreciate knowing what is preventing you from using the contemporary > tools. > nanobsd's legacy.sh still is using disklabel in two spots. But one is to just do gpart create -s bsd and the other is to display it. Easy to fix, but even easier to delete legacy.sh entirely. It's not really needed any more and was a product of CHS addressing... Now that we use LBA, it's better to use the new embedded ones. Even at $WORK where we kinda use legacy, we replace the partitioning stuff with our own custom thing... Those are the only users in the tree, but not for long :) fdisk was good, but somewhere around the CHS -> LBA transition things got weird with it, and for really big disks there were reports of issues that I could never encounter when I set out to fix them... Most likely due to a mismatch in the CHS data and the LBA data being recorded in the MBR. The in-kernel gpart copes so much better. I wouldn't object to making these ports, but both these programs use 'sekret' bits from the kernel that might not remain exposed as we clean things up. Though the IOCTLs they do (or used to do) may no longer be relevant. It's been so long that I've forgotten.... Warner --000000000000446006060fb46b31 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Wed, Jan 24, 2024 at 8:45=E2=80=AFAM E= d Maste <emaste@freebsd.org>= ; wrote:
MBR (PC BIOS) partition tables were historically mainta= ined with
fdisk(8), but gpart(8) has long been the preferred method for working
with partition tables of all types. fdisk has been declared as
obsolete in the man page since 2015. Similarly BSD disklabels were
historically maintained with bsdlabel. It does not yet have a
deprecation notice - I have proposed a man page addition in
https://reviews.freebsd.org/D43563.

I would like to disconnect these from the build, and subsequently
remove them. This is prompted by a recent bsdlabel bug report which
uncovered a longstanding buffer overflow in that tool. Effort is much
better focused on contemporary, maintained tools rather than
investigating issues in deprecated ones. Removing these tools would
happen in FreeBSD 15 only (no change in 14 or 13).

Code review to disconnect fdisk: https://reviews.freebsd.org/D4357= 5

Note that this effort is limited to these maintenance tools only -
there is no change to kernel or gpart support for MBR or BSD
disklablel partitioning. That said, MBR partitioning and BSD
disklabels are best considered legacy formats and should be avoided
for new installations, if possible.

If anyone is using fdisk and/or bsdlabel rather than gpart I would
appreciate knowing what is preventing you from using the contemporary
tools.

nanobsd's legacy.sh still is= using disklabel in two spots.

But one is to just = do gpart create -s bsd and the other is to display it. Easy
to fi= x, but even easier to delete legacy.sh entirely. It's not really needed= any
more and was a product of CHS addressing... Now that we use = LBA, it's
better to use the new embedded ones. Even at $WORK = where we kinda
use legacy, we replace the partitioning stuff with= our own custom thing...

Those are the only users = in the tree, but not for long :)

fdisk was good, b= ut somewhere around the CHS -> LBA transition things
got weird= with it, and for really big disks there were reports of issues that
<= div>I could never encounter when I set out to fix them... Most likely due t= o a
mismatch in the CHS data and the LBA data being recorded in t= he MBR.
The in-kernel gpart copes so much better.

<= /div>
I wouldn't object to making these ports, but both these progr= ams use 'sekret'
bits from the kernel that might not rema= in exposed as we clean things up.
Though the IOCTLs they do (or u= sed to do) may no longer be relevant. It's
been so long that = I've forgotten....

Warner

--000000000000446006060fb46b31-- From nobody Wed Jan 24 17:40:03 2024 X-Original-To: freebsd-current@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 4TKrnl4rVYz58QRj for ; Wed, 24 Jan 2024 17:40:11 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Received: from phk.freebsd.dk (phk.freebsd.dk [130.225.244.222]) (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 4TKrnl2jG1z53JX; Wed, 24 Jan 2024 17:40:11 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Authentication-Results: mx1.freebsd.org; none Received: from critter.freebsd.dk (unknown [192.168.55.3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phk.freebsd.dk (Postfix) with ESMTPS id B714D892AB; Wed, 24 Jan 2024 17:40:03 +0000 (UTC) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.17.1/8.16.1) with ESMTPS id 40OHe3sk039727 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Wed, 24 Jan 2024 17:40:03 GMT (envelope-from phk@critter.freebsd.dk) Received: (from phk@localhost) by critter.freebsd.dk (8.17.1/8.16.1/Submit) id 40OHe30K039726; Wed, 24 Jan 2024 17:40:03 GMT (envelope-from phk) Message-Id: <202401241740.40OHe30K039726@critter.freebsd.dk> To: Ed Maste cc: FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-reply-to: From: "Poul-Henning Kamp" References: List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <39724.1706118003.1@critter.freebsd.dk> Date: Wed, 24 Jan 2024 17:40:03 +0000 X-Rspamd-Queue-Id: 4TKrnl2jG1z53JX X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:1835, ipnet:130.225.0.0/16, country:EU] -------- Ed Maste writes: > MBR (PC BIOS) partition tables were historically maintained with > fdisk(8), but gpart(8) has long been the preferred method for working > with partition tables of all types. fdisk has been declared as > obsolete in the man page since 2015. Similarly BSD disklabels were > historically maintained with bsdlabel. It does not yet have a > deprecation notice - I have proposed a man page addition in > https://reviews.freebsd.org/D43563. By all means! It may even be possible to shave some of the weirder bits out of GEOM when they're gone. -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. From nobody Wed Jan 24 18:50:19 2024 X-Original-To: freebsd-current@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 4TKtLw6ZkPz58Wyv for ; Wed, 24 Jan 2024 18:50:32 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKtLw2zwPz3xKv; Wed, 24 Jan 2024 18:50:32 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40OIoJBG098490; Wed, 24 Jan 2024 10:50:19 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40OIoJ9o098489; Wed, 24 Jan 2024 10:50:19 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401241850.40OIoJ9o098489@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: Warner Losh Date: Wed, 24 Jan 2024 10:50:19 -0800 (PST) CC: Ed Maste , FreeBSD Current X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TKtLw2zwPz3xKv X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] > On Wed, Jan 24, 2024 at 8:45?AM Ed Maste wrote: > > > MBR (PC BIOS) partition tables were historically maintained with > > fdisk(8), but gpart(8) has long been the preferred method for working > > with partition tables of all types. fdisk has been declared as > > obsolete in the man page since 2015. Similarly BSD disklabels were > > historically maintained with bsdlabel. It does not yet have a > > deprecation notice - I have proposed a man page addition in > > https://reviews.freebsd.org/D43563. man page additions are not going to reach the people who may be using this. This should be a gonein(15) added to the binary. I also suspect that all of the people doing ufs installs are doing so via bsdlabel, not gpart. > > > > I would like to disconnect these from the build, and subsequently > > remove them. This is prompted by a recent bsdlabel bug report which > > uncovered a longstanding buffer overflow in that tool. Effort is much > > better focused on contemporary, maintained tools rather than > > investigating issues in deprecated ones. Removing these tools would > > happen in FreeBSD 15 only (no change in 14 or 13). > > > > Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 How can you do bsdlabel -A -e /dev/foo with gpart? As far as I know that functionality never made it to gpart, neither the -A or -e. > > > > Note that this effort is limited to these maintenance tools only - > > there is no change to kernel or gpart support for MBR or BSD > > disklablel partitioning. That said, MBR partitioning and BSD > > disklabels are best considered legacy formats and should be avoided > > for new installations, if possible. > > > > If anyone is using fdisk and/or bsdlabel rather than gpart I would > > appreciate knowing what is preventing you from using the contemporary > > tools. My prototype files that are read by bsdlabel -R as far as I know can not be processed by gpart. fdisk I can probably get away from, but thats a working binary accross a lot of platforms which do not have gpart. > > > > nanobsd's legacy.sh still is using disklabel in two spots. > > But one is to just do gpart create -s bsd and the other is to display it. > Easy > to fix, but even easier to delete legacy.sh entirely. It's not really > needed any > more and was a product of CHS addressing... Now that we use LBA, it's > better to use the new embedded ones. Even at $WORK where we kinda > use legacy, we replace the partitioning stuff with our own custom thing... > > Those are the only users in the tree, but not for long :) > > fdisk was good, but somewhere around the CHS -> LBA transition things > got weird with it, and for really big disks there were reports of issues > that > I could never encounter when I set out to fix them... Most likely due to a > mismatch in the CHS data and the LBA data being recorded in the MBR. > The in-kernel gpart copes so much better. > > I wouldn't object to making these ports, but both these programs use > 'sekret' > bits from the kernel that might not remain exposed as we clean things up. > Though the IOCTLs they do (or used to do) may no longer be relevant. It's > been so long that I've forgotten.... > > Warner -- Rod Grimes rgrimes@freebsd.org From nobody Wed Jan 24 19:28:09 2024 X-Original-To: freebsd-current@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 4TKvBP10n7z58Z7M for ; Wed, 24 Jan 2024 19:28:13 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKvBN61g8z42jC; Wed, 24 Jan 2024 19:28:12 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; none Received: from shw-obgw-4002a.ext.cloudfilter.net ([10.228.9.250]) by cmsmtp with ESMTPS id SYfjrzGaIGAIJSiuyrwejz; Wed, 24 Jan 2024 19:28:12 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id SiuwrjyVswbmvSiuxrtbv4; Wed, 24 Jan 2024 19:28:11 +0000 X-Authority-Analysis: v=2.4 cv=O6wqATxW c=1 sm=1 tr=0 ts=65b164cb a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=kj9zAlcOel0A:10 a=dEuoMetlWLkA:10 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=EkcXrb_YAAAA:8 a=9JuoSTmymGmPWKS-4pEA:9 a=CjuIK1q_8ugA:10 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTP id EF3AAB4F; Wed, 24 Jan 2024 11:28:09 -0800 (PST) Received: by slippy.cwsent.com (Postfix, from userid 1000) id 3A57396; Wed, 24 Jan 2024 11:28:09 -0800 (PST) X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.8+dev Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Ed Maste cc: FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-reply-to: References: Comments: In-reply-to Ed Maste message dated "Wed, 24 Jan 2024 10:44:57 -0500." List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 24 Jan 2024 11:28:09 -0800 Message-Id: <20240124192809.3A57396@slippy.cwsent.com> X-CMAE-Envelope: MS4xfI5ukHfmGKKNDECFbDuEg7jHkCDso1O2fRt9msSxKUo/ZciMufW+77SD2W3fAH91FffMNu00C/Vld4LfDMiMJJvzGh62aVUreBNNzXLiq6pzF3CBON2h VTgU+n0H0zqcbjgS9WqJWZWi8tX+Xdp6j86oKWaaO0bPDy55IsQ5sceZ5bqIL78r7rHuc1RSiFs/c8+ZicqbuVQxc7Ao3DusGgHPfegkGR+NM+OQGbZdKMFD l4kFmLHi2XO45XJaZz7MIQ== X-Rspamd-Queue-Id: 4TKvBN61g8z42jC X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US] In message , Ed Maste writes: > MBR (PC BIOS) partition tables were historically maintained with > fdisk(8), but gpart(8) has long been the preferred method for working > with partition tables of all types. fdisk has been declared as > obsolete in the man page since 2015. Similarly BSD disklabels were > historically maintained with bsdlabel. It does not yet have a > deprecation notice - I have proposed a man page addition in > https://reviews.freebsd.org/D43563. > > I would like to disconnect these from the build, and subsequently > remove them. This is prompted by a recent bsdlabel bug report which > uncovered a longstanding buffer overflow in that tool. Effort is much > better focused on contemporary, maintained tools rather than > investigating issues in deprecated ones. Removing these tools would > happen in FreeBSD 15 only (no change in 14 or 13). > > Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 > > Note that this effort is limited to these maintenance tools only - > there is no change to kernel or gpart support for MBR or BSD > disklablel partitioning. That said, MBR partitioning and BSD > disklabels are best considered legacy formats and should be avoided > for new installations, if possible. > > If anyone is using fdisk and/or bsdlabel rather than gpart I would > appreciate knowing what is preventing you from using the contemporary > tools. > We need to fix the kern.geom.debugflags sysctl foot shooting option so that it works. (Not that bsdlabel or fdisk worked around the issue). Otherwise one is left with boot to single user or from alternate media if that doesn't work. I do have a patch that circumvents the problem. I haven't looked it it in years and probably needs some cleanup though. -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org e^(i*pi)+1=0 From nobody Wed Jan 24 20:21:29 2024 X-Original-To: freebsd-current@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 4TKwMy0jFTz58fmV for ; Wed, 24 Jan 2024 20:21:34 +0000 (UTC) (envelope-from mike@karels.net) Received: from mail2.karels.net (mail2.karels.net [3.19.118.201]) (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-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "freebsd", Issuer "freebsd" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKwMx4gfjz4KDb; Wed, 24 Jan 2024 20:21:33 +0000 (UTC) (envelope-from mike@karels.net) Authentication-Results: mx1.freebsd.org; none Received: from mail2.karels.net (localhost [IPv6:0:0:0:0:0:0:0:1]) by mail2.karels.net (8.17.1/8.17.1) with ESMTP id 40OKLUQF052213; Wed, 24 Jan 2024 14:21:30 -0600 (CST) (envelope-from mike@karels.net) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karels.net; s=mail2; t=1706127690; bh=kiZJCi1gwiOTGu516fEMWDk3ukZzr6Dvf006HGw9p/c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=k+DRzk2OQXYjjTkv/P6TBCCMVLosjgkfUJm8rvC+ncwJ7fcx5W754sW8A57eo2rJU pHX+AfvhQzeRruxl0nM0kyNm0xiyWBsXzq+byhQxoobulpj4296R7aGAYhLP5CuFZx gK8XOamFs6DBffe1kpshR5W77UlgaVHqlqRNVmqXLUPIyEJ/1yF3+qhMGMKpd3xJ64 IBGFFYU29pGXHbT5fGTKuLZv1gbXz10Wc4nB22JlVadgmQAihPpEXD0Gc1jxTh7ziI SwXIstfJePkfFZ12WLWocYuS3OmS8GA6Ia3aYP3Hy0Qbxhq5gNJx1cAB+kRLlIS13l ns4oJTLXlx73Q== Received: from [10.0.2.130] ([73.62.165.147]) by mail2.karels.net with ESMTPSA id zGAkGEpxsWXzywAAs/W3XQ (envelope-from ); Wed, 24 Jan 2024 14:21:30 -0600 From: Mike Karels To: "\"Rodney W. Grimes\"" Cc: Warner Losh , Ed Maste , FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Date: Wed, 24 Jan 2024 14:21:29 -0600 X-Mailer: MailMate (1.14r6015) Message-ID: <0862D1C2-3C6F-479F-924C-9D68021BC0C6@karels.net> In-Reply-To: <202401241850.40OIoJ9o098489@gndrsh.dnsmgr.net> References: <202401241850.40OIoJ9o098489@gndrsh.dnsmgr.net> List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain X-Rspamd-Queue-Id: 4TKwMx4gfjz4KDb X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.16.0.0/14, country:US] On 24 Jan 2024, at 12:50, Rodney W. Grimes wrote: >> On Wed, Jan 24, 2024 at 8:45?AM Ed Maste wrote: >> >>> MBR (PC BIOS) partition tables were historically maintained with >>> fdisk(8), but gpart(8) has long been the preferred method for working >>> with partition tables of all types. fdisk has been declared as >>> obsolete in the man page since 2015. Similarly BSD disklabels were >>> historically maintained with bsdlabel. It does not yet have a >>> deprecation notice - I have proposed a man page addition in >>> https://reviews.freebsd.org/D43563. > > man page additions are not going to reach the people who may be > using this. This should be a gonein(15) added to the binary. > I also suspect that all of the people doing ufs installs > are doing so via bsdlabel, not gpart. I suspect that more ufs installs are done with bsdinstall than with bsdlabel. The interactive mode is much easier to use than bsdlabel -e, where you have to do your own arithmetic. A couple of wrappers around bsdinstall could make it a much better replacement for bsdlabel -e, etc. (No criticism of bsdlabel, but it's so old I don't remember if I wrote it; I think I did.) I have a number of test systems using ufs, and I do my modifications with gpart, which accepts humanized numbers and does the arithmetic. Mike From nobody Wed Jan 24 20:42:57 2024 X-Original-To: freebsd-current@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 4TKwrq0L3jz58hC5 for ; Wed, 24 Jan 2024 20:43:07 +0000 (UTC) (envelope-from jhs@berklix.com) Received: from slim.berklix.org (slim.berklix.org [94.185.90.68]) (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-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "slim", Issuer "slim" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKwrp16t9z4P9T; Wed, 24 Jan 2024 20:43:05 +0000 (UTC) (envelope-from jhs@berklix.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of jhs@berklix.com has no SPF policy when checking 94.185.90.68) smtp.mailfrom=jhs@berklix.com Received: from dell.no.berklix.net (p4fc4ca6d.dip0.t-ipconnect.de [79.196.202.109]) (authenticated bits=128) by slim.berklix.org (8.17.1/8.17.1) with ESMTPSA id 40OKgvEq068406 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=FAIL); Wed, 24 Jan 2024 21:42:57 +0100 (CET) (envelope-from jhs@berklix.com) Received: from dell.no.berklix.net (localhost [127.0.0.1]) by dell.no.berklix.net (8.16.1/8.16.1) with ESMTPS id 40OKgvj6087349 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Wed, 24 Jan 2024 21:42:57 +0100 (CET) (envelope-from jhs@localhost.no.berklix.net) Received: (from jhs@localhost) by dell.no.berklix.net (8.16.1/8.16.1/Submit) id 40OKgv8P087348; Wed, 24 Jan 2024 21:42:57 +0100 (CET) (envelope-from jhs) Message-Id: <202401242042.40OKgv8P087348@dell.no.berklix.net> To: Ed Maste cc: FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) From: "Julian H. Stacey" Organization: http://berklix.com/jhs/ User-agent: EXMH on FreeBSD http://berklix.com/free/ X-From: http://www.berklix.org/~jhs/ In-reply-to: Your message "Wed, 24 Jan 2024 10:44:57 -0500." List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <87346.1706128977.1@localhost> Date: Wed, 24 Jan 2024 21:42:57 +0100 X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.10 / 15.00]; AUTH_NA(1.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; MIME_GOOD(-0.10)[text/plain]; RCVD_VIA_SMTP_AUTH(0.00)[]; ARC_NA(0.00)[]; ASN(0.00)[asn:33824, ipnet:94.185.88.0/22, country:DE]; FREEFALL_USER(0.00)[jhs]; HAS_ORG_HEADER(0.00)[]; MIME_TRACE(0.00)[0:+]; RCPT_COUNT_TWO(0.00)[2]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; RCVD_COUNT_THREE(0.00)[3]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; R_DKIM_NA(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_TLS_LAST(0.00)[]; TO_DN_ALL(0.00)[]; DMARC_NA(0.00)[berklix.com]; R_SPF_NA(0.00)[no SPF record] X-Rspamd-Queue-Id: 4TKwrp16t9z4P9T Ed Maste wrote: > MBR (PC BIOS) partition tables were historically maintained with > fdisk(8), but gpart(8) has long been the preferred method for working > with partition tables of all types. fdisk has been declared as > obsolete in the man page since 2015. Similarly BSD disklabels were > historically maintained with bsdlabel. It does not yet have a > deprecation notice - I have proposed a man page addition in > https://reviews.freebsd.org/D43563. > > I would like to disconnect these from the build, and subsequently > remove them. This is prompted by a recent bsdlabel bug report which > uncovered a longstanding buffer overflow in that tool. Effort is much > better focused on contemporary, maintained tools rather than > investigating issues in deprecated ones. Removing these tools would > happen in FreeBSD 15 only (no change in 14 or 13). > > Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 > > Note that this effort is limited to these maintenance tools only - > there is no change to kernel or gpart support for MBR or BSD > disklablel partitioning. That said, MBR partitioning and BSD > disklabels are best considered legacy formats and should be avoided > for new installations, if possible. > > If anyone is using fdisk and/or bsdlabel rather than gpart I would > appreciate knowing what is preventing you from using the contemporary > tools. Probably many do, clueless there's a proposal to remove them, as many wont be tracking lists (I havent been tracking lately, focused on moving home, other will have other distractions) Personaly: I run a mix of machines from servers with 14 back through to clients with 4.11 http://berklix.com/scanjet/ Some boxes work well, have no benefit from upgrade & no capability to support the bloat from 4 to 15 but still very useful in heterogenous internal nets. Security is moot behind some firewalls, small is beautiful, & sometimes essential, eg I plan to hitch another small old toshiba libretto in a waterproof box to use parallel port to drive stepper motors for a satellite dish. I master disk images & trees for such old boxes, mounted on more modern FreeBSD, but common fdisk is nice on host & target. I also use fdisk maintained MBR on eg USB sticks on key ring, combining rescue & install partitions of new BSD + backup of encrypted data, + A DOS slice for export import for non BSD world. MBR via fdisk is a familiar comfort in a world of variant OS's. BSD people who've wrestled with weird Linux boot stuff may sypathise with the idea if retaining familiar fdisk for non latest BSD people. But if people really espouse tangible benefit to kicking fdisk out of src/, I just hope same people first copy fdisk in to ports/ before out of src/ Cheers, -- Julian Stacey. Arm Ukraine. Contraception V Global heating & resource wars. Gmail & Googlemail Fail http://berklix.org/jhs/mail/#bad From nobody Wed Jan 24 20:50:58 2024 X-Original-To: freebsd-current@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 4TKx1z2P4Lz58hwF for ; Wed, 24 Jan 2024 20:51:03 +0000 (UTC) (envelope-from SRS0=ISnb=JC=quip.cz=000.fbsd@elsa.codelab.cz) Received: from elsa.codelab.cz (elsa.codelab.cz [94.124.105.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKx1z03WLz4R6D; Wed, 24 Jan 2024 20:51:03 +0000 (UTC) (envelope-from SRS0=ISnb=JC=quip.cz=000.fbsd@elsa.codelab.cz) Authentication-Results: mx1.freebsd.org; none Received: from elsa.codelab.cz (localhost [127.0.0.1]) by elsa.codelab.cz (Postfix) with ESMTP id 561E2D7890; Wed, 24 Jan 2024 21:51:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quip.cz; s=private; t=1706129460; bh=A2BE7L/IChHRQ1PugV4xMpozE37BZ5eLmHjKJqGAQak=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=JPzsbhh8mvscO0rjCuugTx16H7nyOo2C2YCQxXNI5vG5JcK0FGvbZpFjCXKLz2eze Dj/QY1HIB0duL41Y98E4pMBByXisPWB9ebU2Hz3OWgFhcOla/tz8TeLCEolhseYRgE piy5+gN+uIDTse8y/8EuF/KWnJ8rBfcbnoczsO5I= Received: from [192.168.145.49] (ip-89-177-27-225.bb.vodafone.cz [89.177.27.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by elsa.codelab.cz (Postfix) with ESMTPSA id 02550D788B; Wed, 24 Jan 2024 21:50:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quip.cz; s=private; t=1706129459; bh=A2BE7L/IChHRQ1PugV4xMpozE37BZ5eLmHjKJqGAQak=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=AVoHW3nH5NHcxsEXgQCnigRClUsMEEYhVHkNzYs35ugduiF1gbq5PD6qCHzX6kvX/ pY+rNneD05WhOANKTvQuqIFXrkQAKxTo5ZChMje+rR9fHUuFNJGAwv0RPa4RQQdA+N INLdqYt1D3rSGomrtdbQbLjNWLrCD7jGCYTIDcF0= Message-ID: Date: Wed, 24 Jan 2024 21:50:58 +0100 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Content-Language: cs-Cestina To: "Rodney W. Grimes" , Warner Losh Cc: Ed Maste , FreeBSD Current References: <202401241850.40OIoJ9o098489@gndrsh.dnsmgr.net> From: Miroslav Lachman <000.fbsd@quip.cz> In-Reply-To: <202401241850.40OIoJ9o098489@gndrsh.dnsmgr.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4TKx1z03WLz4R6D X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:42000, ipnet:94.124.104.0/21, country:CZ] On 24/01/2024 19:50, Rodney W. Grimes wrote: >> On Wed, Jan 24, 2024 at 8:45?AM Ed Maste wrote: >> >>> MBR (PC BIOS) partition tables were historically maintained with >>> fdisk(8), but gpart(8) has long been the preferred method for working >>> with partition tables of all types. fdisk has been declared as >>> obsolete in the man page since 2015. Similarly BSD disklabels were >>> historically maintained with bsdlabel. It does not yet have a >>> deprecation notice - I have proposed a man page addition in >>> https://reviews.freebsd.org/D43563. > > man page additions are not going to reach the people who may be > using this. This should be a gonein(15) added to the binary. > I also suspect that all of the people doing ufs installs > are doing so via bsdlabel, not gpart. I have many FreeBSD installations running in a UFS-based VM, created using bsdinstall or manually using gpart. I haven't touched fdisk and bsdlabel in at least a decade. >>> I would like to disconnect these from the build, and subsequently >>> remove them. This is prompted by a recent bsdlabel bug report which >>> uncovered a longstanding buffer overflow in that tool. Effort is much >>> better focused on contemporary, maintained tools rather than >>> investigating issues in deprecated ones. Removing these tools would >>> happen in FreeBSD 15 only (no change in 14 or 13). >>> >>> Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 > > How can you do bsdlabel -A -e /dev/foo with gpart? As far as I know > that functionality never made it to gpart, neither the -A or -e. I was curious what this command does that is so special, but it seems to be of no use anymore: % bsdlabel -A /dev/ada0 bsdlabel: disks with more than 2^32-1 sectors are not supported Do we really need a tool that can't handle disks of average size (in this case 4TB)? Kind regards Miroslav Lachman From nobody Wed Jan 24 22:28:23 2024 X-Original-To: freebsd-current@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 4TKzBX1ls4z58r1j for ; Wed, 24 Jan 2024 22:28:36 +0000 (UTC) (envelope-from ggm@algebras.org) Received: from mail-oa1-x31.google.com (mail-oa1-x31.google.com [IPv6:2001:4860:4864:20::31]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TKzBX05PZz4d6q for ; Wed, 24 Jan 2024 22:28:36 +0000 (UTC) (envelope-from ggm@algebras.org) Authentication-Results: mx1.freebsd.org; none Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2144c37f3d3so1476255fac.0 for ; Wed, 24 Jan 2024 14:28:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=algebras-org.20230601.gappssmtp.com; s=20230601; t=1706135314; x=1706740114; darn=freebsd.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=IFF2upeg1xJ/qn7Y1Bj7P5CCnHC9/OVYg7f/sT6ryJk=; b=n20ArQNsif17Sz9sYNeIonDsDM6J44hnxodeNphaouF4LyDwvKBtI44liyWDerPdo2 NQ1E3YvOjYa32ZkLSLQv4gyc6ETseLLZUXMyD6S1wxqRgukqJGhzKDnLoZ0yD0o31bQk eyMWn5aURAQuKUnGbTB0AKCwO59M4BcPLt/nIiCv28cUUEGuH7CO7vz+5ZCyCcsIdpxx eDlSp96i2mKU9NattxtOBTtrWengSj+9IUqGrZeUenjg9yp8Us9hNbldVQr8662KObye aGDyFHmzeiXzTo0Fy+zkQ6Dg68qUOUvH5XgezXvUia5yW4mApwE4ZIx3q21jEdpOav6r x1Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706135314; x=1706740114; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IFF2upeg1xJ/qn7Y1Bj7P5CCnHC9/OVYg7f/sT6ryJk=; b=sWKrDPDm/vgY7fuc5+cOnxlBhL931VxhMHpbPbI4+png6UkIYbdNyYFcUbVeV2flxs OHE1NgBWMCC++Xfv/Tt2rWq08t+zOP1Srg8Z4Ac15DVgGM3VWr3Ot/4p+aYc9MIjiIN/ Lc5BdsdPyDZQZsSAq+/nJulpF64R8XFDj6DYn9ok1Vt5tKqEGR1u/diu6JVQQXECluR4 0r/M/3gKaFMzOCZkv/fy1Rb4dTbiVzi8Hdkn3Akx+dGAIaQhu/LG+WGGUxZev+vkxMjF ZZJ4bfv7pB82wmztb25jsnVwn94rxcvZPhT6icJudgQvsIzoybUWq/UsqDynJJfmC+7P +f6Q== X-Gm-Message-State: AOJu0YzN+FRnMI3mxn6TwcFiHerdjl+NnGoGJF2o5w8AB944K7m1YRff 3nPIl31OE7SUvjDfkJGqfhtvM9CItSxtY1F31LaH7S+hhetKNK9XpbzuKx/nMaRWVPnc20Pg450 nO6Z3z66ZOvV0zsdqcx7qQIpH2XyPeT6JpVLrNQ== X-Google-Smtp-Source: AGHT+IHQOjsStZCNgKIJGar8LuAOeF1uIXVbcqE09e2OS3BBnL/cBfiFT96ltw+gvEaTOO6Us027mUgf1hCkOmyKdgg= X-Received: by 2002:a05:6870:d207:b0:210:a311:6b38 with SMTP id g7-20020a056870d20700b00210a3116b38mr3763703oac.99.1706135314240; Wed, 24 Jan 2024 14:28:34 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: George Michaelson Date: Thu, 25 Jan 2024 08:28:23 +1000 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Warner Losh Cc: Ed Maste , FreeBSD Current Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4TKzBX05PZz4d6q X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2001:4860:4864::/48, country:US] I would agree personally, to moving to ports (eg ports/sysutils) with a DEPRECATED in the DESCR or something, or better yet a Make invokation event to say "superceded, here is how to proceed against advice") or something. -G On Thu, Jan 25, 2024 at 3:30=E2=80=AFAM Warner Losh wrote: > > On Wed, Jan 24, 2024 at 8:45=E2=80=AFAM Ed Maste wro= te: >> >> MBR (PC BIOS) partition tables were historically maintained with >> fdisk(8), but gpart(8) has long been the preferred method for working >> with partition tables of all types. fdisk has been declared as >> obsolete in the man page since 2015. Similarly BSD disklabels were >> historically maintained with bsdlabel. It does not yet have a >> deprecation notice - I have proposed a man page addition in >> https://reviews.freebsd.org/D43563. >> >> I would like to disconnect these from the build, and subsequently >> remove them. This is prompted by a recent bsdlabel bug report which >> uncovered a longstanding buffer overflow in that tool. Effort is much >> better focused on contemporary, maintained tools rather than >> investigating issues in deprecated ones. Removing these tools would >> happen in FreeBSD 15 only (no change in 14 or 13). >> >> Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 >> >> Note that this effort is limited to these maintenance tools only - >> there is no change to kernel or gpart support for MBR or BSD >> disklablel partitioning. That said, MBR partitioning and BSD >> disklabels are best considered legacy formats and should be avoided >> for new installations, if possible. >> >> If anyone is using fdisk and/or bsdlabel rather than gpart I would >> appreciate knowing what is preventing you from using the contemporary >> tools. > > > nanobsd's legacy.sh still is using disklabel in two spots. > > But one is to just do gpart create -s bsd and the other is to display it.= Easy > to fix, but even easier to delete legacy.sh entirely. It's not really nee= ded any > more and was a product of CHS addressing... Now that we use LBA, it's > better to use the new embedded ones. Even at $WORK where we kinda > use legacy, we replace the partitioning stuff with our own custom thing..= . > > Those are the only users in the tree, but not for long :) > > fdisk was good, but somewhere around the CHS -> LBA transition things > got weird with it, and for really big disks there were reports of issues = that > I could never encounter when I set out to fix them... Most likely due to = a > mismatch in the CHS data and the LBA data being recorded in the MBR. > The in-kernel gpart copes so much better. > > I wouldn't object to making these ports, but both these programs use 'sek= ret' > bits from the kernel that might not remain exposed as we clean things up. > Though the IOCTLs they do (or used to do) may no longer be relevant. It's > been so long that I've forgotten.... > > Warner > From nobody Wed Jan 24 23:16:12 2024 X-Original-To: freebsd-current@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 4TL0Fl3H7Xz58vHP for ; Wed, 24 Jan 2024 23:16:27 +0000 (UTC) (envelope-from tomek@cedro.info) Received: from mail-yw1-x112c.google.com (mail-yw1-x112c.google.com [IPv6:2607:f8b0:4864:20::112c]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL0Fl1W9Vz4kCV for ; Wed, 24 Jan 2024 23:16:26 +0000 (UTC) (envelope-from tomek@cedro.info) Authentication-Results: mx1.freebsd.org; none Received: by mail-yw1-x112c.google.com with SMTP id 00721157ae682-5fc2e997804so55972357b3.3 for ; Wed, 24 Jan 2024 15:16:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cedro.info; s=google; t=1706138185; x=1706742985; darn=freebsd.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=XuHkPUso7KT1Z7SOe9sYeoamShDDrwHPstFFeOAyFPk=; b=GXOwsiomlJN6bsTc086aD+aVGRKG1IrrUrCA1y/MvkUGzDVCkyKQBt1zd+PwPe47Y9 OKE614lavvwxKKEBYdhEKR+dIqM7uyeZl1qZaXfZABEq5ahONx1jAIez33wfcMD6UepC OEK11wjFxg1ZNBaqx1EvUYtls8IU1L/eVE052XHkTFB7P0JnJCItNQRstN+MZg8NsYzB u/HCqMyJ5lq3p0hkbLDOB901inQCk3Txba37VyruC5iprXDEeugfNtzF21Z5E9gyA5hf U6sCB0iO5AT8k4NwitzW1CAYbmtuxXwihv4f1Zv3rlUG410K+xV8M/bzs8G/93NzZG/s V+7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706138185; x=1706742985; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XuHkPUso7KT1Z7SOe9sYeoamShDDrwHPstFFeOAyFPk=; b=cIN8x2SSrAZpbQTGcNZ2SYddvUT3EZPkn3wjT0BfX1/hNnZHDMTs2Zg6OmJInbQ6Zf ieIwYutIP/X8erRf6+GeZg9qRkNlgE2/cdeZT9TNO39zqL2ITR/LpmfDJ0qR7jH3XfyS Nqd7+1Vz1NW9cGcbK+ql5wifdzJnJeAs703dJdk4szZutKW4ffs1DWJBRQQXiaHkCW1w zioCQaazXFreOJQw4ygl3zpmAV/lVto4gNCP0lMbSeo3u+O51a0Y+9u5dJlab8kKb1Zm UNM6JSEUnH5o7e+MGDdbP49vLBfdY8m4h91itypRFnBERpV8EQQemheWXW8+jIQUF54g Sqmg== X-Gm-Message-State: AOJu0YwOUembrdEftJ319NAEB+MBQmCrojSFwA/0nyuDJObVFGIYDuDZ /AdDkBwN1415+bHev/MwTNcRkRVqqdSs0OgWsJfevDodkIidA0Hto2/+9iPfCGmWujEIW2IIT7U = X-Google-Smtp-Source: AGHT+IGalYCds8tdlkBZMVrcXOQSiN7hmmuPJDJ5JeoDzYyarG4wbinDueK4rAAQRb+wgqTpkcdx2w== X-Received: by 2002:a81:d34c:0:b0:5ff:4842:9ea6 with SMTP id d12-20020a81d34c000000b005ff48429ea6mr1497489ywl.47.1706138185270; Wed, 24 Jan 2024 15:16:25 -0800 (PST) Received: from mail-yb1-f179.google.com (mail-yb1-f179.google.com. [209.85.219.179]) by smtp.gmail.com with ESMTPSA id z130-20020a814c88000000b005ff877093easm252462ywa.143.2024.01.24.15.16.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 24 Jan 2024 15:16:24 -0800 (PST) Received: by mail-yb1-f179.google.com with SMTP id 3f1490d57ef6-dc21ad8266fso5124936276.1; Wed, 24 Jan 2024 15:16:24 -0800 (PST) X-Received: by 2002:a25:bfc7:0:b0:dbe:d536:914a with SMTP id q7-20020a25bfc7000000b00dbed536914amr98862ybm.89.1706138184459; Wed, 24 Jan 2024 15:16:24 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Tomek CEDRO Date: Thu, 25 Jan 2024 00:16:12 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Warner Losh Cc: Ed Maste , FreeBSD Current Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4TL0Fl1W9Vz4kCV X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] On Wed, Jan 24, 2024 at 6:30=E2=80=AFPM Warner Losh wrote: The in-kernel gpart copes so much better. > (..) > I wouldn't object to making these ports (..) +1 for moving fdisk and bsdlabel to ports instead deleting :-) -- CeDeROM, SQ7MHZ, http://www.tomek.cedro.info From nobody Wed Jan 24 23:22:18 2024 X-Original-To: freebsd-current@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 4TL0Nr6htyz58vky for ; Wed, 24 Jan 2024 23:22:36 +0000 (UTC) (envelope-from kob6558@gmail.com) Received: from mail-yw1-x1136.google.com (mail-yw1-x1136.google.com [IPv6:2607:f8b0:4864:20::1136]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL0Nr4pTLz4lHL; Wed, 24 Jan 2024 23:22:36 +0000 (UTC) (envelope-from kob6558@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-5ff9adbf216so51932997b3.1; Wed, 24 Jan 2024 15:22:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706138555; x=1706743355; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=daP/+n1mU9T10x6s5lEt382e+jfRqTS77PHNRQsjopY=; b=jdoFn6edc2fflQQ6wft0MlVXLkLDCEL/KB/gFufimB/bIsIHsV8D7h74vpGtkFacz2 6Ts/hJco6eMuYQnILmJNUP3O8xH5YR51k3n19d2k1OAiGGfCoWvizf68Y1JljA/Hv1/z eJzsNGMLTM510TIBzVTnMRTwRbrAwn04jxM5XnYYX8gEaOZYO01E8gXFwaA/7Qi8aABq nUYDO2FOmF1nxesWmkOT4m2amfxx5U5uapop9mQNUzNOcpwCgRCSLNA0kqValTnVK71+ m6gTUEt+nDGVo0YlE8H+eqKUBPxzK5u4s1GfiyvJg+6uCq1gMiZP6Ss/+QzlVKQD/g5J 9yWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706138555; x=1706743355; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=daP/+n1mU9T10x6s5lEt382e+jfRqTS77PHNRQsjopY=; b=w/dt+70uqE0aFfsImr12+cT+ZwZN7UAA9/0atLaJvo6QM4h/Zqcjml2EymKMJ+B5HB eJyIciSoO7ELjXpEzmx9oOZn1hHP1G0azH8r+uReJzYrEEfB8cQUNx7PsHL1q/UzheaZ aqPelXD/M/uYZLpgsMTeQtE25RC6DQazAw53+BzDuakqGyGmj7tmBGh0LbThiojh20Sm Dz8n68XdUums/SGbyCMyb+TxyfAVW8CkNEy2fP3I+uejUuufqVqcTuxEpeB/Bo1G3f1l 92s33czZXfsk1AVi/GG5J0AgMvtML73656cLi4kLoKAhVeN1WYWUKnuQDFr1L0Bt2UKm 0htQ== X-Gm-Message-State: AOJu0Yz0doinRj6z1zURY9fygreXwcVXtWpEVXG4icuV/x8JZB7sFHFT MdvX/KPqrm7gKUxvg6pnMXz1TsrQnSm+6IMwWnDhc2+SQ9AbgXyl4y54tcsN3sB8EbKdL8xV2/s ++SSJQQSsBu2k/6jNMP/S5Fz82lw= X-Google-Smtp-Source: AGHT+IH0mAHCl+YYlZS0ilqO/o7XRNWgOotkjMQx41VL1uoWs61v+31sn9oMx2FNLVgKEpCicVqgg/IYYQOGG/G5+bg= X-Received: by 2002:a81:8305:0:b0:5ff:60b4:86e6 with SMTP id t5-20020a818305000000b005ff60b486e6mr1760050ywf.19.1706138555327; Wed, 24 Jan 2024 15:22:35 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Kevin Oberman Date: Wed, 24 Jan 2024 15:22:18 -0800 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: George Michaelson Cc: Warner Losh , Ed Maste , FreeBSD Current Content-Type: multipart/alternative; boundary="000000000000872c64060fb95646" X-Rspamd-Queue-Id: 4TL0Nr4pTLz4lHL X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] --000000000000872c64060fb95646 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Killing these would be excellent. I have not used either in many years for either MBR or GPT. The first time used gpart on an MBR disc, I realized that fdisk and bsdlabel, which I'd always found rather clunky, should die, but for years I kept seeing people claim that gpart was only for GPT and that fdisk/bsdlabel was the only way to do MBR. The name (gpt plus 2 letters) seemed to make this clear to some people. Hopefully this has pretty much passed. I do want to open a bug report to fix up the documentation which fails to clarify the units of numeric arguments in gpart, though... bytes vs. blocks for the most part. On Wed, Jan 24, 2024 at 2:28=E2=80=AFPM George Michaelson wrote: > I would agree personally, to moving to ports (eg ports/sysutils) with > a DEPRECATED in the DESCR or something, or better yet a Make > invokation event to say "superceded, here is how to proceed against > advice") or something. > > -G > > On Thu, Jan 25, 2024 at 3:30=E2=80=AFAM Warner Losh wrot= e: > > > > On Wed, Jan 24, 2024 at 8:45=E2=80=AFAM Ed Maste w= rote: > >> > >> MBR (PC BIOS) partition tables were historically maintained with > >> fdisk(8), but gpart(8) has long been the preferred method for working > >> with partition tables of all types. fdisk has been declared as > >> obsolete in the man page since 2015. Similarly BSD disklabels were > >> historically maintained with bsdlabel. It does not yet have a > >> deprecation notice - I have proposed a man page addition in > >> https://reviews.freebsd.org/D43563. > >> > >> I would like to disconnect these from the build, and subsequently > >> remove them. This is prompted by a recent bsdlabel bug report which > >> uncovered a longstanding buffer overflow in that tool. Effort is much > >> better focused on contemporary, maintained tools rather than > >> investigating issues in deprecated ones. Removing these tools would > >> happen in FreeBSD 15 only (no change in 14 or 13). > >> > >> Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 > >> > >> Note that this effort is limited to these maintenance tools only - > >> there is no change to kernel or gpart support for MBR or BSD > >> disklablel partitioning. That said, MBR partitioning and BSD > >> disklabels are best considered legacy formats and should be avoided > >> for new installations, if possible. > >> > >> If anyone is using fdisk and/or bsdlabel rather than gpart I would > >> appreciate knowing what is preventing you from using the contemporary > >> tools. > > > > > > nanobsd's legacy.sh still is using disklabel in two spots. > > > > But one is to just do gpart create -s bsd and the other is to display > it. Easy > > to fix, but even easier to delete legacy.sh entirely. It's not really > needed any > > more and was a product of CHS addressing... Now that we use LBA, it's > > better to use the new embedded ones. Even at $WORK where we kinda > > use legacy, we replace the partitioning stuff with our own custom > thing... > > > > Those are the only users in the tree, but not for long :) > > > > fdisk was good, but somewhere around the CHS -> LBA transition things > > got weird with it, and for really big disks there were reports of issue= s > that > > I could never encounter when I set out to fix them... Most likely due t= o > a > > mismatch in the CHS data and the LBA data being recorded in the MBR. > > The in-kernel gpart copes so much better. > > > > I wouldn't object to making these ports, but both these programs use > 'sekret' > > bits from the kernel that might not remain exposed as we clean things u= p. > > Though the IOCTLs they do (or used to do) may no longer be relevant. It= 's > > been so long that I've forgotten.... > > > > Warner > > > > --=20 Kevin Oberman, Part time kid herder and retired Network Engineer E-mail: rkoberman@gmail.com PGP Fingerprint: D03FB98AFA78E3B78C1694B318AB39EF1B055683 --000000000000872c64060fb95646 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Killing these would be excellent. I have not use= d either in many years for either MBR or GPT. The first time used gpart on = an MBR disc, I realized that fdisk and bsdlabel, which I'd always found= rather clunky, should die, but for years I kept seeing people claim that g= part was only for GPT and that fdisk/bsdlabel was the only way to do MBR. T= he name (gpt plus 2 letters) seemed to make this clear to some people. Hope= fully this has pretty much passed.

I do= want to open a bug report to fix up the documentation which fails to clari= fy the units of numeric arguments in gpart, though... bytes vs. blocks for = the most part.

On Wed, Jan 24, 2024 at 2:28=E2=80=AFPM George Mich= aelson <ggm@algebras.org> wro= te:
I would agre= e personally, to moving to ports (eg ports/sysutils) with
a DEPRECATED in the DESCR or something, or better yet a Make
invokation event to say "superceded, here is how to proceed against advice") or something.

-G

On Thu, Jan 25, 2024 at 3:30=E2=80=AFAM Warner Losh <imp@bsdimp.com> wrote:
>
> On Wed, Jan 24, 2024 at 8:45=E2=80=AFAM Ed Maste <emaste@freebsd.org> wrote: >>
>> MBR (PC BIOS) partition tables were historically maintained with >> fdisk(8), but gpart(8) has long been the preferred method for work= ing
>> with partition tables of all types. fdisk has been declared as
>> obsolete in the man page since 2015. Similarly BSD disklabels were=
>> historically maintained with bsdlabel. It does not yet have a
>> deprecation notice - I have proposed a man page addition in
>> https://reviews.freebsd.org/D43563.
>>
>> I would like to disconnect these from the build, and subsequently<= br> >> remove them. This is prompted by a recent bsdlabel bug report whic= h
>> uncovered a longstanding buffer overflow in that tool. Effort is m= uch
>> better focused on contemporary, maintained tools rather than
>> investigating issues in deprecated ones. Removing these tools woul= d
>> happen in FreeBSD 15 only (no change in 14 or 13).
>>
>> Code review to disconnect fdisk: https://reviews.freebsd.= org/D43575
>>
>> Note that this effort is limited to these maintenance tools only -=
>> there is no change to kernel or gpart support for MBR or BSD
>> disklablel partitioning. That said, MBR partitioning and BSD
>> disklabels are best considered legacy formats and should be avoide= d
>> for new installations, if possible.
>>
>> If anyone is using fdisk and/or bsdlabel rather than gpart I would=
>> appreciate knowing what is preventing you from using the contempor= ary
>> tools.
>
>
> nanobsd's legacy.sh still is using disklabel in two spots.
>
> But one is to just do gpart create -s bsd and the other is to display = it. Easy
> to fix, but even easier to delete legacy.sh entirely. It's not rea= lly needed any
> more and was a product of CHS addressing... Now that we use LBA, it= 9;s
> better to use the new embedded ones. Even at $WORK where we kinda
> use legacy, we replace the partitioning stuff with our own custom thin= g...
>
> Those are the only users in the tree, but not for long :)
>
> fdisk was good, but somewhere around the CHS -> LBA transition thin= gs
> got weird with it, and for really big disks there were reports of issu= es that
> I could never encounter when I set out to fix them... Most likely due = to a
> mismatch in the CHS data and the LBA data being recorded in the MBR. > The in-kernel gpart copes so much better.
>
> I wouldn't object to making these ports, but both these programs u= se 'sekret'
> bits from the kernel that might not remain exposed as we clean things = up.
> Though the IOCTLs they do (or used to do) may no longer be relevant. I= t's
> been so long that I've forgotten....
>
> Warner
>



--
Kevin= Oberman, Part time kid herder and retired Network Engineer
E-mail: rkoberman@gmail.com
--000000000000872c64060fb95646-- From nobody Wed Jan 24 23:41:30 2024 X-Original-To: freebsd-current@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 4TL0pp15RXz58x5k for ; Wed, 24 Jan 2024 23:41:38 +0000 (UTC) (envelope-from alfix86@gmail.com) Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL0pn1LGcz4nFN for ; Wed, 24 Jan 2024 23:41:37 +0000 (UTC) (envelope-from alfix86@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20230601 header.b=YPKAqP1b; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of alfix86@gmail.com designates 2a00:1450:4864:20::635 as permitted sender) smtp.mailfrom=alfix86@gmail.com Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-a31713c8bdbso7997366b.2 for ; Wed, 24 Jan 2024 15:41:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706139692; x=1706744492; darn=freebsd.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=k/F5j9FEwllhhEuH2omZEHeBkd+y8Nzm0wjL2FpIzVY=; b=YPKAqP1bfKzIyUKotFZInLsc+PLjkEAnOw+czH5NMJWuedj4QO4hAFRR3R8gIogPuT 9HoIdZJm6qg6Nd6apIzTjv6wDt0ljCpzxiupMZmCnR1YjZbOjTZ57AAD4QGtqNcqz14y Dln+6eC/LIrNrpZvTGogfd0qwVJGvD+KjXNAi3beimlAhoVzo1LXGAolQIHUFFmf3tvQ YBPUveiUz2K42U44muTTGdVUGa/MFaW4WytRWnn06QcvsB05QXK5gEaXl0FyNSaaPKLk TBYv/6qYOg1SWZ9dpOGuBp1TZ7M00jCBXLb/xJGoBIayE5L7WYXtgJ3mawnz6nCF0bqo 3v0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706139692; x=1706744492; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=k/F5j9FEwllhhEuH2omZEHeBkd+y8Nzm0wjL2FpIzVY=; b=LCIwZCXP94ED8n1cNMxlFKr4nyP/yTeccItNcoGbgvf5K0zBeJQpAi6bquQdBdsnsH ZnN+2ZEfKGsgUJU3avoDdwv4YG0IjjV/ahh6HSuoNZ1iIxkV2D8lqFaZEkC20Ver+nQ8 B5PDNul3XZKtqJhtvG9bpSRbwB9NHHFSw4nwp9CVmRMBtpTDsd5ZfuL7lKZwd7EQp/PX geqxeTTf3jjfEec6CZff9BTMivThZRLkkcHe70Li2Dm0fo1z8Noga9FnLN/pJY5s2xRT syilDGpNaE+VDkzB7Ys7FTTYm6oJvW/4+0LFLVddXOGH4qRZd6nFLpch+n/+xQHnnjGJ tJNw== X-Gm-Message-State: AOJu0YymS8j8O7dhrt7IpcIee6I0hKl5RU2yydghR6qH57o+hm0cI2WD 04L0sUzUF+iXrW5kZN8AOV2NjBd80uWVGvfYqTYPT3qc2zkb/LhDIghE/wPE X-Google-Smtp-Source: AGHT+IGIJF+2zrqOsWHTgIEtw9qTWnpwUF8VOSA/V1ig+zOsy0JPJLDwJrfRGCaPYCBa/C1IpXGiHg== X-Received: by 2002:a17:907:8693:b0:a2d:d05e:5704 with SMTP id qa19-20020a170907869300b00a2dd05e5704mr45003ejc.30.1706139691733; Wed, 24 Jan 2024 15:41:31 -0800 (PST) Received: from [192.168.1.11] (mob-5-91-95-237.net.vodafone.it. [5.91.95.237]) by smtp.gmail.com with ESMTPSA id s19-20020a17090699d300b00a2c70caccbasm379630ejn.107.2024.01.24.15.41.30 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 24 Jan 2024 15:41:31 -0800 (PST) Message-ID: <8ed4ff40-fd51-4499-82c4-b2b0755050d9@gmail.com> Date: Thu, 25 Jan 2024 00:41:30 +0100 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Error while linking bsdinstall To: freebsd-current@freebsd.org References: Content-Language: en-US From: "Alfonso S. Siciliano" In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.95 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.96)[-0.956]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36:c]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20230601]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; FROM_HAS_DN(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; TO_DN_NONE(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; MID_RHS_MATCH_FROM(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::635:from] X-Rspamd-Queue-Id: 4TL0pn1LGcz4nFN On 19/01/2024 18:33, Fernando Apesteguía wrote: > Hi all, > > I'm having a problem linking bsdinstall in current > dfe30e41967f9b5112c42ca20ec2c366db74cef9 > > ld: error: undefined symbol: bsddialog_clear > >>> referenced by part_wizard.c:76 > (/data/fernape_data/FreeBSD-repos/src/usr.sbin/bsdinstall/partedit/part_wizard.c:76) > >>>               part_wizard.o:(part_wizard) > >>> referenced by part_wizard.c:84 > (/data/fernape_data/FreeBSD-repos/src/usr.sbin/bsdinstall/partedit/part_wizard.c:84) > >>>               part_wizard.o:(part_wizard) > >>> referenced by partedit.c:126 > (/data/fernape_data/FreeBSD-repos/src/usr.sbin/bsdinstall/partedit/partedit.c:126) > >>>               partedit.o:(main) > cc: error: linker command failed with exit code 1 (use -v to see invocation) > *** Error code 1 > > Anything I forgot to do? This is in a branch that I had lingering that I > rebased with main without any issues. > > Thanks in advance. Hi, I seem partedit "wants" to link to the old libbsddialog version. bsddialog_clear() was added in 1.0, this version (the last) was imported in BASE on October. Probably a possible solution could be `make clean[dir]` in /data/fernape_data/FreeBSD-repos/src/lib/libbsddialog/. A more verbose error could tell what partedit "wants" (properly where) to link. Best Regards, Alfonso From nobody Wed Jan 24 23:47:32 2024 X-Original-To: freebsd-current@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 4TL0xv6ZHPz58xX2 for ; Wed, 24 Jan 2024 23:47:47 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL0xv2xh2z4pZL; Wed, 24 Jan 2024 23:47:47 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40ONlWP0099357; Wed, 24 Jan 2024 15:47:32 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40ONlWKZ099356; Wed, 24 Jan 2024 15:47:32 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: George Michaelson Date: Wed, 24 Jan 2024 15:47:32 -0800 (PST) CC: Warner Losh , Ed Maste , FreeBSD Current X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TL0xv2xh2z4pZL X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] > I would agree personally, to moving to ports (eg ports/sysutils) with > a DEPRECATED in the DESCR or something, or better yet a Make > invokation event to say "superceded, here is how to proceed against > advice") or something. They are totally useless as ports when your booted from install media and working from a standalone shell. These are the exact times you want things like fdisk and bsdlabel so you can figure out wtf is going on, and bsdinstall is NOT gona help you. I know there are a boat load of people that have built there own installers for VM's and stuff, running UFS and I bet you they are using MBR disks too. PLEASE do not kick these tiny little and very usable and pretty univeral (as far as I know ALL BSD's have fdisk and bsdlabel/disklabel) tools out of the base system. The world is NOT 2TB nvme drives with GPT, EFI and ZFS, yours might not be, but I am pretty certain I am not alone in this other world. > -G > > On Thu, Jan 25, 2024 at 3:30?AM Warner Losh wrote: > > > > On Wed, Jan 24, 2024 at 8:45?AM Ed Maste wrote: > >> > >> MBR (PC BIOS) partition tables were historically maintained with > >> fdisk(8), but gpart(8) has long been the preferred method for working > >> with partition tables of all types. fdisk has been declared as > >> obsolete in the man page since 2015. Similarly BSD disklabels were > >> historically maintained with bsdlabel. It does not yet have a > >> deprecation notice - I have proposed a man page addition in > >> https://reviews.freebsd.org/D43563. > >> > >> I would like to disconnect these from the build, and subsequently > >> remove them. This is prompted by a recent bsdlabel bug report which > >> uncovered a longstanding buffer overflow in that tool. Effort is much > >> better focused on contemporary, maintained tools rather than > >> investigating issues in deprecated ones. Removing these tools would > >> happen in FreeBSD 15 only (no change in 14 or 13). > >> > >> Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 > >> > >> Note that this effort is limited to these maintenance tools only - > >> there is no change to kernel or gpart support for MBR or BSD > >> disklablel partitioning. That said, MBR partitioning and BSD > >> disklabels are best considered legacy formats and should be avoided > >> for new installations, if possible. > >> > >> If anyone is using fdisk and/or bsdlabel rather than gpart I would > >> appreciate knowing what is preventing you from using the contemporary > >> tools. > > > > > > nanobsd's legacy.sh still is using disklabel in two spots. > > > > But one is to just do gpart create -s bsd and the other is to display it. Easy > > to fix, but even easier to delete legacy.sh entirely. It's not really needed any > > more and was a product of CHS addressing... Now that we use LBA, it's > > better to use the new embedded ones. Even at $WORK where we kinda > > use legacy, we replace the partitioning stuff with our own custom thing... > > > > Those are the only users in the tree, but not for long :) > > > > fdisk was good, but somewhere around the CHS -> LBA transition things > > got weird with it, and for really big disks there were reports of issues that > > I could never encounter when I set out to fix them... Most likely due to a > > mismatch in the CHS data and the LBA data being recorded in the MBR. > > The in-kernel gpart copes so much better. > > > > I wouldn't object to making these ports, but both these programs use 'sekret' > > bits from the kernel that might not remain exposed as we clean things up. > > Though the IOCTLs they do (or used to do) may no longer be relevant. It's > > been so long that I've forgotten.... > > > > Warner -- Rod Grimes rgrimes@freebsd.org From nobody Wed Jan 24 23:53:53 2024 X-Original-To: freebsd-current@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 4TL15H6d9tz58yKf for ; Wed, 24 Jan 2024 23:54:11 +0000 (UTC) (envelope-from pmh@hausen.com) Received: from mail2.pluspunkthosting.de (mail2.pluspunkthosting.de [217.29.33.228]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL15H3xLrz4sZc for ; Wed, 24 Jan 2024 23:54:11 +0000 (UTC) (envelope-from pmh@hausen.com) Authentication-Results: mx1.freebsd.org; none Received: from smtpclient.apple (87.138.185.145) by mail2.pluspunkthosting.de (Axigen) with (ECDHE-RSA-AES256-GCM-SHA384 encrypted) ESMTPSA id 172B25; Thu, 25 Jan 2024 00:54:04 +0100 Content-Type: text/plain; charset=us-ascii List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) From: "Patrick M. Hausen" In-Reply-To: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> Date: Thu, 25 Jan 2024 00:53:53 +0100 Cc: FreeBSD Current Content-Transfer-Encoding: quoted-printable Message-Id: References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> To: "Rodney W. Grimes" X-Mailer: Apple Mail (2.3774.300.61.1.2) X-Rspamd-Queue-Id: 4TL15H3xLrz4sZc X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16188, ipnet:217.29.32.0/20, country:DE] Hi all, > Am 25.01.2024 um 00:47 schrieb Rodney W. Grimes = : >=20 >> I would agree personally, to moving to ports (eg ports/sysutils) with >> a DEPRECATED in the DESCR or something, or better yet a Make >> invokation event to say "superceded, here is how to proceed against >> advice") or something. >=20 > They are totally useless as ports when your booted from install > media and working from a standalone shell. These are the exact > times you want things like fdisk and bsdlabel so you can figure > out wtf is going on, and bsdinstall is NOT gona help you. >=20 > I know there are a boat load of people that have built there > own installers for VM's and stuff, running UFS and I bet you > they are using MBR disks too. PLEASE do not kick these tiny > little and very usable and pretty univeral (as far as I know > ALL BSD's have fdisk and bsdlabel/disklabel) tools out of > the base system. >=20 > The world is NOT 2TB nvme drives with GPT, EFI and ZFS, > yours might not be, but I am pretty certain I am not > alone in this other world. I totally undestand that point, but what exactly do these tools do that gpart cannot? On MBR disks? With BSD partitions? Ever since I found out that gpart can manage *all* on-disk partition = formats I have not been using anything else. You can create your MBR partitions and BSD labels just fine with gpart. At least in all situations I = encountered, there might of course be edge cases I simply don't know. gpart is not the "GPT partition tool". It's the universal swiss army = knife "GEOM partition tool" for all disk partitioning in any format supported. Kind regards, Patrick= From nobody Thu Jan 25 05:07:36 2024 X-Original-To: freebsd-current@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 4TL8311mkGz57kdx for ; Thu, 25 Jan 2024 05:07:41 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL8304YnLz4WR8; Thu, 25 Jan 2024 05:07:40 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; none Received: from shw-obgw-4003a.ext.cloudfilter.net ([10.228.9.183]) by cmsmtp with ESMTPS id SagQrzLGuGAIJSrxjry6ok; Thu, 25 Jan 2024 05:07:39 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id SrxhrYv2u0nMNSrxirrkML; Thu, 25 Jan 2024 05:07:39 +0000 X-Authority-Analysis: v=2.4 cv=Qcx1A+Xv c=1 sm=1 tr=0 ts=65b1ec9b a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=kj9zAlcOel0A:10 a=dEuoMetlWLkA:10 a=iKhvJSA4AAAA:8 a=7Qk2ozbKAAAA:8 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=EkcXrb_YAAAA:8 a=ADQM9SYy-IARRP2Jqu8A:9 a=CjuIK1q_8ugA:10 a=odh9cflL3HIXMm4fY7Wr:22 a=1lyxoWkJIXJV6VJUPhuM:22 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTP id B59CF306; Wed, 24 Jan 2024 21:07:36 -0800 (PST) Received: by slippy.cwsent.com (Postfix, from userid 1000) id A11871AC; Wed, 24 Jan 2024 21:07:36 -0800 (PST) X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.8+dev Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: "Rodney W. Grimes" cc: George Michaelson , Warner Losh , Ed Maste , FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-reply-to: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> Comments: In-reply-to "Rodney W. Grimes" message dated "Wed, 24 Jan 2024 15:47:32 -0800." List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 24 Jan 2024 21:07:36 -0800 Message-Id: <20240125050736.A11871AC@slippy.cwsent.com> X-CMAE-Envelope: MS4xfNlZ/A1I86hsxxRIIzsrJIefdbpI5tHzWVFwZnGSNmVzBO4YGoertr9NVMRfbSGiDMAK4EdyXwXY8y21Lo4PpAuk+AOLDLw+EqedIiKov/3Wwpix975f enmIMGxch/54d/TLgGaHByyqUKOK4Qsh7Bltf7xAI/4yctGXGhd22mGWUQ56YDgnjBvMtYOeZ4H9xPjZe/P/eYDLkM5W5hldGMOWdJv2uprXsfSL/fjoVqTo FxwlKrJ2wWWz8ZfkYnlG7iDhEloFfQBeKUp2H9h4i9zxcWrGwIop3J7BZSwWxH3r+v20pUa4ih+mKrSsSiNCRE3L4+HqZJQoxeqsPwzDeRY= X-Rspamd-Queue-Id: 4TL8304YnLz4WR8 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US] In message <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net>, "Rodney W. Grimes" writes: > > I would agree personally, to moving to ports (eg ports/sysutils) with > > a DEPRECATED in the DESCR or something, or better yet a Make > > invokation event to say "superceded, here is how to proceed against > > advice") or something. > > They are totally useless as ports when your booted from install > media and working from a standalone shell. These are the exact > times you want things like fdisk and bsdlabel so you can figure > out wtf is going on, and bsdinstall is NOT gona help you. This is certainly a good point. > > I know there are a boat load of people that have built there > own installers for VM's and stuff, running UFS and I bet you > they are using MBR disks too. PLEASE do not kick these tiny > little and very usable and pretty univeral (as far as I know > ALL BSD's have fdisk and bsdlabel/disklabel) tools out of > the base system. > > The world is NOT 2TB nvme drives with GPT, EFI and ZFS, > yours might not be, but I am pretty certain I am not > alone in this other world. > > > -G > > > > On Thu, Jan 25, 2024 at 3:30?AM Warner Losh wrote: > > > > > > On Wed, Jan 24, 2024 at 8:45?AM Ed Maste wrote: > > >> > > >> MBR (PC BIOS) partition tables were historically maintained with > > >> fdisk(8), but gpart(8) has long been the preferred method for working > > >> with partition tables of all types. fdisk has been declared as > > >> obsolete in the man page since 2015. Similarly BSD disklabels were > > >> historically maintained with bsdlabel. It does not yet have a > > >> deprecation notice - I have proposed a man page addition in > > >> https://reviews.freebsd.org/D43563. > > >> > > >> I would like to disconnect these from the build, and subsequently > > >> remove them. This is prompted by a recent bsdlabel bug report which > > >> uncovered a longstanding buffer overflow in that tool. Effort is much > > >> better focused on contemporary, maintained tools rather than > > >> investigating issues in deprecated ones. Removing these tools would > > >> happen in FreeBSD 15 only (no change in 14 or 13). > > >> > > >> Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 > > >> > > >> Note that this effort is limited to these maintenance tools only - > > >> there is no change to kernel or gpart support for MBR or BSD > > >> disklablel partitioning. That said, MBR partitioning and BSD > > >> disklabels are best considered legacy formats and should be avoided > > >> for new installations, if possible. > > >> > > >> If anyone is using fdisk and/or bsdlabel rather than gpart I would > > >> appreciate knowing what is preventing you from using the contemporary > > >> tools. > > > > > > > > > nanobsd's legacy.sh still is using disklabel in two spots. > > > > > > But one is to just do gpart create -s bsd and the other is to display it. > Easy > > > to fix, but even easier to delete legacy.sh entirely. It's not really nee > ded any > > > more and was a product of CHS addressing... Now that we use LBA, it's > > > better to use the new embedded ones. Even at $WORK where we kinda > > > use legacy, we replace the partitioning stuff with our own custom thing.. > . > > > > > > Those are the only users in the tree, but not for long :) > > > > > > fdisk was good, but somewhere around the CHS -> LBA transition things > > > got weird with it, and for really big disks there were reports of issues > that > > > I could never encounter when I set out to fix them... Most likely due to > a > > > mismatch in the CHS data and the LBA data being recorded in the MBR. > > > The in-kernel gpart copes so much better. > > > > > > I wouldn't object to making these ports, but both these programs use 'sek > ret' > > > bits from the kernel that might not remain exposed as we clean things up. > > > Though the IOCTLs they do (or used to do) may no longer be relevant. It's > > > been so long that I've forgotten.... > > > > > > Warner > -- > Rod Grimes rgrimes@freebsd.or > g > -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org e^(i*pi)+1=0 From nobody Thu Jan 25 05:26:06 2024 X-Original-To: freebsd-current@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 4TL8SJ6LBlz57mNj for ; Thu, 25 Jan 2024 05:26:08 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL8SJ5m5pz4Yby for ; Thu, 25 Jan 2024 05:26:08 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; none Received: from shw-obgw-4004a.ext.cloudfilter.net ([10.228.9.227]) by cmsmtp with ESMTPS id SfeLrzb86GAIJSsFcry89s; Thu, 25 Jan 2024 05:26:08 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id SsFar9wndWIKPSsFbrU3dg; Thu, 25 Jan 2024 05:26:08 +0000 X-Authority-Analysis: v=2.4 cv=D+pUl9dj c=1 sm=1 tr=0 ts=65b1f0f0 a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=kj9zAlcOel0A:10 a=dEuoMetlWLkA:10 a=FcEumLz-AAAA:8 a=iKhvJSA4AAAA:8 a=YxBL1-UpAAAA:8 a=6I5d2MoRAAAA:8 a=EkcXrb_YAAAA:8 a=NKPrw1LhZS0A0Dez2xMA:9 a=CjuIK1q_8ugA:10 a=F5mQQbX521Z6qs-qo50H:22 a=odh9cflL3HIXMm4fY7Wr:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=IjZwj45LgO3ly-622nXo:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTP id 827812BD; Wed, 24 Jan 2024 21:26:06 -0800 (PST) Received: by slippy.cwsent.com (Postfix, from userid 1000) id 79C13D2; Wed, 24 Jan 2024 21:26:06 -0800 (PST) X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.8+dev Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: "Patrick M. Hausen" cc: "Rodney W. Grimes" , FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-reply-to: References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> Comments: In-reply-to "Patrick M. Hausen" message dated "Thu, 25 Jan 2024 00:53:53 +0100." List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 24 Jan 2024 21:26:06 -0800 Message-Id: <20240125052606.79C13D2@slippy.cwsent.com> X-CMAE-Envelope: MS4xfJVQNcYWQ7FpTTovTISmQ1FaiCTKPTbfQoNMVqjo/PqFt5+tsEYWB+ygKvKVfValPSxvrc13VLg5p8TE70Bf4fUSNr1pcN7+t1c225AoJ6FFSjUAs7tA a7ujUMNJoIG60NV5oe9WDAToGZ44YOkWUJxXLPdkMIORWYvAcDEaADlJT7vn5CLK+VeRQEAluqhFA/cL/VR/Y+8PyvqmVsls9qRocZ8o6x++26Q8+eaHmCnR 3gq3EG1+lC7IOpCK69IFSrXghF1kFrzuvb4y6Fs725g= X-Rspamd-Queue-Id: 4TL8SJ5m5pz4Yby X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US] In message , "Patrick M. Hause n" writes: > Hi all, > > > Am 25.01.2024 um 00:47 schrieb Rodney W. Grimes = > : > >=20 > >> I would agree personally, to moving to ports (eg ports/sysutils) with > >> a DEPRECATED in the DESCR or something, or better yet a Make > >> invokation event to say "superceded, here is how to proceed against > >> advice") or something. > >=20 > > They are totally useless as ports when your booted from install > > media and working from a standalone shell. These are the exact > > times you want things like fdisk and bsdlabel so you can figure > > out wtf is going on, and bsdinstall is NOT gona help you. > >=20 > > I know there are a boat load of people that have built there > > own installers for VM's and stuff, running UFS and I bet you > > they are using MBR disks too. PLEASE do not kick these tiny > > little and very usable and pretty univeral (as far as I know > > ALL BSD's have fdisk and bsdlabel/disklabel) tools out of > > the base system. > >=20 > > The world is NOT 2TB nvme drives with GPT, EFI and ZFS, > > yours might not be, but I am pretty certain I am not > > alone in this other world. > > I totally undestand that point, but what exactly do these tools do that > gpart cannot? On MBR disks? With BSD partitions? > > Ever since I found out that gpart can manage *all* on-disk partition = > formats > I have not been using anything else. You can create your MBR partitions > and BSD labels just fine with gpart. At least in all situations I = > encountered, > there might of course be edge cases I simply don't know. On occasion when trying to manipulate a disk label, gpart will refuse to. Usually when creating or manipulating a label on a zvol one doesn't want to use on the host system, that is destined to be used in a VM. It's simpler to create the partitions and labels beforehand, attach the zvol to the VM, boot and install (or test) within the VM. In this case one doesn't even care if geom sees the "disk" or its partitions on the host because the "disk" is destined for use in a VM. I've created zvols for use by various VMs in this manner. I agree with Rod's remark that when one is in panic mode working through a difficult situation extra tools, not fewer, can help. Regarding extra tools, I do maintain a full copy of FreeBSD on a USB disk, in order to recover from catastrophic situations. They're extremely rare, the last of which was the result of a commit that broke loader (or was it a boot blocks -- I can't remember the exact details anymore) in 12 or 13-CURRENT. The extra tools came in handy as I worked through the mess. > > gpart is not the "GPT partition tool". It's the universal swiss army = > knife > "GEOM partition tool" for all disk partitioning in any format supported. > > Kind regards, > Patrick= > -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org e^(i*pi)+1=0 From nobody Thu Jan 25 05:28:44 2024 X-Original-To: freebsd-current@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 4TL8WZ0w3nz57mYX for ; Thu, 25 Jan 2024 05:28:58 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL8WY60Nqz4ZXx for ; Thu, 25 Jan 2024 05:28:57 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-557dcb0f870so7718420a12.2 for ; Wed, 24 Jan 2024 21:28:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706160536; x=1706765336; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2EnfXe+X+FrIDLBweawqwTSslO0pKOQ0pLss9RQ40NA=; b=j7SIghHg/lyn4b8eGnpjLncdACHIEnjAKq9ImKh9vAzV7ML/wbB/ljObBB8+YTSgHs DLijr0XMH31bedrKNAIh5gZ3nboKvwPtO1bZ/9WC5vEpFQCt34TiqWA4+Cm0LavSG2Q7 oaW/wDXt9DTPUR6Lm+roTKYY68Sp9yggSNTVwBZgXjelai74TZYKHD+lmsOWmH78SlgJ 9fDLVFK+iODeaRGx8Ty0lROMo/8AdOoNbpk20tjWAAQ/9y1rZwH5SZhStdBivcx/IuJ4 jK5TmlHtWCU2DJG222/jkRgMbRx0hwoCDvhgBsBnfCoNffmxQ9e4JOKv0DmZ8F3Fep0D iHHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706160536; x=1706765336; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=2EnfXe+X+FrIDLBweawqwTSslO0pKOQ0pLss9RQ40NA=; b=HhPmJCWiMsPlQQLynrmSdd+0Ts40CgpLdYRIpy6IAE8lIBl24IPEU65rYMUvtxLjpl MPwKtTwb1eicsOcdzTuDvnxWHgf+ZOen6GZvygTP4Cc4sX0/hP7glVP8VoOx57/9UJPu Pyqfy4PDcaQ30Db8pmQk7kM5COrRkY5baYiywRawTsaat7V1iN2HYt+4FkA06xlmZCyN l00ofa46DALlo1zp1NE1ZzFk0SamJ1T/bE7PJ4346bhtiC3d8Nrcwpy4A1GuftEWqqj9 q9LQFE3+jeDPUIY6ZjD/mCSY1EA9QxZhh2AhZWr0VzFhmURsJzBE6vwb7iRf9ExMvbt1 ticA== X-Gm-Message-State: AOJu0YxCCzU7UbWaV7AhowbaWl8pWwQTY/xr9w1pD/euh8JFzswzi3/n 48Yg50t4VS6BvbKb2jRfOx+KUTf2vJ90HaPewrCdWsgSWRHdDjlcERZjL8kYXwRL6OWEWKuN6YY T/ecYi82s7OhcqbWeDrjAcJ/3TXosPtS7BLuwZi0jlIlash92Tn4= X-Google-Smtp-Source: AGHT+IHqJor39+j5wgOsQn9oTeRYsVTJbFesVw7ZPB0n4KwRhb5slGnQBd8peOepdlvPXqg1e1MB+pzFDFmQe5R0EHw= X-Received: by 2002:a50:d598:0:b0:559:d75f:4902 with SMTP id v24-20020a50d598000000b00559d75f4902mr232350edi.74.1706160536197; Wed, 24 Jan 2024 21:28:56 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> <20240125050736.A11871AC@slippy.cwsent.com> In-Reply-To: <20240125050736.A11871AC@slippy.cwsent.com> From: Warner Losh Date: Wed, 24 Jan 2024 22:28:44 -0700 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Cy Schubert Cc: "Rodney W. Grimes" , George Michaelson , Ed Maste , FreeBSD Current Content-Type: multipart/alternative; boundary="000000000000b0adc9060fbe7411" X-Rspamd-Queue-Id: 4TL8WY60Nqz4ZXx X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000b0adc9060fbe7411 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 24, 2024, 10:07=E2=80=AFPM Cy Schubert wrote: > In message <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net>, "Rodney W. > Grimes" > writes: > > > I would agree personally, to moving to ports (eg ports/sysutils) with > > > a DEPRECATED in the DESCR or something, or better yet a Make > > > invokation event to say "superceded, here is how to proceed against > > > advice") or something. > > > > They are totally useless as ports when your booted from install > > media and working from a standalone shell. These are the exact > > times you want things like fdisk and bsdlabel so you can figure > > out wtf is going on, and bsdinstall is NOT gona help you. > > This is certainly a good point. > What can they do that gpart can't do? Warner > > > > > I know there are a boat load of people that have built there > > own installers for VM's and stuff, running UFS and I bet you > > they are using MBR disks too. PLEASE do not kick these tiny > > little and very usable and pretty univeral (as far as I know > > ALL BSD's have fdisk and bsdlabel/disklabel) tools out of > > the base system. > > > > The world is NOT 2TB nvme drives with GPT, EFI and ZFS, > > yours might not be, but I am pretty certain I am not > > alone in this other world. > > > > > -G > > > > > > On Thu, Jan 25, 2024 at 3:30?AM Warner Losh wrote: > > > > > > > > On Wed, Jan 24, 2024 at 8:45?AM Ed Maste wrote= : > > > >> > > > >> MBR (PC BIOS) partition tables were historically maintained with > > > >> fdisk(8), but gpart(8) has long been the preferred method for > working > > > >> with partition tables of all types. fdisk has been declared as > > > >> obsolete in the man page since 2015. Similarly BSD disklabels were > > > >> historically maintained with bsdlabel. It does not yet have a > > > >> deprecation notice - I have proposed a man page addition in > > > >> https://reviews.freebsd.org/D43563. > > > >> > > > >> I would like to disconnect these from the build, and subsequently > > > >> remove them. This is prompted by a recent bsdlabel bug report whic= h > > > >> uncovered a longstanding buffer overflow in that tool. Effort is > much > > > >> better focused on contemporary, maintained tools rather than > > > >> investigating issues in deprecated ones. Removing these tools woul= d > > > >> happen in FreeBSD 15 only (no change in 14 or 13). > > > >> > > > >> Code review to disconnect fdisk: https://reviews.freebsd.org/D4357= 5 > > > >> > > > >> Note that this effort is limited to these maintenance tools only - > > > >> there is no change to kernel or gpart support for MBR or BSD > > > >> disklablel partitioning. That said, MBR partitioning and BSD > > > >> disklabels are best considered legacy formats and should be avoide= d > > > >> for new installations, if possible. > > > >> > > > >> If anyone is using fdisk and/or bsdlabel rather than gpart I would > > > >> appreciate knowing what is preventing you from using the > contemporary > > > >> tools. > > > > > > > > > > > > nanobsd's legacy.sh still is using disklabel in two spots. > > > > > > > > But one is to just do gpart create -s bsd and the other is to > display it. > > Easy > > > > to fix, but even easier to delete legacy.sh entirely. It's not > really nee > > ded any > > > > more and was a product of CHS addressing... Now that we use LBA, it= 's > > > > better to use the new embedded ones. Even at $WORK where we kinda > > > > use legacy, we replace the partitioning stuff with our own custom > thing.. > > . > > > > > > > > Those are the only users in the tree, but not for long :) > > > > > > > > fdisk was good, but somewhere around the CHS -> LBA transition thin= gs > > > > got weird with it, and for really big disks there were reports of > issues > > that > > > > I could never encounter when I set out to fix them... Most likely > due to > > a > > > > mismatch in the CHS data and the LBA data being recorded in the MBR= . > > > > The in-kernel gpart copes so much better. > > > > > > > > I wouldn't object to making these ports, but both these programs us= e > 'sek > > ret' > > > > bits from the kernel that might not remain exposed as we clean > things up. > > > > Though the IOCTLs they do (or used to do) may no longer be relevant= . > It's > > > > been so long that I've forgotten.... > > > > > > > > Warner > > -- > > Rod Grimes > rgrimes@freebsd.or > > g > > > > > -- > Cheers, > Cy Schubert > FreeBSD UNIX: Web: https://FreeBSD.org > NTP: Web: https://nwtime.org > > e^(i*pi)+1=3D0 > > > --000000000000b0adc9060fbe7411 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


In message <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net>, = "Rodney W.
Grimes"
writes:
> > I would agree personally, to moving to ports (eg ports/sysutils) = with
> > a DEPRECATED in the DESCR or something, or better yet a Make
> > invokation event to say "superceded, here is how to proceed = against
> > advice") or something.
>
> They are totally useless as ports when your booted from install
> media and working from a standalone shell.=C2=A0 These are the exact > times you want things like fdisk and bsdlabel so you can figure
> out wtf is going on, and bsdinstall is NOT gona help you.

This is certainly a good point.

What can they do that gpart can't do?

Warner

>
> I know there are a boat load of people that have built there
> own installers for VM's and stuff, running UFS and I bet you
> they are using MBR disks too.=C2=A0 PLEASE do not kick these tiny
> little and very usable and pretty univeral (as far as I know
> ALL BSD's have fdisk and bsdlabel/disklabel) tools out of
> the base system.
>
> The world is NOT 2TB nvme drives with GPT, EFI and ZFS,
> yours might not be, but I am pretty certain I am not
> alone in this other world.
>
> > -G
> >
> > On Thu, Jan 25, 2024 at 3:30?AM Warner Losh <imp@bsdimp.com>= ; wrote:
> > >
> > > On Wed, Jan 24, 2024 at 8:45?AM Ed Maste <emaste@freebsd.= org> wrote:
> > >>
> > >> MBR (PC BIOS) partition tables were historically maintai= ned with
> > >> fdisk(8), but gpart(8) has long been the preferred metho= d for working
> > >> with partition tables of all types. fdisk has been decla= red as
> > >> obsolete in the man page since 2015. Similarly BSD diskl= abels were
> > >> historically maintained with bsdlabel. It does not yet h= ave a
> > >> deprecation notice - I have proposed a man page addition= in
> > >> https://reviews.freebsd.org/D43563.
> > >>
> > >> I would like to disconnect these from the build, and sub= sequently
> > >> remove them. This is prompted by a recent bsdlabel bug r= eport which
> > >> uncovered a longstanding buffer overflow in that tool. E= ffort is much
> > >> better focused on contemporary, maintained tools rather = than
> > >> investigating issues in deprecated ones. Removing these = tools would
> > >> happen in FreeBSD 15 only (no change in 14 or 13).
> > >>
> > >> Code review to disconnect fdisk:
htt= ps://reviews.freebsd.org/D43575
> > >>
> > >> Note that this effort is limited to these maintenance to= ols only -
> > >> there is no change to kernel or gpart support for MBR or= BSD
> > >> disklablel partitioning. That said, MBR partitioning and= BSD
> > >> disklabels are best considered legacy formats and should= be avoided
> > >> for new installations, if possible.
> > >>
> > >> If anyone is using fdisk and/or bsdlabel rather than gpa= rt I would
> > >> appreciate knowing what is preventing you from using the= contemporary
> > >> tools.
> > >
> > >
> > > nanobsd's legacy.sh still is using disklabel in two spot= s.
> > >
> > > But one is to just do gpart create -s bsd and the other is t= o display it.
>=C2=A0 Easy
> > > to fix, but even easier to delete legacy.sh entirely. It'= ;s not really nee
> ded any
> > > more and was a product of CHS addressing... Now that we use = LBA, it's
> > > better to use the new embedded ones. Even at $WORK where we = kinda
> > > use legacy, we replace the partitioning stuff with our own c= ustom thing..
> .
> > >
> > > Those are the only users in the tree, but not for long :) > > >
> > > fdisk was good, but somewhere around the CHS -> LBA trans= ition things
> > > got weird with it, and for really big disks there were repor= ts of issues
> that
> > > I could never encounter when I set out to fix them... Most l= ikely due to
> a
> > > mismatch in the CHS data and the LBA data being recorded in = the MBR.
> > > The in-kernel gpart copes so much better.
> > >
> > > I wouldn't object to making these ports, but both these = programs use 'sek
> ret'
> > > bits from the kernel that might not remain exposed as we cle= an things up.
> > > Though the IOCTLs they do (or used to do) may no longer be r= elevant. It's
> > > been so long that I've forgotten....
> > >
> > > Warner
> --
> Rod Grimes=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0rgrimes@freebsd.or
> g
>


--
Cheers,
Cy Schubert <Cy.Schubert@cschubert.com>
FreeBSD UNIX:=C2=A0 <cy@FreeBSD.org>=C2=A0 =C2=A0Web:=C2=A0 ht= tps://FreeBSD.org
NTP:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<cy@nwtime.org>=C2=A0 =C2= =A0 Web:=C2=A0 https://nwtime.org

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 e^(i*pi)+1=3D0


--000000000000b0adc9060fbe7411-- From nobody Thu Jan 25 05:50:19 2024 X-Original-To: freebsd-current@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 4TL90G2hwZz57p5j for ; Thu, 25 Jan 2024 05:50:22 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TL90G0QhPz4cVk; Thu, 25 Jan 2024 05:50:22 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; none Received: from shw-obgw-4003a.ext.cloudfilter.net ([10.228.9.183]) by cmsmtp with ESMTPS id ScTJrzPkLGAIJSsd3ry9gY; Thu, 25 Jan 2024 05:50:21 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id Ssd2rZ3j10nMNSsd2rrmIl; Thu, 25 Jan 2024 05:50:21 +0000 X-Authority-Analysis: v=2.4 cv=Qcx1A+Xv c=1 sm=1 tr=0 ts=65b1f69d a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=kj9zAlcOel0A:10 a=dEuoMetlWLkA:10 a=iKhvJSA4AAAA:8 a=YxBL1-UpAAAA:8 a=6I5d2MoRAAAA:8 a=EkcXrb_YAAAA:8 a=F9ww8NI8pRhu131V0AgA:9 a=CjuIK1q_8ugA:10 a=odh9cflL3HIXMm4fY7Wr:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=IjZwj45LgO3ly-622nXo:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTP id DDFCC334; Wed, 24 Jan 2024 21:50:19 -0800 (PST) Received: by slippy.cwsent.com (Postfix, from userid 1000) id CCF1973; Wed, 24 Jan 2024 21:50:19 -0800 (PST) X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.8+dev Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Warner Losh cc: Cy Schubert , "Rodney W. Grimes" , George Michaelson , Ed Maste , FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-reply-to: References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> <20240125050736.A11871AC@slippy.cwsent.com> Comments: In-reply-to Warner Losh message dated "Wed, 24 Jan 2024 22:28:44 -0700." List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 24 Jan 2024 21:50:19 -0800 Message-Id: <20240125055019.CCF1973@slippy.cwsent.com> X-CMAE-Envelope: MS4xfDhF37KbYW33J5GFNBIeUhgds1SEoiCDXdU7Eb39rNLs5YxvTtl4F+Ttrsw2xaDjVNyp/QTL8SYI3+Wxlw+uQ7j+zGvQR5VYGUAaSlBjkbQ7nt3f3vkX IdGpjjiYODrzd/0pI4/VUwmuyAnGNdV8td8MevVVH8y8SImaLJ4/vwZvtCo7s0ZyvFsdumag8Z16qClQvTbauIRG+3taiui7wsBjvVBq67uDmAPZK08tSCoA uXldayCqLjAGJh9P07vEQ0KnNUwlZhQ0mFZcF/OtMT7vss2/ZPUb2LdNsmYh6lcHhEmRrf5JwH0jjk87gsudq+DabefelzmRfWVcYVd4rH0= X-Rspamd-Queue-Id: 4TL90G0QhPz4cVk X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US] In message , Warner Losh writes: > --000000000000b0adc9060fbe7411 > Content-Type: text/plain; charset="UTF-8" > Content-Transfer-Encoding: quoted-printable > > On Wed, Jan 24, 2024, 10:07=E2=80=AFPM Cy Schubert om> > wrote: > > > In message <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net>, "Rodney W. > > Grimes" > > writes: > > > > I would agree personally, to moving to ports (eg ports/sysutils) with > > > > a DEPRECATED in the DESCR or something, or better yet a Make > > > > invokation event to say "superceded, here is how to proceed against > > > > advice") or something. > > > > > > They are totally useless as ports when your booted from install > > > media and working from a standalone shell. These are the exact > > > times you want things like fdisk and bsdlabel so you can figure > > > out wtf is going on, and bsdinstall is NOT gona help you. > > > > This is certainly a good point. > > > > What can they do that gpart can't do? This was quite a while ago, booted off my recovery USB attempting to repair some self caused damage. The ability to edit (vi) a file with starting addresses and lengths, visually using bsdlabel, was suited to my panicked state as I worked to recover the machine. A visual view of columns of a bsdlabel, editing a label using vi, checking and double checking numbers before committing them is handy.The visual format and the ability to adjust the numbers in an editor before committing them is handy. You can't do this with gpart, as it's transactional. And bsdinstall doesn't give one the opportunity to check the numbers in detail on a console before committing them. Maybe a good GSoC project may be to replace bsdlabel's driect writes to disk with geom calls. Though, t doesn't need to be bsdlabel, but some kind of utility that displays the existing label in an editor session where changes can be made, using the editor, and committed. This could even be an enhancement to bsdinstall: call it expert mode or whatever. -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org e^(i*pi)+1=0 From nobody Thu Jan 25 06:44:22 2024 X-Original-To: freebsd-current@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 4TLBBj0F4rz57tdf for ; Thu, 25 Jan 2024 06:44:29 +0000 (UTC) (envelope-from ale@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLBBh6v2Xz4jKr; Thu, 25 Jan 2024 06:44:28 +0000 (UTC) (envelope-from ale@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706165069; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9tPN7RLkRYAl582T8YEOeUsigz2UGTc30CPd615PL2s=; b=t7hZ7GwpJgheU/DNgWgq8jx8OliEjtzTWqKky7ns5UnUGXbODawfswLlDRJjrAPIfMSogZ SBlj7WHe5pPMlkhokaveZ+O78UllxmCiPOLbEMgFoEe9/+HD9ocub7YxigbXqTL+rGnzSO 71l+/JZJc8dfEUMNMeKVyc0nzptHjJclTdCricU7SddKnwUuejf0o2xC53sWfhrSt1Siib YN4we8poQ4MLDF9eULX69ua5twz91CzfmHol8dvRpuCUA+2kRWCVlhCT8eOOzGi+W5ZwPS PInrh5x1jMUcPyBW8tuwLkhsR/E3zrevfEGqN24QJdhd66UHZLG2igyHHFY4IQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706165069; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9tPN7RLkRYAl582T8YEOeUsigz2UGTc30CPd615PL2s=; b=dFResIxsIILlyG8jHJ9Q1B3cttOtz8BT//p4sPXhr878WvSGhrhyBF4XSsIRDvIt30lt/9 d6JnTXX/+DQT/cKb1fNpNNLebY+WjLPcfLQWg4AYCI3m5ZP/JXE+u1kMNs7aWflkiDHmHD atFYNaHQMVPFglGFB1dypeMRc9h2gpzG8yGXLHIWlyhUh35zxPzY6wV7peU6Zv2t9VIGce D2LxeaZQI+hBT/g7EEQIVZ5JEeU9etz67Dw1l4H0WzRrWR3t6e6yZdaP6pQCnsBRSa5SlB /U3LT5kekAsF4gcqdC/TrEZ4t5aTXg31A/aHCUi1to8TFpIP6DjUBXMY70rflA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1706165069; a=rsa-sha256; cv=none; b=icPaXoenPHg6dboF8hdnbRo4LXnfdtxkeQSOKVzqzFo1pk08UrER8Hi+pYwjyEeOxZ0nkU B0YEqMlFOvVuAd6AEruyamlv5acZs5MBDVNJzW7sHEtEWmGhCAMZwWh0wRTq7KBv8oeBQ5 9yqAHHqNPsJW1QFcLa9kzMPkrtkrcHLYTLsr4oqV2o1I8eRyFMwt76xt7eW6CVAzZyRwok e8kPn/zWoD2lDlyFp5qp4ix6VshGoZ7PXWz2VXdGKCui9AM2fPSXMLLvhm6GgV18l67An2 51k5qKbp+FGIjyxwlXKEnw94pUPXdGMLV6eSDvlgHgCgXP4FZhF8imWYhoNkpA== Received: from [192.168.178.18] (lab.alexdupre.com [93.151.207.39]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: ale) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TLBBh3mzzz18jw; Thu, 25 Jan 2024 06:44:28 +0000 (UTC) (envelope-from ale@FreeBSD.org) Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Ed Maste , FreeBSD Current References: From: Alex Dupre Message-ID: Date: Thu, 25 Jan 2024 07:44:22 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 SeaMonkey/2.53.18.1 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Ed Maste wrote: > I would like to disconnect these from the build, and subsequently > remove them. I'm in favour of this change. Having different tools (some modern and updated, others deprecated and limited) in base to do the same task can confuse the users. If possible move them to ports for people still using them, with a clear deprecation warning. --=20 Alex Dupre From nobody Thu Jan 25 07:34:54 2024 X-Original-To: freebsd-current@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 4TLCK24SYTz57ymp for ; Thu, 25 Jan 2024 07:35:02 +0000 (UTC) (envelope-from zlei@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLCK23dTrz41vS; Thu, 25 Jan 2024 07:35:02 +0000 (UTC) (envelope-from zlei@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706168102; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=yYrn/Il+8RcaTnhBhOnueVY1EtssCQSyCQCA4KLUsFg=; b=OrEljjgG3e/CpyhCTaxOXxWaHJYcQaFfhc97KiebNMq6dZHXHq4U1v3FC0qqGPFIa04FM1 zvAIGyZMRvATW/+dtlDuoUdmfG6G5VWwgvDE/IcxkTt+7sbez2UnlFrvjGU0cUckJwB4Jc T42G39FHWa8Y3U0udaIiZHIh+ba1BI95PXO83ufRIoAjGcxNpdrpPhXT6UY9NDOcyWe3Au 9ziQKFzR7h5+a+CicGoWMs9vDQD/ZRz416K3Md6lsRQncukb5FsYn1YL/c1q/is8zGLpVJ XQmToRrejA09QfcUfSCS3KPePaWFTiRgV0GBjSjtrUuCleqQsHXjwWVFukREyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706168102; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=yYrn/Il+8RcaTnhBhOnueVY1EtssCQSyCQCA4KLUsFg=; b=vhWKEzCBYhn1S9QA/R+FpFUnBtFMpPGhGymnoyNjoPZg4wVwV5WoUV20BWdo2XKY4yPddF 63eSbQ4dph1PX9hQKmR78n+uMPpedStLp9TUUbDQRV8taMFsn2jxkSgT1WJOF2Fh3kflb8 2AvM4tyvBl1bri95XB+qowgU4oDWg/ZWIlT7ZNluuiCddxhoJc+DCoeeVVVTVc1IL7nN0h zcGVBjMhe7uM4JmOmyonlcAfksHFTKKiC6fctZoVriwT0GFGA0GaD8J+C4/YLUdO9flqxS XgG7T5qu9SS+xiejgYQsHzmrrM1y6yUC1julr7JG71RlQC9bdJXt0yNfdhgAfg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1706168102; a=rsa-sha256; cv=none; b=PnX+J1X9Uv27b9B8u7VbmvHr8bxysHhqRZUNo5kYfCjN4bdjBV7pqOAJw0vh3hb4aE14/T u4W5TsYaDOXNzhSUo/54v0eNl2L/3mw2Z03ZWzZ+2SePkH55aCH3txUGvCPWL4YjED3qNj jKVFVlmcDu5jt5kz3k3k+It+dbAldfpzzgF29hPCJteV+1p/tqSj/92JSNP9dXWdNFgwJC szIyiMc8xr98mLdddwQneZEhG6dymZyHWLWYVL+AXMGiNFB4ScshPrcsfO/8Xc2AMOxL60 ftd3hOGemXUTS914/f5gOsliHulCCQ5DK3zN/hGLljZDPuC3GU6cfn0MFBmFVw== Received: from smtpclient.apple (ns1.oxydns.net [45.32.91.63]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: zlei/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TLCK14QZRz19M6; Thu, 25 Jan 2024 07:35:01 +0000 (UTC) (envelope-from zlei@FreeBSD.org) From: Zhenlei Huang Message-Id: <36DAFC0F-EDB2-49D9-94D5-60CBEEB360EC@FreeBSD.org> Content-Type: multipart/alternative; boundary="Apple-Mail=_B4A4F3A9-C4DF-46FD-A4B0-F9B310A17810" List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.4\)) Subject: Re: loading vmm.ko crashes main-n267684-e4b646ce1610 Date: Thu, 25 Jan 2024 15:34:54 +0800 In-Reply-To: <8db9d82d-37a8-472a-adbf-4565748adac4@app.fastmail.com> Cc: freebsd-current@freebsd.org To: void References: <8db9d82d-37a8-472a-adbf-4565748adac4@app.fastmail.com> X-Mailer: Apple Mail (2.3696.120.41.1.4) --Apple-Mail=_B4A4F3A9-C4DF-46FD-A4B0-F9B310A17810 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On Jan 24, 2024, at 8:47 AM, void wrote: >=20 > Hello, >=20 > Loading vmm either via vmm_load=3DYES in /boot/loader.conf or > manually via kldload vmm crashes the system to db> prompt > as shown in the link below: >=20 > http://void.f-m.fm.user.fm/Screenshot_20240122_135539.png >=20 > Thing is, access is via a html5 console with no up/down scrolling > or buffer. Nothing can be entered into the db> prompt. There's plenty > more information when it crashes, but the output scrolls off the top. >=20 > The main-n267684 is running a modified GENERIC-NODEBUG > kernel and has debugging turned off in /etc/src.conf=20 > (it has WITHOUT_ASSERT_DEBUG=3D and WITHOUT_DEBUG_FILES=3D and=20 > WITH_MALLOC_PRODUCTION=3D) >=20 > Apart from turning these on again and rebuilding GENERIC, what other = things > need to be set to get a usable coredump when this happens? You may want to configure the dump device before get the coredump. See = https://docs.freebsd.org/en/books/developers-handbook/kerneldebug/#kerneld= ebug-obtain = . >=20 > /var/crash has nothing in it. >=20 > thanks in advance for any assistance > --=20 >=20 Best regards, Zhenlei --Apple-Mail=_B4A4F3A9-C4DF-46FD-A4B0-F9B310A17810 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii

On Jan 24, 2024, at 8:47 AM, void <void@f-m.fm> = wrote:

Hello,

Loading vmm either via = vmm_load=3DYES in /boot/loader.conf or
manually via = kldload vmm crashes the system to db> prompt
as shown = in the link below:

http://void.f-m.fm.user.fm/Screenshot_20240122_135539.png
Thing is, access is via a html5 console with = no up/down scrolling
or buffer. Nothing can be entered = into the db> prompt. There's plenty
more information = when it crashes, but the output scrolls off the top.

The main-n267684 is running a modified GENERIC-NODEBUG
kernel and has debugging turned off in /etc/src.conf
(it has WITHOUT_ASSERT_DEBUG=3D and WITHOUT_DEBUG_FILES=3D = and
WITH_MALLOC_PRODUCTION=3D)

Apart from turning these on again and rebuilding GENERIC, = what other things
need to be set to get a usable coredump = when this happens?

You may want to configure the dump device before = get the coredump.


/var/crash has nothing in it.

thanks in advance for any assistance
--


Best regards,
Zhenlei

= --Apple-Mail=_B4A4F3A9-C4DF-46FD-A4B0-F9B310A17810-- From nobody Thu Jan 25 09:43:18 2024 X-Original-To: freebsd-current@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 4TLG9C3dCjz58BZp for ; Thu, 25 Jan 2024 09:43:27 +0000 (UTC) (envelope-from olce@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLG9C3611z4FFQ; Thu, 25 Jan 2024 09:43:27 +0000 (UTC) (envelope-from olce@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706175807; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=eJhLCYn5G2O63wJklAc3irKt6nbCkSn00PSj2tDPG2s=; b=GXE/tK2G6YrguU6LVZrOzKvA7rkP1xvi5R7dYNqZYZv8cho6l2Y1FGYFKBuCQVFQmAokjA kTMO9ZMTOmWtSVDY6qsPK+FyPvJryxYSpngHhXubV1d7s0J0k0nr+wWqXWzteBHkOK4Wnn o3EGaN0zKYLm2xafIh3tZVNFiVP938G91mC/ovUqw08X9he/m2xeWVG00DCnKeT3KBTbTD KEP9+oaIvd2t+tQcXewXFINAhmR3VdFP6cf/LH4EJDwIgxn5mzDkA/UZqkG4cwzy0xccfI 7qca65UXogRQz/shlSs6n3u/MAiJ34iMYsK5MJ4fHyUVFVhxogUo4IXdNtqorg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706175807; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=eJhLCYn5G2O63wJklAc3irKt6nbCkSn00PSj2tDPG2s=; b=lMXln6G+vo6ok70ZOpIQ6J44DjrPXvWAvu6pIAmld0XUVxFIgAT6hQ/XoGrGl9XqJdzw1B jnTaLzZnRQ2Mw98efsAtGRaM1Qo1xS2MsF2b3/Bo6TE9k2UNF1sPGZpx72Jg3dftdiHZfS 5HboufyfdFhcQ0F5BKmawpfE8sYnfzhndxBdRHTd7rDOXCp/qhAK3rQA6GhWZKqE40M2so YI8cn9AANVmiRLDFBojYevgvIz1Eq+z2W9fhygwWlq6uC7WL7yC898nZc4h9JNiJYwg1cR iSAj7ZSKzdYA61GpgF4B2p8OdwO8dt1DjQZwc3ifgpu7gc3sE6RdcMwjdY+37g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1706175807; a=rsa-sha256; cv=none; b=iWasyeKbbSh1rm152yjNZbBwj6bqmgxGpcoFE7ySQh3A9MSQLyKFfa4bLqIijtAU5kOVE6 fQ2UXlLbjV5nTpBPuxFQJWQoiqRP/8mHyqiH4Mt6tqm5ZLpkn91Jl9C5Wrzzn4gwzkcbSJ jxDQzm7XasA4x+gkpHCS2KbNIj7KISLEIO65g9L7pV4eilm24jNtoXAiHUrHoaOMwttuPz yxLJeQDxFOWyMQIzVZtwohoFtBxVtpBJHfqZixSiwm0ucxFaSRrfPy7AaT97F0drStdB3f TMgOnmggWiIXteWMhz1zfrcGfQN9EMa93aQoR6VffX5s5GmnQkpn97sOUzyK5Q== Received: from ravel.localnet (lfbn-nic-1-525-172.w90-118.abo.wanadoo.fr [90.118.140.172]) (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) (Authenticated sender: olce/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TLG9B3LR2z1CjF; Thu, 25 Jan 2024 09:43:26 +0000 (UTC) (envelope-from olce@freebsd.org) From: Olivier Certner To: Cy Schubert Cc: Warner Losh , "Rodney W. Grimes" , George Michaelson , Ed Maste , FreeBSD Current , Cy Schubert Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Date: Thu, 25 Jan 2024 10:43:18 +0100 Message-ID: <2369865.bDOn7JOVgO@ravel> In-Reply-To: <20240125055019.CCF1973@slippy.cwsent.com> References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> <20240125055019.CCF1973@slippy.cwsent.com> List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart5823302.8T7jmnknE8"; micalg="pgp-sha384"; protocol="application/pgp-signature" --nextPart5823302.8T7jmnknE8 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="UTF-8"; protected-headers="v1" From: Olivier Certner To: Cy Schubert Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Date: Thu, 25 Jan 2024 10:43:18 +0100 Message-ID: <2369865.bDOn7JOVgO@ravel> In-Reply-To: <20240125055019.CCF1973@slippy.cwsent.com> MIME-Version: 1.0 Hi, > A visual view of columns of a bsdlabel, editing a label using vi, checking > and double checking numbers before committing them is handy.The visual > format and the ability to adjust the numbers in an editor before committing > them is handy. You can't do this with gpart, as it's transactional. And > bsdinstall doesn't give one the opportunity to check the numbers in detail > on a console before committing them. You seem to want to be able to stack a number of modifications before actually pushing them. Actually, gpart(8) already can do that! Please see the "OPERATIONAL FLAGS" section in gpart(8). In between your tentative modifications, just use 'gpart show' to see where you stand. Thanks and regards. -- Olivier Certner --nextPart5823302.8T7jmnknE8 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part. Content-Transfer-Encoding: 7Bit -----BEGIN PGP SIGNATURE----- iQIzBAABCQAdFiEEmNCxHjkosai0LYIujKEwQJceJicFAmWyLTYACgkQjKEwQJce Jid8hg/+NebZSAHpZ+4sdsCHTYUOlD/sglD36rsXrJpXsVJPtsnHiIxZxuJ+znve pWs9t9nuRqnLN9t9c+W8raGUrUcf/AeK6Y0Xys24SQorgT2vVM/qYB/uDipLUHn/ ubrrBuyzaS2GOuHlaJrQ7sjuOptuyIybrdBUwmQQvxaPG03Saurkd0gs0HRYCWvs i+4siHbF0mn35zMlF5vgx45y4SMFudyZaNZeIpNsno0VN6T7CLlNzSckKDFJkOW8 33IbsqbLRRYOkYVeTlWTH1dxw5k7Wnef5I17T6CQ0/xMKjAR/Gy9LvCnU1J2S4lS aqu0Qk/Ozo/vBTHlhsKqnt8yUkb/nSu+58wXM2noVbEwmBv2EWJ1zL/vwbO4zKnE mB5IqkYRHOPb0BjSh3/3SsmRYrlpxz+lTH2iLmOqyB5TKQTk+DF50BqP4dLy2UvM 10MxNoEmZJlR3eZT0nxoMUIepWy9L9PeVHSUOtC7N+UQeVgka8V5q5EwiFbk7Up5 tFUMFQJYEcf0q0P1jPg/tvgWp4PuNd2gpKmS2Hlh56Qo9dapF992f1zc44QF3mHv hfMejXm8FrEfTPZpCU++W8JGyIOQpIj2FvlKeROmKqTDTaPy8h+kqbFyPub6dbLM mQ0nPvdAEjA+a4AlZ4MZX7eS/F3VwhVsgTgHsHo3Phcynk54rPg= =ubys -----END PGP SIGNATURE----- --nextPart5823302.8T7jmnknE8-- From nobody Thu Jan 25 09:57:57 2024 X-Original-To: freebsd-current@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 4TLGV334WGz58CPm for ; Thu, 25 Jan 2024 09:58:03 +0000 (UTC) (envelope-from SRS0=/AfJ=JD=quip.cz=000.fbsd@elsa.codelab.cz) Received: from elsa.codelab.cz (elsa.codelab.cz [94.124.105.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLGV30wGRz4HBG; Thu, 25 Jan 2024 09:58:02 +0000 (UTC) (envelope-from SRS0=/AfJ=JD=quip.cz=000.fbsd@elsa.codelab.cz) Authentication-Results: mx1.freebsd.org; none Received: from elsa.codelab.cz (localhost [127.0.0.1]) by elsa.codelab.cz (Postfix) with ESMTP id 54800D78A8; Thu, 25 Jan 2024 10:58:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quip.cz; s=private; t=1706176680; bh=M622S6m7LFKPiNjp8EBSIxEc5JtCEQvL2vUGvQg0z80=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=ioGb7XblzZHkTcYKqS0UjciItEa5o1stACg/IiNePYBN4Y8fTqPGdHqfFKfL//9nl cn2T3E+odavFFP1/f8g3ZM+jeeymQQ8xciDwafM19JLbE7Syco5J2OJHkEkeFVa4ug 2UDXLumI6kHMvtNhNP4Dpg9Oj9AOACRZxBSLq2Eo= Received: from [192.168.145.49] (ip-89-177-27-225.bb.vodafone.cz [89.177.27.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by elsa.codelab.cz (Postfix) with ESMTPSA id E84B6D7899; Thu, 25 Jan 2024 10:57:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quip.cz; s=private; t=1706176679; bh=M622S6m7LFKPiNjp8EBSIxEc5JtCEQvL2vUGvQg0z80=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=aKDgnr2qVg8oXhDH0GE5BTHgusqHEbLrD89EO6F2Tnc0yTYOvKhw/8bwtm6iB1zyN Cju924vWfLAaod0EU58ZtOdU9XC4zITwCwp08rHxGwWK6z+lzgB7EuteGt0mn/NvCK LpT1lpDdFl4V/ssuDgQeaz5/HeeaxCeSWL+ZGPpk= Message-ID: <84c6f3b1-58b3-44f8-aeaf-35f78e05975d@quip.cz> Date: Thu, 25 Jan 2024 10:57:57 +0100 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Content-Language: en-US To: Cy Schubert , Warner Losh Cc: "Rodney W. Grimes" , George Michaelson , Ed Maste , FreeBSD Current References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> <20240125050736.A11871AC@slippy.cwsent.com> <20240125055019.CCF1973@slippy.cwsent.com> From: Miroslav Lachman <000.fbsd@quip.cz> In-Reply-To: <20240125055019.CCF1973@slippy.cwsent.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4TLGV30wGRz4HBG X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:42000, ipnet:94.124.104.0/21, country:CZ] On 25/01/2024 06:50, Cy Schubert wrote: > In message > >> What can they do that gpart can't do? > > This was quite a while ago, booted off my recovery USB attempting to repair > some self caused damage. The ability to edit (vi) a file with starting > addresses and lengths, visually using bsdlabel, was suited to my panicked > state as I worked to recover the machine. > > A visual view of columns of a bsdlabel, editing a label using vi, checking > and double checking numbers before committing them is handy.The visual > format and the ability to adjust the numbers in an editor before committing > them is handy. You can't do this with gpart, as it's transactional. And > bsdinstall doesn't give one the opportunity to check the numbers in detail > on a console before committing them. If you really like your editor of choice to edit partition table, you can use gpart backup and gpart restore like this: gpart backup ada0 > ada0.part vi ada0.part gpart restore -F -l < ada0.part > Maybe a good GSoC project may be to replace bsdlabel's driect writes to > disk with geom calls. Though, t doesn't need to be bsdlabel, but some kind > of utility that displays the existing label in an editor session where > changes can be made, using the editor, and committed. This could even be an > enhancement to bsdinstall: call it expert mode or whatever. Manipulating partition table in editor session can be achieved by few lines of shell script as a wrapper around gpart backup & gpart restore. Kind regards Miroslav Lachman From rmd@orbit.in-berlin.de Thu Jan 25 10:06:43 2024 X-Original-To: freebsd-current@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 4TLGh86N4Pz58Ctl for ; Thu, 25 Jan 2024 10:06:48 +0000 (UTC) (envelope-from rmd@orbit.in-berlin.de) Received: from einhorn-mail-out.in-berlin.de (einhorn.in-berlin.de [192.109.42.8]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mail.in-berlin.de", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLGh74S3Xz4KbM for ; Thu, 25 Jan 2024 10:06:47 +0000 (UTC) (envelope-from rmd@orbit.in-berlin.de) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of rmd@orbit.in-berlin.de designates 192.109.42.8 as permitted sender) smtp.mailfrom=rmd@orbit.in-berlin.de X-Envelope-From: rmd@orbit.in-berlin.de X-Envelope-To: Received: from authenticated.user (localhost [127.0.0.1]) by einhorn.in-berlin.de with ESMTPSA id 40PA6ho72587021 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Thu, 25 Jan 2024 11:06:43 +0100 Received: from lviv.imp.fu-berlin.de (lviv.imp.fu-berlin.de [160.45.110.47]) by webmail.in-berlin.de (Horde Framework) with HTTPS; Thu, 25 Jan 2024 11:06:43 +0100 Date: Thu, 25 Jan 2024 11:06:43 +0100 Message-ID: <20240125110643.Horde.JYLuEs0B1_NKsaMRkxZ-TbP@webmail.in-berlin.de> From: "Rolf M. Dietze" To: freebsd-current@freebsd.org Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> <20240125050736.A11871AC@slippy.cwsent.com> <20240125055019.CCF1973@slippy.cwsent.com> In-Reply-To: <20240125055019.CCF1973@slippy.cwsent.com> User-Agent: Horde Application Framework 5 Content-Type: text/plain; charset=utf-8; format=flowed; DelSp=Yes List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Disposition: inline X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.50 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-0.997]; R_SPF_ALLOW(-0.20)[+ip4:192.109.42.0/24]; MIME_GOOD(-0.10)[text/plain]; RCVD_IN_DNSWL_LOW(-0.10)[192.109.42.8:from]; RWL_MAILSPIKE_GOOD(-0.10)[192.109.42.8:from]; RCPT_COUNT_ONE(0.00)[1]; ASN(0.00)[asn:29670, ipnet:192.109.42.0/24, country:DE]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; DMARC_NA(0.00)[orbit.in-berlin.de]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; R_DKIM_NA(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; ARC_NA(0.00)[] X-Rspamd-Queue-Id: 4TLGh74S3Xz4KbM Quoting Cy Schubert : > In message om> > , Warner Losh writes: >> --000000000000b0adc9060fbe7411 >> Content-Type: text/plain; charset="UTF-8" >> Content-Transfer-Encoding: quoted-printable >> >> On Wed, Jan 24, 2024, 10:07=E2=80=AFPM Cy Schubert > om> >> wrote: >> >> > In message <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net>, "Rodney W. >> > Grimes" >> > writes: >> > > > I would agree personally, to moving to ports (eg ports/sysutils) with >> > > > a DEPRECATED in the DESCR or something, or better yet a Make >> > > > invokation event to say "superceded, here is how to proceed against >> > > > advice") or something. >> > > >> > > They are totally useless as ports when your booted from install >> > > media and working from a standalone shell. These are the exact >> > > times you want things like fdisk and bsdlabel so you can figure >> > > out wtf is going on, and bsdinstall is NOT gona help you. >> > >> > This is certainly a good point. >> > >> >> What can they do that gpart can't do? > > This was quite a while ago, booted off my recovery USB attempting to repair > some self caused damage. The ability to edit (vi) a file with starting > addresses and lengths, visually using bsdlabel, was suited to my panicked > state as I worked to recover the machine. > > A visual view of columns of a bsdlabel, editing a label using vi, checking > and double checking numbers before committing them is handy.The visual > format and the ability to adjust the numbers in an editor before committing > them is handy. You can't do this with gpart, as it's transactional. And > bsdinstall doesn't give one the opportunity to check the numbers in detail > on a console before committing them. > > Maybe a good GSoC project may be to replace bsdlabel's driect writes to > disk with geom calls. Though, t doesn't need to be bsdlabel, but some kind > of utility that displays the existing label in an editor session where > changes can be made, using the editor, and committed. This could even be an > enhancement to bsdinstall: call it expert mode or whatever. well, I'v been there many times. There is another regular usecase, this time for fdisk for me, that ist repairing a windows boot disk. I have no idea of waht to use if not fdisk to do that, rather than booting linux to run fdisk for windows repairs. That in fact would be the only linux box, only to support windows... /rmd From nobody Thu Jan 25 10:09:12 2024 X-Original-To: freebsd-current@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 4TLGl14C3Fz58DQT for ; Thu, 25 Jan 2024 10:09:17 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLGl11YkHz4LgF; Thu, 25 Jan 2024 10:09:17 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; none Received: from shw-obgw-4001a.ext.cloudfilter.net ([10.228.9.142]) by cmsmtp with ESMTPS id SwQDr0e6YGAIJSwfbryI7u; Thu, 25 Jan 2024 10:09:15 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id SwfZrYJy8ZR3lSwfarDhDZ; Thu, 25 Jan 2024 10:09:15 +0000 X-Authority-Analysis: v=2.4 cv=Lo2Bd1Rc c=1 sm=1 tr=0 ts=65b2334b a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=kj9zAlcOel0A:10 a=dEuoMetlWLkA:10 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=VxmjJ2MpAAAA:8 a=EkcXrb_YAAAA:8 a=qh4DO4SwyRYOGC7Ow7kA:9 a=CjuIK1q_8ugA:10 a=kkVwv0u_FqAA:10 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=7gXAzLPJhVmCkEl4_tsf:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTP id 2D1D838F; Thu, 25 Jan 2024 02:09:13 -0800 (PST) Received: by slippy.cwsent.com (Postfix, from userid 1000) id F06C6AC; Thu, 25 Jan 2024 02:09:12 -0800 (PST) X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.8+dev Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Olivier Certner cc: Cy Schubert , Warner Losh , "Rodney W. Grimes" , George Michaelson , Ed Maste , FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-reply-to: <2369865.bDOn7JOVgO@ravel> References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> <20240125055019.CCF1973@slippy.cwsent.com> <2369865.bDOn7JOVgO@ravel> Comments: In-reply-to Olivier Certner message dated "Thu, 25 Jan 2024 10:43:18 +0100." List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Thu, 25 Jan 2024 02:09:12 -0800 Message-Id: <20240125100912.F06C6AC@slippy.cwsent.com> X-CMAE-Envelope: MS4xfGtw3ZqQpjIXUlgdqtyS8BVqLFhJpBmFDMAkDAnN7F+nL7gpfZY3qoxTBsmA64E+FFmojrVt9UmDiY+yPupGr9oIQ0GqJxeyv+rU9TQeyo7M0Yp5wQkT 6WUBglxMC9i5JbO36k4nw8aYQ+gHdRF5BknM86cAWy217zOsgOnMaMmirtQ+dIZxb/dYwB1VdumUc/ikET2qLI+1PttUg0PramiBhfmlQSgxhJDiAWgmbynT ofCsY2um0ftBplr0ovxRDRlBMgJQ8Nj3FFzskew/TIhzt3VeNn3C3ca0HfJt3BP2qIqoyuC2buYsCB0gTbvxgP8qyILYp6iMBb5SQjrDf3Yq3HAGFMYNlw5O sC1Mca4x X-Rspamd-Queue-Id: 4TLGl11YkHz4LgF X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US] In message <2369865.bDOn7JOVgO@ravel>, Olivier Certner writes: > --nextPart5823302.8T7jmnknE8 > Content-Transfer-Encoding: 7Bit > Content-Type: text/plain; charset="UTF-8"; protected-headers="v1" > From: Olivier Certner > To: Cy Schubert > Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) > Date: Thu, 25 Jan 2024 10:43:18 +0100 > Message-ID: <2369865.bDOn7JOVgO@ravel> > In-Reply-To: <20240125055019.CCF1973@slippy.cwsent.com> > MIME-Version: 1.0 > > Hi, > > > A visual view of columns of a bsdlabel, editing a label using vi, checking > > and double checking numbers before committing them is handy.The visual > > format and the ability to adjust the numbers in an editor before committing > > > them is handy. You can't do this with gpart, as it's transactional. And > > bsdinstall doesn't give one the opportunity to check the numbers in detail > > on a console before committing them. > > You seem to want to be able to stack a number of modifications before actuall > y pushing them. Actually, gpart(8) already can do that! Please see the "OPE > RATIONAL FLAGS" section in gpart(8). > > In between your tentative modifications, just use 'gpart show' to see where y > ou stand. gpart(8) should have a vi mode. That is different than having changes pending and committing them. A person is still entering commands rather than doing something like editing a spreadsheet, which is what editing a file is kind-of like. Even something like, gpart show ada0s2 > some_file vi some_file gpart batch ada0s2 < some_file -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org e^(i*pi)+1=0 From nobody Thu Jan 25 10:13:08 2024 X-Original-To: freebsd-current@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 4TLGqW5PWdz58DbG for ; Thu, 25 Jan 2024 10:13:11 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLGqW4nKqz4MvB; Thu, 25 Jan 2024 10:13:11 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; none Received: from shw-obgw-4002a.ext.cloudfilter.net ([10.228.9.250]) by cmsmtp with ESMTPS id Sv5fr0ak4GAIJSwjPryIDb; Thu, 25 Jan 2024 10:13:11 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id SwjNrnAYywbmvSwjOrufsb; Thu, 25 Jan 2024 10:13:11 +0000 X-Authority-Analysis: v=2.4 cv=O6wqATxW c=1 sm=1 tr=0 ts=65b23437 a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=kj9zAlcOel0A:10 a=dEuoMetlWLkA:10 a=YxBL1-UpAAAA:8 a=6I5d2MoRAAAA:8 a=EkcXrb_YAAAA:8 a=ozEGpfOSB-jdFw0aaS0A:9 a=CjuIK1q_8ugA:10 a=Ia-lj3WSrqcvXOmTRaiG:22 a=IjZwj45LgO3ly-622nXo:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTP id D50B0346; Thu, 25 Jan 2024 02:13:08 -0800 (PST) Received: by slippy.cwsent.com (Postfix, from userid 1000) id 92E931A6; Thu, 25 Jan 2024 02:13:08 -0800 (PST) X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.8+dev Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Miroslav Lachman <000.fbsd@quip.cz> cc: Cy Schubert , Warner Losh , "Rodney W. Grimes" , George Michaelson , Ed Maste , FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-reply-to: <84c6f3b1-58b3-44f8-aeaf-35f78e05975d@quip.cz> References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> <20240125050736.A11871AC@slippy.cwsent.com> <20240125055019.CCF1973@slippy.cwsent.com> <84c6f3b1-58b3-44f8-aeaf-35f78e05975d@quip.cz> Comments: In-reply-to Miroslav Lachman <000.fbsd@quip.cz> message dated "Thu, 25 Jan 2024 10:57:57 +0100." List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Thu, 25 Jan 2024 02:13:08 -0800 Message-Id: <20240125101308.92E931A6@slippy.cwsent.com> X-CMAE-Envelope: MS4xfC8whGAaPK+SWYox7Fu3lExTT+BoTIlAdyU1INF300rvCbRFfomHd3XOBCbhQitkuNcHJkS1JqFKXv0Qh68t6uuCapmIC0uYMKJw475/J6OcN2ryIeY2 h/AuqLXr3SiCuC1sEJv/yK6eFRfqDIxfOv4X4il1CMykApRZeFAtPBpreqg+ZgAIC+WmZ6fy18ffpuShyObU69l9AhzFRnxWkF4wFRuvrnEkImtsS8gX0Q9F fhvTN5tV8j6T7sNKtk2auatdcCSrgDuXqQhlPcn8LD1EZEIGxqk6+gu+1BDLL2uxOEFkypzmemsXHnkYoXSRZX412SGpNf81m7GU//rwe5UQEVDMTJ5JwB/D 0i617QS9 X-Rspamd-Queue-Id: 4TLGqW4nKqz4MvB X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US] In message <84c6f3b1-58b3-44f8-aeaf-35f78e05975d@quip.cz>, Miroslav Lachman wri tes: > On 25/01/2024 06:50, Cy Schubert wrote: > > In message c > > > >> > >> What can they do that gpart can't do? > > > > This was quite a while ago, booted off my recovery USB attempting to repair > > some self caused damage. The ability to edit (vi) a file with starting > > addresses and lengths, visually using bsdlabel, was suited to my panicked > > state as I worked to recover the machine. > > > > A visual view of columns of a bsdlabel, editing a label using vi, checking > > and double checking numbers before committing them is handy.The visual > > format and the ability to adjust the numbers in an editor before committing > > them is handy. You can't do this with gpart, as it's transactional. And > > bsdinstall doesn't give one the opportunity to check the numbers in detail > > on a console before committing them. > > If you really like your editor of choice to edit partition table, you > can use gpart backup and gpart restore like this: > > gpart backup ada0 > ada0.part > vi ada0.part > gpart restore -F -l < ada0.part That would work. > > > Maybe a good GSoC project may be to replace bsdlabel's driect writes to > > disk with geom calls. Though, t doesn't need to be bsdlabel, but some kind > > of utility that displays the existing label in an editor session where > > changes can be made, using the editor, and committed. This could even be an > > enhancement to bsdinstall: call it expert mode or whatever. > > Manipulating partition table in editor session can be achieved by few > lines of shell script as a wrapper around gpart backup & gpart restore. Or just build a gpart edit mode with the functions used to implement backup and restore. Excellent idea. Thank you. A small project to work on. > > Kind regards > Miroslav Lachman -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org e^(i*pi)+1=0 From nobody Thu Jan 25 15:01:45 2024 X-Original-To: freebsd-current@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 4TLPDg0Cxgz57QGh for ; Thu, 25 Jan 2024 15:01:55 +0000 (UTC) (envelope-from void@f-m.fm) Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) (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 4TLPDd0DLKz4nT1 for ; Thu, 25 Jan 2024 15:01:52 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=f-m.fm header.s=fm3 header.b=rKmreb+K; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=BUnCbE5+; dmarc=pass (policy=none) header.from=f-m.fm; spf=pass (mx1.freebsd.org: domain of void@f-m.fm designates 66.111.4.28 as permitted sender) smtp.mailfrom=void@f-m.fm Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailout.nyi.internal (Postfix) with ESMTP id 2FCA25C014E for ; Thu, 25 Jan 2024 10:01:48 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Thu, 25 Jan 2024 10:01:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1706194908; x=1706281308; bh=BOuZdTrELw 728y/2NOdpT6mTng49dvhUprOUeLqNF20=; b=rKmreb+KcT0W27zyz+G5kUtwgO TQzEB16qFrWwvroi0KgR1ZfyJJQZAHWt1m3fXAKAmpzFNMd8dMSbtthDt21ZCNrd YJsoLU94dI3o2oV/wgLIuUtozEOzzQzOVGg91FN1+K/nhAoanRLzM/wDSdA581/r B+xnIl226oSBsNFdTTn1d/Gx2RFAf0odApdH0QK1MUxc7vxRxZ0J16+zmnHMiEbC 74wtRdhRF7F/xqQtuBRkxVFsSVHjjwDdXEVFo2tymog7MNmjsGEWmWRpAnqcn4rg vDwqL9+CtvIFxWcqeXLmqWEE72hhdYhPDe6uj1xNBotYZ0f/795weNedvRsA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1706194908; x=1706281308; bh=BOuZdTrELw728y/2NOdpT6mTng49 dvhUprOUeLqNF20=; b=BUnCbE5+XweZS88NEp1B2Febghy7icR5pst/Yp74LQ1T 5IgZspVmNl4NTbZcyhGla+5TclIE7LKh2HlrLVHyR77/fEwLnzjTR81z+QUu3A6H +sPJQU0Q5Mf7LjElgcUdTQjCopN6R6pblax1JXuCwAGzm75xUVeTDStvrXDr/YrV pOKn1rQREeeB58BucNAiP/x3yzPmO5BGqATa2zwthg66ru4EWvoz9JZAfAPJfN5G s61tCpxs8e3Chhfa1EcIMUxTl8JpSm0lPLt+Y336/CY0Ma3BxwuaP63iD0yxyk99 qXuZiFyyC5t1T6UwUemHTzYif66S2KKvfo89JbV/Ew== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdelgedggeegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpeffhffvuffkfhggtggujgesthdtre dttddtvdenucfhrhhomhepvhhoihguuceovhhoihgusehfqdhmrdhfmheqnecuggftrfgr thhtvghrnheptdfhheeuteejudffkefhtdfhfeekgedtvdeiteevgfejtdfgfeffhfeuie eltdeinecuffhomhgrihhnpehfrhgvvggsshgurdhorhhgnecuvehluhhsthgvrhfuihii vgeptdenucfrrghrrghmpehmrghilhhfrhhomhepvhhoihgusehfqdhmrdhfmh X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Thu, 25 Jan 2024 10:01:47 -0500 (EST) Date: Thu, 25 Jan 2024 15:01:45 +0000 From: void To: freebsd-current@freebsd.org Subject: Re: loading vmm.ko crashes main-n267684-e4b646ce1610 Message-ID: Mail-Followup-To: freebsd-current@freebsd.org References: <8db9d82d-37a8-472a-adbf-4565748adac4@app.fastmail.com> <36DAFC0F-EDB2-49D9-94D5-60CBEEB360EC@FreeBSD.org> List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <36DAFC0F-EDB2-49D9-94D5-60CBEEB360EC@FreeBSD.org> X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.64 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.94)[-0.941]; DMARC_POLICY_ALLOW(-0.50)[f-m.fm,none]; MID_RHS_NOT_FQDN(0.50)[]; R_SPF_ALLOW(-0.20)[+ip4:66.111.4.28]; R_DKIM_ALLOW(-0.20)[f-m.fm:s=fm3,messagingengine.com:s=fm3]; RWL_MAILSPIKE_GOOD(-0.10)[66.111.4.28:from]; RCVD_IN_DNSWL_LOW(-0.10)[66.111.4.28:from]; MIME_GOOD(-0.10)[text/plain]; FREEMAIL_FROM(0.00)[f-m.fm]; RCVD_TLS_LAST(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_THREE(0.00)[3]; RCPT_COUNT_ONE(0.00)[1]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; FREEMAIL_ENVFROM(0.00)[f-m.fm]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; TO_DN_NONE(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DKIM_TRACE(0.00)[f-m.fm:+,messagingengine.com:+]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; ASN(0.00)[asn:19151, ipnet:66.111.4.0/24, country:US]; RCVD_VIA_SMTP_AUTH(0.00)[]; MISSING_XM_UA(0.00)[]; DWL_DNSWL_NONE(0.00)[messagingengine.com:dkim] X-Rspamd-Queue-Id: 4TLPDd0DLKz4nT1 On Thu, Jan 25, 2024 at 03:34:54PM +0800, Zhenlei Huang wrote: > >You may want to configure the dump device before get the coredump. >See https://docs.freebsd.org/en/books/developers-handbook/kerneldebug/#kerneldebug-obtain . Thanks -- From nobody Thu Jan 25 15:38:02 2024 X-Original-To: freebsd-current@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 4TLQ2d3xR6z57Tjm for ; Thu, 25 Jan 2024 15:38:17 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com [209.85.167.53]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLQ2d22dqz4t9h for ; Thu, 25 Jan 2024 15:38:17 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-50edf4f478eso8950655e87.3 for ; Thu, 25 Jan 2024 07:38:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706197095; x=1706801895; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/FBYF6sPW3syARDw9aFjtg0w2y3mELypNAqAoe4ls+I=; b=hZVlY0IIRG45fzHmRvMCK5s3H71Knjfspm7/rI2tf/cR/cFhcFHtbHNgbcNVZSc3tY qQ3Z2FeqGC1oXeHmhHQvhmvrzVB88emJ1RA7ZE1u4VjQhFFSdtkuEu+miONmJ2SSZ+oV wlIM4RoxPbFLyF+DJbwz2tZJOKaK9Db3n2E9buc0Ww1Prci3n6aA69mvx2Q4simAj2M0 uBCFTdCAcugS8sOzst2k5UN2EW4paaF4P0CIWApC1LtuvzUDvbW+mob8BSioBaUP9K4t jD8yqiJX00/l6/K8sOSySd58aar6mnAgO1k6I4d/+2XLUJaAYfxHatmvRLDfvEYmB0fu M43g== X-Gm-Message-State: AOJu0YzTriI8UJ3RLEKv38YXOir0nnORx3NM0JSw2DnJOd4jkNr8C0rU 7bWAH7deRgLfwmjQ96KlDzagDvZms2jf6iVr6uPbt+JIXVSLTGwx1bM9OdIX3c9Q9W7saRkDMcL /6AigxfgwKa5PxiVxzUZHQnfEIjIQI1HXvVo= X-Google-Smtp-Source: AGHT+IGvY/xWTvSuSHqeRa51/B+8qOSb1kermTIedcOahhnYtQJw9EOGx330Hd4Zad3G9cvBgedSGqpkCgY3rhRWlCE= X-Received: by 2002:a05:6512:3ba7:b0:50e:7615:d34e with SMTP id g39-20020a0565123ba700b0050e7615d34emr869147lfv.22.1706197095030; Thu, 25 Jan 2024 07:38:15 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Ed Maste Date: Thu, 25 Jan 2024 10:38:02 -0500 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Warner Losh Cc: FreeBSD Current Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4TLQ2d22dqz4t9h X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Wed, 24 Jan 2024 at 12:30, Warner Losh wrote: > > Those are the only users in the tree, but not for long :) I have some reviews open to remove some old fdisk / diskabel / bsdlabel invocations from the tree. With those applied, for fdisk I see the following references (excluding sbin/fdisk/* and comments, old examples, etc.): contrib/netbsd-tests/sbin/gpt/t_gpt.sh tests/sys/cddl/zfs/bin/zpool_smi.ksh For bsdlabel / disklabel: sbin/growfs/tests/legacy_test.pl tools/regression/msdosfs/msdosfstest-2.sh tools/regression/tmpfs/t_vnd tools/tools/nanobsd/legacy.sh contrib/netbsd-tests/kernel/t_umount.sh contrib/netbsd-tests/kernel/t_umountstress.sh contrib/netbsd-tests/sbin/gpt/t_gpt.sh sbin/newfs/runtest00.sh sbin/newfs/runtest01.sh These will need to be addressed before actually removing any of these binaries, of course. > I wouldn't object to making these ports, but both these programs use 'sekret' > bits from the kernel that might not remain exposed as we clean things up. > Though the IOCTLs they do (or used to do) may no longer be relevant. It's > been so long that I've forgotten.... If we eventually stop exporting those kernel interfaces the tools would fail anyway, so IMO we can keep providing the kernel interfaces along with the headers etc, and keep building from source until/unless we drop support altogether. From nobody Thu Jan 25 15:50:31 2024 X-Original-To: freebsd-current@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 4TLQJx5Brgz57Vpg for ; Thu, 25 Jan 2024 15:50:41 +0000 (UTC) (envelope-from freebsd@igalic.co) Received: from mail-4323.proton.ch (mail-4323.proton.ch [185.70.43.23]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "protonmail.com", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLQJx3C2Wz4xp8 for ; Thu, 25 Jan 2024 15:50:41 +0000 (UTC) (envelope-from freebsd@igalic.co) Authentication-Results: mx1.freebsd.org; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=igalic.co; s=protonmail3; t=1706197837; x=1706457037; bh=5HM4e7UMixhg0nRvty63Ak5rUqnvWqhruvCctmKX5LI=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=U3CSoendpUkCyEN7xi0bc9aBXwvV5n92Ll3muglNQA7otOsYhQ7dp0w/ZDroPygP4 FreThOD7HRZgUY4d3b0Z3wRcORefz0iWxA9ixwKf83vwznsEBw0kX800+3Ca7eOoMr l1zbLukOW8qE/5jLYruK/Ng3MH4p76zysq2kGrLqkaCrpZk5+5DtTYLh6r4CVGcreJ e7HEJ79PooMmdaWOCUGCCtGmB+MIyL2EL3gTg16QtmdksR6ze1EnKWqey7tMDeo/Cm u4P+z4VTSwVK1fq4OsgVex+F/dfeNXu7HmKBd+toHQejg3gHFD6HWsvPdbG2D6cnE6 1EUHyS0pRa5+A== Date: Thu, 25 Jan 2024 15:50:31 +0000 To: "emaste@freebsd.org" , "imp@bsdimp.com" From: =?utf-8?Q?Mina_Gali=C4=87?= Cc: FreeBSD Current Subject: Re: Re: Removing fdisk and bsdlabel (legacy partition tools) Message-ID: In-Reply-To: References: Feedback-ID: 66573723:user:proton List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4TLQJx3C2Wz4xp8 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:62371, ipnet:185.70.43.0/24, country:CH] > > Those are the only users in the tree, but not for long :) > =20 > I have some reviews open to remove some old fdisk / diskabel / > bsdlabel invocations from the tree. > =20 > With those applied, for fdisk I see the following references > (excluding sbin/fdisk/* and comments, old examples, etc.): > =20 > contrib/netbsd-tests/sbin/gpt/t_gpt.sh > tests/sys/cddl/zfs/bin/zpool_smi.ksh > =20 > For bsdlabel / disklabel: > =20 > sbin/growfs/tests/legacy_test.pl > tools/regression/msdosfs/msdosfstest-2.sh > tools/regression/tmpfs/t_vnd > tools/tools/nanobsd/legacy.sh > contrib/netbsd-tests/kernel/t_umount.sh > contrib/netbsd-tests/kernel/t_umountstress.sh > contrib/netbsd-tests/sbin/gpt/t_gpt.sh > sbin/newfs/runtest00.sh > sbin/newfs/runtest01.sh i was looking at cd(4) today, and to my surprise, it was full of disklabel = references. I haven't looked at the code itself yet, to see how far the documentation h= as drifted apart from reality, but to most users, our documentation is real= ity. From nobody Thu Jan 25 16:00:31 2024 X-Original-To: freebsd-current@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 4TLQXT2Nb3z57WqJ for ; Thu, 25 Jan 2024 16:00:41 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLQXS61pKz50dK; Thu, 25 Jan 2024 16:00:40 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40PG0VfM002220; Thu, 25 Jan 2024 08:00:31 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40PG0VMb002219; Thu, 25 Jan 2024 08:00:31 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401251600.40PG0VMb002219@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: Ed Maste Date: Thu, 25 Jan 2024 08:00:31 -0800 (PST) CC: Warner Losh , FreeBSD Current X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TLQXS61pKz50dK X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] > On Wed, 24 Jan 2024 at 12:30, Warner Losh wrote: > > > > Those are the only users in the tree, but not for long :) > > I have some reviews open to remove some old fdisk / diskabel / > bsdlabel invocations from the tree. > > With those applied, for fdisk I see the following references > (excluding sbin/fdisk/* and comments, old examples, etc.): > > contrib/netbsd-tests/sbin/gpt/t_gpt.sh > tests/sys/cddl/zfs/bin/zpool_smi.ksh > > For bsdlabel / disklabel: > > sbin/growfs/tests/legacy_test.pl > tools/regression/msdosfs/msdosfstest-2.sh > tools/regression/tmpfs/t_vnd > tools/tools/nanobsd/legacy.sh > contrib/netbsd-tests/kernel/t_umount.sh > contrib/netbsd-tests/kernel/t_umountstress.sh > contrib/netbsd-tests/sbin/gpt/t_gpt.sh > sbin/newfs/runtest00.sh > sbin/newfs/runtest01.sh > > These will need to be addressed before actually removing any of these > binaries, of course. You seem to have missed /rescue. Now think about that long and hard, these tools classified as so important that they are part of /rescue. Again I can not stress enough how often I turn to these tools in a repair mode situation. > > I wouldn't object to making these ports, but both these programs use 'sekret' > > bits from the kernel that might not remain exposed as we clean things up. > > Though the IOCTLs they do (or used to do) may no longer be relevant. It's > > been so long that I've forgotten.... > > If we eventually stop exporting those kernel interfaces the tools > would fail anyway, so IMO we can keep providing the kernel interfaces > along with the headers etc, and keep building from source until/unless > we drop support altogether. > > -- Rod Grimes rgrimes@freebsd.org From nobody Thu Jan 25 16:05:41 2024 X-Original-To: freebsd-current@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 4TLQfY0WtQz57Xd2 for ; Thu, 25 Jan 2024 16:05:57 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLQfW5q2Vz529v for ; Thu, 25 Jan 2024 16:05:55 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lf1-f45.google.com with SMTP id 2adb3069b0e04-50eab4bf47aso950879e87.0 for ; Thu, 25 Jan 2024 08:05:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706198754; x=1706803554; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=P14MNthWkM+jyjReLVykchXfZbqErQ3Yvu8NFUE/7To=; b=Tp0bP/A913EI9Zmyodd1MR301MQpuVT8EUHxFvHXpw6U5e2b4U5nBswLHuytxCnfMI qbl+kX1s1t3sc/ljQHeE+iecCdpVM+CctwOrZeIINbvOlSddM/PLw92ICpKjzuAswePm oDHS8Vd85mTEAW+GPriJ+E3JVfH1mLOjU9K6ktJN8KKwfAXFWY5kn/R0IkuPb+Aunnqc ixztCmPY6IU5+gtW8fnv/FiSh5bDktvOcH7ouNQQNUM4EOzeZoIw15Hl8AbvqXgW0DtN IaFzeyjj5z0PCT6RQQu6KL17vOXwSIg6klaKmLnTEEJC3/TMa1m73kNKeb6q0uzekB15 FtQQ== X-Gm-Message-State: AOJu0YyQdZmoMZMcnw/zj7/3fejYqdG577G+LyoZYq/5EirH7mjOR/aF shzpoK+r42Ti7tOpi4aqrHCpKEslC2beat9EnqdxGgtLPZGLtxRy06OgWRxd3pIJaotuXzQjrEn cGlg38/RYvrWZt/qC8GD2KnGKUy3JM945rOw= X-Google-Smtp-Source: AGHT+IEpN7ALcOh3ZlWrwDGDW9XWQOBxQDAL5YQuFOUGQSwtQVTo8k1tpwbn4b90S70B0kkA0Jw4MqyWZaZIRNMsPn4= X-Received: by 2002:ac2:499a:0:b0:510:5e3:9726 with SMTP id f26-20020ac2499a000000b0051005e39726mr63583lfl.14.1706198753553; Thu, 25 Jan 2024 08:05:53 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Ed Maste Date: Thu, 25 Jan 2024 11:05:41 -0500 Message-ID: Subject: Re: Re: Removing fdisk and bsdlabel (legacy partition tools) To: =?UTF-8?Q?Mina_Gali=C4=87?= Cc: "imp@bsdimp.com" , FreeBSD Current Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4TLQfW5q2Vz529v X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Thu, 25 Jan 2024 at 10:50, Mina Gali=C4=87 wrote: > > i was looking at cd(4) today, and to my surprise, it was full of disklabe= l references. Oh, indeed - as with the old references in ccd(4) that should go. The last reference to `struct disklabel` in the CAM SCSI cd driver was removed over two decades ago. From nobody Thu Jan 25 16:10:49 2024 X-Original-To: freebsd-current@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 4TLQmS29GKz57Xrt for ; Thu, 25 Jan 2024 16:11:04 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-lf1-f54.google.com (mail-lf1-f54.google.com [209.85.167.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLQmS0YBLz534m for ; Thu, 25 Jan 2024 16:11:04 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lf1-f54.google.com with SMTP id 2adb3069b0e04-51022133a84so291459e87.3 for ; Thu, 25 Jan 2024 08:11:04 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706199062; x=1706803862; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9du0zZysGpRRfp05phMenyVASPW9+05pIAM7Sin78fE=; b=P59jTBDJkbH2xZLH3BSlfW0fnzUQ+F/q0Ty/jPf+FYoFJfCrGlolA1QAY6lCAPPBUn KrvVlLDzx8b62FSZiKs/EmZGxr/PkaXydyGUXMxLtYpeP5pUXb0KFfg/VgaJ01RhoJx7 +zHxVowfj6XS7JP2DbOoSae9Fof1IaVuAvkVT0gYLSHAZMpGpUoZbcM5sQHpEoJhQpIj OBg9Sjd4pMsvVHE8Oc3c2hCH0o0z7jRmgunU3EieP0erYEQSJKHTUc/aMech8oOB1/7C w0tXkka15Shb/g2sBx9zZRzMcW4/mUhqPYJvC/yv3jX5AZVEKrn07IsfAbYwYZpTzITb NMhw== X-Gm-Message-State: AOJu0YxfulP9vtogoI/rhKhUdRb3dj+4LLofOEdh0Bqqe4f8XfVbu1kM maJE+imTkzZbhi22LzFM1sbZuxwPYconSkiUaQsDgdsGFr9McK07uDZtcbIz2h+YHxoBe2JcsjP bGVvESeox1Hho5JqYEz4/agUJ7WGKE6aY X-Google-Smtp-Source: AGHT+IEMPhz5j0A4LMg0+vEt6yifDW+aiwOFK5H6QnTKB+yT9ih2LDNQvzs4o4PY98cFNA2dlpuDdokJSLi66rp2r2E= X-Received: by 2002:a19:ad02:0:b0:510:189c:2d74 with SMTP id t2-20020a19ad02000000b00510189c2d74mr12078lfc.66.1706199061767; Thu, 25 Jan 2024 08:11:01 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401251600.40PG0VMb002219@gndrsh.dnsmgr.net> In-Reply-To: <202401251600.40PG0VMb002219@gndrsh.dnsmgr.net> From: Ed Maste Date: Thu, 25 Jan 2024 11:10:49 -0500 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: "Rodney W. Grimes" Cc: FreeBSD Current Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4TLQmS0YBLz534m X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes wrote: > > > These will need to be addressed before actually removing any of these > > binaries, of course. > > You seem to have missed /rescue. Now think about that long > and hard, these tools classified as so important that they > are part of /rescue. Again I can not stress enough how often > I turn to these tools in a repair mode situation. I haven't missed rescue, it is included in the work in progress I mentioned. Note that rescue has included gpart since 2007. From nobody Thu Jan 25 16:15:39 2024 X-Original-To: freebsd-current@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 4TLQt05yYyz57YNF for ; Thu, 25 Jan 2024 16:15:52 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLQt02Yy3z54Xm for ; Thu, 25 Jan 2024 16:15:52 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-55a9008c185so1569994a12.1 for ; Thu, 25 Jan 2024 08:15:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706199351; x=1706804151; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=iUYEY7oY7MBcppQabGfAS3Uj5zbP6ahIjySeXNFJs1o=; b=jOO3rE8erknan8J1iAtWpGAtA1bpVZxANN0fDzOQikAwJOgEp3JnCDDyqNvezaYaCR anM1LY/AYXRMr4rEkC6NnoiADJXM64PDjEEP92Pji6Mx/Nv4unEELubs8yn49+Z2TR93 2PCD1vMobmB9JovZpsg4PU114sH6zblL8mqx4meaRQeITjuptozRujItAlyJcxAJDQWC fSiXAf3gpFEYjE1vWJaEkCWZBTlQ0N8hcWfWAWqsVMEwu2q7DeLebo+TZg/zGOZ0wpEC o+kxyHi7jyymTD5ouvRiWPoY2O3O/0toQSM1iLUDAY+oixMCQ9R6byNCGFj1n7GYdvMU zCGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706199351; x=1706804151; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=iUYEY7oY7MBcppQabGfAS3Uj5zbP6ahIjySeXNFJs1o=; b=w/7C7/0BT9l5682yoqFLdL3pJbq0NXpdJ6krypuouGwKNibaRjt0h8USTxUWqGmtsM 1P4TWbEbyYLOXzmMH3NAXM0R3sVNt2r1qIde/bRHd0sDhSOw60nckWi883ha1QVFktqe djoX4jGVXLme456vVK9DIJ8t/tpFHQOWywr55DwEiVLHU8eAnc8bB3eym27SiQJmHHZ4 bPplYqmsVP5ud0s8KbEj3jdTV9WAUxI/pvNhwsN7dFRh/qNatTeLuWE167z4UyOyXHi0 P3+EtviIEhliNpozWdd/0DDhJxqH+fyLvLOuZbhQc5LTgms2uZ2PHjY41FmV7JFnJHiz iisQ== X-Gm-Message-State: AOJu0Yx7EKJJkwowkEsC4x2vMhU2br7KOpWIbQlbch6hWh5x36I5ZUtV pGXUw+Ov6FZjoW+R1iLjYOK99AK6VVXxeO1Zt9elh7RicELmWrGeUNjI2Zr2NrFSNTsnGUmYeaW z3KsdRK9TDAVecQSizPBCiM99Arpcf6x96WGjMQ== X-Google-Smtp-Source: AGHT+IH2gfrEbe95PtLl4myBWjj+kZ4og077zAKcL6yK3PR9UFG356b5VreMC3mto0j6Q4PPwRwGjy8VbdVXJYcllug= X-Received: by 2002:a50:fb17:0:b0:55c:79ee:6970 with SMTP id d23-20020a50fb17000000b0055c79ee6970mr95644edq.19.1706199350733; Thu, 25 Jan 2024 08:15:50 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401251600.40PG0VMb002219@gndrsh.dnsmgr.net> In-Reply-To: From: Warner Losh Date: Thu, 25 Jan 2024 09:15:39 -0700 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Ed Maste Cc: "Rodney W. Grimes" , FreeBSD Current Content-Type: multipart/alternative; boundary="000000000000378136060fc77e80" X-Rspamd-Queue-Id: 4TLQt02Yy3z54Xm X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000378136060fc77e80 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jan 25, 2024, 9:11=E2=80=AFAM Ed Maste wrote: > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > wrote: > > > > > These will need to be addressed before actually removing any of these > > > binaries, of course. > > > > You seem to have missed /rescue. Now think about that long > > and hard, these tools classified as so important that they > > are part of /rescue. Again I can not stress enough how often > > I turn to these tools in a repair mode situation. > > I haven't missed rescue, it is included in the work in progress I > mentioned. Note that rescue has included gpart since 2007. > What can fdisk and/or disklabel repair that gpart can't? Warner > --000000000000378136060fc77e80 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Thu, Jan 25, 2024, 9:11=E2=80=AFAM Ed Maste <emaste@freebsd.org> wrote:
On Thu, 25 Jan 2024 at 11:00, Rodney W. G= rimes
<freebsd-rwg@gndrsh.dnsmgr.net> wrote:
>
> > These will need to be addressed before actually removing any of t= hese
> > binaries, of course.
>
> You seem to have missed /rescue.=C2=A0 Now think about that long
> and hard, these tools classified as so important that they
> are part of /rescue.=C2=A0 Again I can not stress enough how often
> I turn to these tools in a repair mode situation.

I haven't missed rescue, it is included in the work in progress I
mentioned. Note that rescue has included gpart since 2007.
=

What can fdisk an= d/or disklabel repair that gpart can't?

Warner
--000000000000378136060fc77e80-- From nobody Thu Jan 25 17:25:16 2024 X-Original-To: freebsd-current@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 4TLSQK4YVJz57g7H for ; Thu, 25 Jan 2024 17:25:29 +0000 (UTC) (envelope-from bakul@iitbombay.org) Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLSQK2sZ8z40ml for ; Thu, 25 Jan 2024 17:25:29 +0000 (UTC) (envelope-from bakul@iitbombay.org) Authentication-Results: mx1.freebsd.org; none Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-2901ac9ba23so4051258a91.3 for ; Thu, 25 Jan 2024 09:25:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iitbombay-org.20230601.gappssmtp.com; s=20230601; t=1706203528; x=1706808328; darn=freebsd.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=x1pvL5asUFGjzNlJD8tuiw3rO1oA7rW+Pa9+0a0l3uo=; b=CutCIOAyk5k8c5ZfiRwnYOFP7KgpCmMMyoxixBPXkZRWTFFnVmritjN9Y0vYNzEAyU SMJ7MgPfdjK35PVOXgtc6sU/t9AIQS7lLpbw/sEqRhzfRP18iiNa0ufyavhfde8Ocuqx jCwVX9qaMGaLGeM+krd+49HaPX5J8mubbdszHNGmqNJbYFMaiJUxzM96rk/HQx//2igc MSt3IWatO5Zi6/xV/KMzxKjIu/T5Nb7xBX3StUVZynFvo63g31+nkb80LTwc+UVV72Cd C+Ki4UF72QWHI8Wi7R+bVTszkLHWIQRu24nSDgRxPzzhfaiChu6+5EBJMjDtkBRzMPHF j5RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706203528; x=1706808328; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=x1pvL5asUFGjzNlJD8tuiw3rO1oA7rW+Pa9+0a0l3uo=; b=oRZj6LiE6K7MvcQSLSawRSbq03vtdg5qu1ii66YV1fwlyVnsNmLMjbaxXZBMXZo7r3 2hVs1iW8Iqe3kkYIKfdmZQfUMBT8F/mEUzABKlyLHv+lyjLUyHB4+d/4rp+tWGBmgB4F IW6OVg+Aq/FHflBif0vbqEeO5P/ZB28aNDos9n/a2PiG8QmSfyQbERM7sFlKFrOYgFe2 pwR8UNd6VYsPwKPkMYaMfVbEw0ji2gW+g9OogG17FB3EvmfiJ1NzSePOkO70s5t31y3i IOI+qelk+ss4mUcSRWf/+a8Yq1z2U1BPDA5jPPJB8v1z8Vguqn5SFh/qXd/XJVEV0RVu fpEA== X-Gm-Message-State: AOJu0YxB1QEijCFNQF9FpOSQ6psRI9cRrvx2nOoEeM6tbGJsqXJTTZy3 glBp+ieYxWzYu2aNLpKz7h+xi6M+3N3UAur6kFMZsjQWQxEvrpl/BnY7QtNW2iPNo9d/P1IquqE = X-Google-Smtp-Source: AGHT+IHvIYVBvP9AL6GH/4eKl8esqcy9Sxscnf0xuDKm5xJ2sPf3QYsgPraQSLh5EWtX4joAlxL65w== X-Received: by 2002:a17:90a:cb94:b0:28d:fe4a:9720 with SMTP id a20-20020a17090acb9400b0028dfe4a9720mr885158pju.26.1706203528023; Thu, 25 Jan 2024 09:25:28 -0800 (PST) Received: from smtpclient.apple (107-215-223-229.lightspeed.sntcca.sbcglobal.net. [107.215.223.229]) by smtp.gmail.com with ESMTPSA id b16-20020a17090a991000b0028d134a9223sm1806616pjp.8.2024.01.25.09.25.27 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jan 2024 09:25:27 -0800 (PST) Content-Type: text/plain; charset=utf-8 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.400.31\)) Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) From: Bakul Shah In-Reply-To: Date: Thu, 25 Jan 2024 09:25:16 -0800 Cc: Ed Maste , "Rodney W. Grimes" , FreeBSD Current Content-Transfer-Encoding: quoted-printable Message-Id: <524F3BCF-53C5-491C-9470-F107AA5EF98A@iitbombay.org> References: <202401251600.40PG0VMb002219@gndrsh.dnsmgr.net> To: Warner Losh X-Mailer: Apple Mail (2.3774.400.31) X-Rspamd-Queue-Id: 4TLSQK2sZ8z40ml X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] On Jan 25, 2024, at 8:15=E2=80=AFAM, Warner Losh wrote: >=20 > What can fdisk and/or disklabel repair that gpart can't? May be add a section in gpart that shows how to map fdisk & bsdlabel functionality to gpart? Better still, why not provide scripts for fdisk/bsdlabel that use gpart underneath? FreeBSD should strive to provide backward compatibility....= From nobody Thu Jan 25 17:49:56 2024 X-Original-To: freebsd-current@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 4TLSyj525Kz57jJK for ; Thu, 25 Jan 2024 17:50:05 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLSyj1J8Sz43mM; Thu, 25 Jan 2024 17:50:05 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40PHnuQD002569; Thu, 25 Jan 2024 09:49:56 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40PHnu4E002568; Thu, 25 Jan 2024 09:49:56 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401251749.40PHnu4E002568@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: Warner Losh Date: Thu, 25 Jan 2024 09:49:56 -0800 (PST) CC: Ed Maste , "Rodney W. Grimes" , FreeBSD Current X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TLSyj1J8Sz43mM X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] > On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: > > > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > > wrote: > > > > > > > These will need to be addressed before actually removing any of these > > > > binaries, of course. > > > > > > You seem to have missed /rescue. Now think about that long > > > and hard, these tools classified as so important that they > > > are part of /rescue. Again I can not stress enough how often > > > I turn to these tools in a repair mode situation. > > > > I haven't missed rescue, it is included in the work in progress I > > mentioned. Note that rescue has included gpart since 2007. > > > > What can fdisk and/or disklabel repair that gpart can't? As far as I know there is no way in gpart to get to the MBR cyl/hd/sec values, you can only get to the LBA start and end values: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) start 63, size 8388513 (4095 Meg), flag 80 (active) beg: cyl 0/ head 1/ sector 1; end: cyl 1023/ head 15/ sector 63 gpart show ada0 => 63 8388545 ada0 MBR (4.0G) 63 8388513 1 freebsd [active] (4.0G) 8388576 32 - free - (16K) Now I have learned that gpart backup/restore CAN get me at least basic bsdlabel -e function, but again it has no access to all the stuff stored that showsup with bsdlabel -A. Which this is now the third time I have asked "how do I do bsdlabel -A -e with gpart"? One person at least answered that with: gpart backup GEOM >backup vi backup gpart restore GEOM Now I just have to rewrite my bsdlabel GEOM >backup files to be be gpart GEOM >backup files (I have precanned sets of bsdlabel files I use to do bsdlabel -w GEOM with. > Warner -- Rod Grimes rgrimes@freebsd.org From nobody Thu Jan 25 19:27:16 2024 X-Original-To: freebsd-current@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 4TLW6x5XMKz57sWJ for ; Thu, 25 Jan 2024 19:27:21 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta001.cacentral1.a.cloudfilter.net (omta001.cacentral1.a.cloudfilter.net [3.97.99.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLW6w4R7tz4JsH; Thu, 25 Jan 2024 19:27:20 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of cy.schubert@cschubert.com has no SPF policy when checking 3.97.99.32) smtp.mailfrom=cy.schubert@cschubert.com Received: from shw-obgw-4002a.ext.cloudfilter.net ([10.228.9.250]) by cmsmtp with ESMTPS id T5LarRuGJxDxGT5Nfr30OI; Thu, 25 Jan 2024 19:27:19 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id T5NdrfU8P9Cr4T5NersgSv; Thu, 25 Jan 2024 19:27:19 +0000 X-Authority-Analysis: v=2.4 cv=etl8zZpX c=1 sm=1 tr=0 ts=65b2b617 a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=kj9zAlcOel0A:10 a=dEuoMetlWLkA:10 a=VxmjJ2MpAAAA:8 a=YxBL1-UpAAAA:8 a=6I5d2MoRAAAA:8 a=EkcXrb_YAAAA:8 a=Ip5JBLrVCoNIyYqQITEA:9 a=CjuIK1q_8ugA:10 a=fvK8J61VgDcA:10 a=7gXAzLPJhVmCkEl4_tsf:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=IjZwj45LgO3ly-622nXo:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTP id E542579D; Thu, 25 Jan 2024 11:27:16 -0800 (PST) Received: by slippy.cwsent.com (Postfix, from userid 1000) id DD3B6267; Thu, 25 Jan 2024 11:27:16 -0800 (PST) X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.8+dev Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Miroslav Lachman <000.fbsd@quip.cz>, Warner Losh , "Rodney W. Grimes" , George Michaelson , Ed Maste , FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-reply-to: <20240125101308.92E931A6@slippy.cwsent.com> References: <202401242347.40ONlWKZ099356@gndrsh.dnsmgr.net> <20240125050736.A11871AC@slippy.cwsent.com> <20240125055019.CCF1973@slippy.cwsent.com> <84c6f3b1-58b3-44f8-aeaf-35f78e05975d@quip.cz> <20240125101308.92E931A6@slippy.cwsent.com> Comments: In-reply-to Cy Schubert message dated "Thu, 25 Jan 2024 02:13:08 -0800." List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Thu, 25 Jan 2024 11:27:16 -0800 Message-Id: <20240125192716.DD3B6267@slippy.cwsent.com> X-CMAE-Envelope: MS4xfCxLJYB/LU+fPYSxjjY9QE4L5QICSKVwBpaMkkYEmSYJp4b5IejZ2jOdi7pamUWrJMHCspvUryepJV7lVVc/wDm024TOrry1j0TWeD4BBgGqFIlcIcCJ AaH8dhPAFJCX5Fbapoj7eKMPWLQ+xrqrPXFtHaJlcMljC10EHAxCxVWyc8n9+vojwm1gA6+4QbN/8/Yzs8LTA9FU0GrSREnv3T6d9vbTtFOV0DNQnMVBYkWr HtAKd/ZzCdxikwKFDW4CeYwegR0IwZCgcmVOGUCbzuPU1Z2wiQlse+F4S9ZR7co1dQjwLolZb1uAUnSnHVQcHaLLMemYqrIDml0WXEvlyIwumoCIr2s8Pw1D UMuXeY9G X-Spamd-Bar: - X-Spamd-Result: default: False [-1.70 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; AUTH_NA(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-0.997]; MV_CASE(0.50)[]; RCVD_IN_DNSWL_LOW(-0.10)[3.97.99.32:from]; MIME_GOOD(-0.10)[text/plain]; R_SPF_NA(0.00)[no SPF record]; RCVD_VIA_SMTP_AUTH(0.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; RCVD_COUNT_THREE(0.00)[4]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; HAS_REPLYTO(0.00)[Cy.Schubert@cschubert.com]; RCPT_COUNT_FIVE(0.00)[6]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; R_DKIM_NA(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_TLS_LAST(0.00)[]; TO_DN_ALL(0.00)[]; DMARC_NA(0.00)[cschubert.com]; REPLYTO_EQ_FROM(0.00)[] X-Rspamd-Queue-Id: 4TLW6w4R7tz4JsH In message <20240125101308.92E931A6@slippy.cwsent.com>, Cy Schubert writes: > In message <84c6f3b1-58b3-44f8-aeaf-35f78e05975d@quip.cz>, Miroslav Lachman > wri > tes: > > On 25/01/2024 06:50, Cy Schubert wrote: > > > In message l. > > c > > > > > > >> > > >> What can they do that gpart can't do? > > > > > > This was quite a while ago, booted off my recovery USB attempting to repa > ir > > > some self caused damage. The ability to edit (vi) a file with starting > > > addresses and lengths, visually using bsdlabel, was suited to my panicked > > > state as I worked to recover the machine. > > > > > > A visual view of columns of a bsdlabel, editing a label using vi, checkin > g > > > and double checking numbers before committing them is handy.The visual > > > format and the ability to adjust the numbers in an editor before committi > ng > > > them is handy. You can't do this with gpart, as it's transactional. And > > > bsdinstall doesn't give one the opportunity to check the numbers in detai > l > > > on a console before committing them. > > > > If you really like your editor of choice to edit partition table, you > > can use gpart backup and gpart restore like this: > > > > gpart backup ada0 > ada0.part > > vi ada0.part > > gpart restore -F -l < ada0.part > > That would work. > > > > > > Maybe a good GSoC project may be to replace bsdlabel's driect writes to > > > disk with geom calls. Though, t doesn't need to be bsdlabel, but some kin > d > > > of utility that displays the existing label in an editor session where > > > changes can be made, using the editor, and committed. This could even be > an > > > enhancement to bsdinstall: call it expert mode or whatever. > > > > Manipulating partition table in editor session can be achieved by few > > lines of shell script as a wrapper around gpart backup & gpart restore. > > Or just build a gpart edit mode with the functions used to implement backup > and restore. Excellent idea. Thank you. A small project to work on. > > > > > Kind regards > > Miroslav Lachman A freebsd-bsdlabel port has been created making way for its removal. -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org e^(i*pi)+1=0 From nobody Thu Jan 25 22:25:58 2024 X-Original-To: freebsd-current@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 4TLb575Nhzz589m0 for ; Thu, 25 Jan 2024 22:26:03 +0000 (UTC) (envelope-from robert@rrbrussell.com) Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) (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 4TLb5669n7z4fWm for ; Thu, 25 Jan 2024 22:26:02 +0000 (UTC) (envelope-from robert@rrbrussell.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=rrbrussell.com header.s=fm2 header.b=LTnGM5o+; dkim=pass header.d=messagingengine.com header.s=fm3 header.b="u zYiWN+"; dmarc=pass (policy=quarantine) header.from=rrbrussell.com; spf=pass (mx1.freebsd.org: domain of robert@rrbrussell.com designates 66.111.4.29 as permitted sender) smtp.mailfrom=robert@rrbrussell.com Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id C7E645C008B for ; Thu, 25 Jan 2024 17:26:01 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Thu, 25 Jan 2024 17:26:01 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rrbrussell.com; h=cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1706221561; x=1706307961; bh=g6kY8uqMiIHMdtNnpZVArQwGT1gJrVy5qLlt1BlMM+k=; b= LTnGM5o+K8hsZ7J/kvmrHlICGZQberVLaC93s3lvHhzDx/plGBpvnaz4uTzdC3QE apWfl9JCQWqE3QjHPsKnQzLaBu5EAM/uKolcPB50hsASIJp6F/2bm/rkqQMaEoL7 Zmx2v9TzDm6BI5w6xqeKEZ22/d2nZ80+VUcM6UmX4AAYHRf+Lz+8xGE+hvIQvm81 od5ghCZ5/Ertx4JqiajqNGURJObS36TYLBn4g2eCV9bfL+6livmXimm4ECySF8Y2 NDC2tUN/oXtOZpncA1yWex366dWbEPSZbyEa8TF5AmGTQsAW2aghHf/LVfvzLsxZ Su9jo4K3Tq8AQjU2/vDA6A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1706221561; x= 1706307961; bh=g6kY8uqMiIHMdtNnpZVArQwGT1gJrVy5qLlt1BlMM+k=; b=u zYiWN+W6z0NdnzW/7gsnwdEuKVuNoppMt4xKfWMNkgVbfKkglNn9v/RCK/B8Q9u1 yRdUF0kMuDzZ9WJOsH9ZslUDF4OBvtWPbCYko1Cx0BLMWELvSZ0MWMJfZbJiOD6D 62MhSGWDg7ZVvD9U9IOJfmrNFhTactc7X48rRIyK4E1eN9vOZYroCjhpwe9SQJa2 nOuIVOLyNjM81bUfFW+6LP/QCSUJivBaDkpfP3/WLz7IIs08Cb/JMqxGiRmY6KlT 7VNmsLIHR8QC1RDFIKoI7KzuS0ZGAGMC8ayFilEW8vZ1KOUGS471cKn1EeSHwwB3 wrB7by1EfRhv6IaRoDA/w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdelhedgieekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpeffhffvuffkjghfofggtgfgsehtje ertdertddvnecuhfhrohhmpedftfhosggvrhhtucftrdcutfhushhsvghllhdfuceorhho sggvrhhtsehrrhgsrhhushhsvghllhdrtghomheqnecuggftrfgrthhtvghrnhepieffke eugfettdeiueekgedvuddtlefhleehueelgfefkeeuffffheeigeevteeunecuffhomhgr ihhnpehfrhgvvggsshgurdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrg hmpehmrghilhhfrhhomheprhhosggvrhhtsehrrhgsrhhushhsvghllhdrtghomh X-ME-Proxy: Feedback-ID: ie421460a:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Thu, 25 Jan 2024 17:26:01 -0500 (EST) Date: Thu, 25 Jan 2024 16:25:58 -0600 From: "Robert R. Russell" To: freebsd-current@freebsd.org Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Message-ID: <20240125162558.77a3cde7@venus.private.rrbrussell.com> In-Reply-To: References: X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; amd64-portbld-freebsd14.0) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spamd-Bar: ----- X-Spamd-Result: default: False [-5.50 / 15.00]; DWL_DNSWL_LOW(-1.00)[messagingengine.com:dkim]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[rrbrussell.com,quarantine]; RWL_MAILSPIKE_EXCELLENT(-0.40)[66.111.4.29:from]; R_SPF_ALLOW(-0.20)[+ip4:66.111.4.29]; R_DKIM_ALLOW(-0.20)[rrbrussell.com:s=fm2,messagingengine.com:s=fm3]; RCVD_IN_DNSWL_LOW(-0.10)[66.111.4.29:from]; MIME_GOOD(-0.10)[text/plain]; RCVD_TLS_LAST(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_COUNT_THREE(0.00)[3]; DKIM_TRACE(0.00)[rrbrussell.com:+,messagingengine.com:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; ASN(0.00)[asn:19151, ipnet:66.111.4.0/24, country:US]; ARC_NA(0.00)[]; TO_DN_NONE(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; FREEFALL_USER(0.00)[robert]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; MID_RHS_MATCH_FROMTLD(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+] X-Rspamd-Queue-Id: 4TLb5669n7z4fWm On Wed, 24 Jan 2024 10:44:57 -0500 Ed Maste wrote: > MBR (PC BIOS) partition tables were historically maintained with > fdisk(8), but gpart(8) has long been the preferred method for working > with partition tables of all types. fdisk has been declared as > obsolete in the man page since 2015. Similarly BSD disklabels were > historically maintained with bsdlabel. It does not yet have a > deprecation notice - I have proposed a man page addition in > https://reviews.freebsd.org/D43563. > > I would like to disconnect these from the build, and subsequently > remove them. This is prompted by a recent bsdlabel bug report which > uncovered a longstanding buffer overflow in that tool. Effort is much > better focused on contemporary, maintained tools rather than > investigating issues in deprecated ones. Removing these tools would > happen in FreeBSD 15 only (no change in 14 or 13). > > Code review to disconnect fdisk: https://reviews.freebsd.org/D43575 > > Note that this effort is limited to these maintenance tools only - > there is no change to kernel or gpart support for MBR or BSD > disklablel partitioning. That said, MBR partitioning and BSD > disklabels are best considered legacy formats and should be avoided > for new installations, if possible. > > If anyone is using fdisk and/or bsdlabel rather than gpart I would > appreciate knowing what is preventing you from using the contemporary > tools. > FYI gpart doesn't allow you to create disklabel with more than 8 items either. robert@venus ~ 563$ doas mdconfig -l md0 robert@venus ~ 564$ doas mdconfig -lv md0 vnode 40M /usr/home/robert/test_disk.img robert@venus ~ 565$ doas gpart backup md0 MBR 4 1 freebsd 1 81919 robert@venus ~ 566$ doas gpart backup md0s1 BSD 8 1 freebsd-ufs 0 4096 2 freebsd-swap 4096 4096 4 freebsd-ufs 8192 4096 5 freebsd-ufs 12288 4096 6 freebsd-ufs 16384 4096 7 freebsd-ufs 20480 4096 8 freebsd-ufs 24576 4096 robert@venus ~ 567$ doas gpart add -t freebds-swap -s 2M md0s1 gpart: index '9': No space left on device robert@venus ~ 568$ doas gpart add -t freebds-swap -s 2M -i 9 md0s1 gpart: index '9': Invalid argument robert@venus ~ 569$ bsdlabel /dev/md0s1 bsdlabel: unable to get correct path for /dev/md0s1: Permission denied robert@venus ~ 570$ doas bsdlabel /dev/md0s1 # /dev/md0s1: 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 4096 0 4.2BSD 0 0 0 b: 4096 4096 swap c: 81919 0 unused 0 0 # "raw" part, don't edit d: 4096 8192 4.2BSD 0 0 0 e: 4096 12288 4.2BSD 0 0 0 f: 4096 16384 4.2BSD 0 0 0 g: 4096 20480 4.2BSD 0 0 0 h: 4096 24576 4.2BSD 0 0 0 robert@venus ~ 571$ I still need to get a netBSD VM running and create a test file with more than 8 partitions under a bsdlabel to see if gpart crashes. From nobody Fri Jan 26 00:14:44 2024 X-Original-To: freebsd-current@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 4TLdW03SJgz58L1s; Fri, 26 Jan 2024 00:15:08 +0000 (UTC) (envelope-from void@f-m.fm) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (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 4TLdVz5Cncz4sWF; Fri, 26 Jan 2024 00:15:07 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=f-m.fm header.s=fm3 header.b=qh1R1q8Q; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=hDc5nWRz; dmarc=pass (policy=none) header.from=f-m.fm; spf=pass (mx1.freebsd.org: domain of void@f-m.fm designates 64.147.123.25 as permitted sender) smtp.mailfrom=void@f-m.fm Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 5B8693200ADD; Thu, 25 Jan 2024 19:15:05 -0500 (EST) Received: from imap46 ([10.202.2.96]) by compute6.internal (MEProxy); Thu, 25 Jan 2024 19:15:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm3; t=1706228104; x=1706314504; bh=e5NEdJ5pQN/AnVxN/gZtC6hhdHmt4e8q v0J/OEJT4CQ=; b=qh1R1q8QxUiO5rcGNi3hQ/P89LScdKOWVadPzE9av4QCkqRo 2UxgHMe/h9EqRR4IKbHPwVbpZ8GkPzM7xQxIQDTkkucdO+AaqXMjvrxR2bBTWeTV nNd8IJjeUqEG6sJ+QARISqka7vuHcZtF1xCZv8K9XbEw55u05a6bYPd3RkXNv1Qs 7hrdvTPclABgQikFUCBpNhC0dJU/55LH9wJoI06RbQ5qHObKMVbt+bR8xUMigMcU 6Dvaa/ubf9+GKpF00d1/C0ArLn8+7RYNlVEPi1M37ZwcKWF6ndZ5wlorW2ua0r1V cRm41urmPZhfCDoB6bQE1MDuxr2stnycNE7Umw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1706228104; x=1706314504; bh=e5NEdJ5pQN/AnVxN/gZtC6hhdHmt4e8qv0J /OEJT4CQ=; b=hDc5nWRzodEfmv/3bX1+DZM1GVkXkPlZ1xaHRGf1ZZu1P8gCUUr qBWBf2uVEW6IL1kwd6BQwVO1eO4ZUqVjS3ar5fYm1I5ymibk18betjLo12EH73bj Jj1gkdedTFFNL4jt2PI7O00P+XNQYhEly5MrqfQWxs9KuX8QHozQklu48293yny2 KY7qjQi5uLQ5zUNS9oyhIqUU9qtrwvsfb+yynhH8vkD+4hc5I69l+rsBioglcrcc BOwyWyoewGqI/5troF4L4YkUp6yVDSr+lpx7hqPbm0Q7EspkEX3HnmqddIXiPd0J 7JGwWnFt3j2qtmJ+GngoVPJZyW1XhBeinMw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdeliedgudekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfffhffvvefutgesthdtre dtreertdenucfhrhhomhepvhhoihguuceovhhoihgusehfqdhmrdhfmheqnecuggftrfgr thhtvghrnhepueefjeevudfgvdehgffgueduveekvefhfeetueeugfeuvdevfedtveekvd eltdegnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhep vhhoihgusehfqdhmrdhfmh X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id A07B62A2008B; Thu, 25 Jan 2024 19:15:04 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-119-ga8b98d1bd8-fm-20240108.001-ga8b98d1b List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Message-Id: Date: Fri, 26 Jan 2024 00:14:44 +0000 From: void To: freebsd-current@freebsd.org Cc: freebsd-arm@freebsd.org Subject: make buildworld failure on arm64 on -current n267777 Content-Type: text/plain X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.66 / 15.00]; DWL_DNSWL_LOW(-1.00)[messagingengine.com:dkim]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[f-m.fm,none]; NEURAL_SPAM_SHORT(0.43)[0.426]; R_SPF_ALLOW(-0.20)[+ip4:64.147.123.25]; R_DKIM_ALLOW(-0.20)[f-m.fm:s=fm3,messagingengine.com:s=fm3]; MIME_GOOD(-0.10)[text/plain]; RCVD_IN_DNSWL_LOW(-0.10)[64.147.123.25:from]; XM_UA_NO_VERSION(0.01)[]; FREEMAIL_ENVFROM(0.00)[f-m.fm]; MIME_TRACE(0.00)[0:+]; FREEMAIL_FROM(0.00)[f-m.fm]; ASN(0.00)[asn:29838, ipnet:64.147.123.0/24, country:US]; ARC_NA(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; MLMMJ_DEST(0.00)[freebsd-arm@freebsd.org,freebsd-current@freebsd.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; TO_DN_NONE(0.00)[]; RCVD_TLS_LAST(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[f-m.fm:+,messagingengine.com:+] X-Rspamd-Queue-Id: 4TLdVz5Cncz4sWF In /usr/src # git rev-list --count --first-parent HEAD 267777 include/machine -> /usr/src/sys/arm64/include Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/vers.c Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/8x16.c Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/autoload.o Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/bootinfo.o Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/conf.o Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/copy.o Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/efi_main.o Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/framebuffer.o Building /usr/obj/usr/src/arm64.aarch64/stand/efi/loader_4th/main.o /usr/src/stand/efi/loader_4th/../loader/main.c:63:10: fatal error: 'platform/acfreebsd.h' file not found 63 | #include "platform/acfreebsd.h" | ^~~~~~~~~~~~~~~~~~~~~~ 1 error generated. make[2]: stopped in /usr/src make[2]: stopped in /usr/src make[4]: stopped in /usr/src/secure/lib make[3]: stopped in /usr/src/secure make[2]: stopped in /usr/src make[3]: stopped in /usr/src/lib make[2]: stopped in /usr/src 93.16 real 26.94 user 8.34 sys From nobody Fri Jan 26 00:55:08 2024 X-Original-To: freebsd-current@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 4TLfPR2WQ8z58PJD for ; Fri, 26 Jan 2024 00:55:23 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLfPR0qsFz42NG for ; Fri, 26 Jan 2024 00:55:23 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-510133ed214so3510777e87.1 for ; Thu, 25 Jan 2024 16:55:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706230521; x=1706835321; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WLufwpdym0Ckt8X4zpOViEjyAYxitNA70yyof15glrc=; b=AAJOws/GcdphudJViAx4eFX/NQC2KRz+CIgFw3MtoaMwzQUEowdw+PNaPq2jm5fmXc +0o/qLZ2/1oReVoimQNy3HlHGd9QrNPeCqrhOsOtNYyL5QKT+fMOqcoH535qrSzI5XUQ Pv3DwzNWpNK/BFi88vBcvcM15w9a+2jD+StA4kToh87Kidw6GvsHkrlhbM7LS3jzMGxM fLo8iKkG810805BCgOQolKqsiRW0xcourVo7oFm1Q3hJ9aErtWwR8wZcGjDxy77NAHFe LoYwt9g9NQXuQwMFDaI/K0GJsP9srJQh+5IrAW6zL2BUzcce4/kxjUdzj++EOiKqcBKs J+gA== X-Gm-Message-State: AOJu0Yx4TK7RiQSx8zYe6vWvH7tPCL81REBxFfpt9YYaBmpdAOo2CtQo oVZHwl48Q/0lsSK+ei0xYrMgpWZeAUVnM3tRO+YPe94voTBFExrLOkFuPYs4jLgOQ3Py49qkj6c vjijcd+AjowhWMciM8VWfxDDVSbn7dG3ZWPQ= X-Google-Smtp-Source: AGHT+IEeSCYZOp0GJqWmCGGw2JPJl10ohGvv9DjUmcNNtq1I5+EOxdCpkD0PzJYxXEA2vOdRFl0Fx/eIgh/+49q9Osk= X-Received: by 2002:a05:6512:3d06:b0:510:2556:db5b with SMTP id d6-20020a0565123d0600b005102556db5bmr158545lfv.73.1706230520580; Thu, 25 Jan 2024 16:55:20 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <20240125162558.77a3cde7@venus.private.rrbrussell.com> In-Reply-To: <20240125162558.77a3cde7@venus.private.rrbrussell.com> From: Ed Maste Date: Thu, 25 Jan 2024 19:55:08 -0500 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: "Robert R. Russell" Cc: freebsd-current@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4TLfPR0qsFz42NG X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Thu, 25 Jan 2024 at 17:26, Robert R. Russell wrote: > > FYI gpart doesn't allow you to create disklabel with more than 8 items > either. Specify the number of partitions at `gpart create` time: # mdconfig -s 1G -t swap md0 # gpart create -s bsd -n 20 md0 md0 created # for i in $(jot 19); do gpart add -t freebsd-ufs -s 1M md0; done md0a added md0b added ... md0t added # gpart show md0 => 0 2097152 md0 BSD (1.0G) 0 2048 1 freebsd-ufs (1.0M) 2048 2048 2 freebsd-ufs (1.0M) ... 36864 2048 20 freebsd-ufs (1.0M) 38912 2058240 - free - (1.0G) From nobody Fri Jan 26 08:13:23 2024 X-Original-To: freebsd-current@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 4TLr7N3TJDz57s5J for ; Fri, 26 Jan 2024 08:13:52 +0000 (UTC) (envelope-from Alexander@Leidinger.net) Received: from mailgate.Leidinger.net (bastille.leidinger.net [89.238.82.207]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) client-signature ECDSA (P-256)) (Client CN "mailgate.leidinger.net", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLr7N1dHtz4gYf; Fri, 26 Jan 2024 08:13:52 +0000 (UTC) (envelope-from Alexander@Leidinger.net) Authentication-Results: mx1.freebsd.org; none List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leidinger.net; s=outgoing-alex; t=1706256823; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=XEdMwBngN8F7/pcX+6sT0YFYsA+bMKlMAmfWKOQX2iA=; b=iRA5x9i/qlcgfRUqDYNyheqVYf/zaMoRrxttZYrEGHAae07/S8G/8gUhNA9YJtk0jVqKfP MS148yIiBrxEVipzf1gDnA2flSaDEuZgkrXjSdQkUV8NzKDEZY2a/v7oZlOc/G3pIYwV6h 9662zTcrN8H3z1CHqxQ8BjobruIz9uCTk85UrprJJp+m5wKWBpqqsCbdsPh2UjWJMUR1ER xeuD5sNSn2ak2zIcgvGtbCeaxKqwOqZFNqw4a1/IwtedOjc9mH+xyp/m6GjGd5T++FxLJF cMQY1xmwh606/gz25LJIKjz4TBRHWEsCzTdNvoUIgnFx6ZD9qZ4TEVILgtjOCQ== Date: Fri, 26 Jan 2024 09:13:23 +0100 From: Alexander Leidinger To: "Rodney W. Grimes" Cc: Warner Losh , Ed Maste , FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: <202401251749.40PHnu4E002568@gndrsh.dnsmgr.net> References: <202401251749.40PHnu4E002568@gndrsh.dnsmgr.net> Message-ID: Organization: No organization, this is a private message. Content-Type: multipart/signed; protocol="application/pgp-signature"; boundary="=_b987b87161fd71d7c7851653ddedd759"; micalg=pgp-sha256 X-Rspamd-Queue-Id: 4TLr7N1dHtz4gYf X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:34240, ipnet:89.238.64.0/18, country:DE] This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --=_b987b87161fd71d7c7851653ddedd759 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Am 2024-01-25 18:49, schrieb Rodney W. Grimes: >> On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: >> >> > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes >> > wrote: >> > > >> > > > These will need to be addressed before actually removing any of these >> > > > binaries, of course. >> > > >> > > You seem to have missed /rescue. Now think about that long >> > > and hard, these tools classified as so important that they >> > > are part of /rescue. Again I can not stress enough how often >> > > I turn to these tools in a repair mode situation. >> > >> > I haven't missed rescue, it is included in the work in progress I >> > mentioned. Note that rescue has included gpart since 2007. >> > >> >> What can fdisk and/or disklabel repair that gpart can't? > > As far as I know there is no way in gpart to get to the > MBR cyl/hd/sec values, you can only get to the LBA start > and end values: > sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) > start 63, size 8388513 (4095 Meg), flag 80 (active) > beg: cyl 0/ head 1/ sector 1; > end: cyl 1023/ head 15/ sector 63 > > gpart show ada0 > => 63 8388545 ada0 MBR (4.0G) > 63 8388513 1 freebsd [active] (4.0G) > 8388576 32 - free - (16K) What are you using cyl/hd/sec values for on a system which runs FreeBSD current or on which you would have to use FreeBSD-current in case of a repair need? What is the disk hardware on those systems that you still need cyl/hd/sec and LBA doesn't work? Serious questions out of curiosity. Bye, Alexander. -- http://www.Leidinger.net Alexander@Leidinger.net: PGP 0x8F31830F9F2772BF http://www.FreeBSD.org netchild@FreeBSD.org : PGP 0x8F31830F9F2772BF --=_b987b87161fd71d7c7851653ddedd759 Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc; size=833 Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEER9UlYXp1PSd08nWXEg2wmwP42IYFAmWzabQACgkQEg2wmwP4 2IYBERAAiPW9C5KJet7l/yfjJh6rj3dN4RuQXM39kfOfABMDA/VDH1gyx8N9gbvy jIBymEfrIfYZlRsDkY4BOhf30FnKhT4qV8FmzlZ3Z7fQBE1VtSkscZrQ9TOxCvg/ xJd2QPTEXwa6m1A2o3WBjAgGHKHp6I51zLu0PbGJuGe1YBuStmM0H0djkNO2gRJN xTLkeRiKAvefXctfiO/IqpjEtRoWLVoiuF/CtjDxSfz9cQjvsR+B6k0p9kzjc5P0 VM96npv3GtBDYvDOMOlulvk2F7KFUJrRaabCJr73CD+oUM528XrJbEEesgHC+xFu 0siWGpH4MChX3zdXPDoFoXewGYK7BzDxOz6WL4S0sLR3kQ+00GKogHAAj0ascx00 bD+1RfmH3iFfPzCbCB1HXHlwWzpZe+KBbjJGdSvfJoLVSQJzql2rQPAI9DWhHOFX wtG1j9k6rPyyCbjK/oVgdqBb9Htd4PlwnvJAV4qoPUDU2Wms3w+Gg6s0toG7ts8E tz3O1E38YIf/vDTS2tvBQ6um9RIzJ7Qqsry7yMP3PI4SsK06fjfAfmq9gDfyBZt/ UOXqn7dt+BsG6UQnQn7VXPAcDTtVx6CDNmjlq4Kxdny7Fsv7KVjoi9BgqoeWtqP7 G6X/kBar5iWg2048hvJUnmK288OA6b/0vX0uVvrU4JAE/vUB5Aw= =Zh4g -----END PGP SIGNATURE----- --=_b987b87161fd71d7c7851653ddedd759-- From nobody Fri Jan 26 09:37:55 2024 X-Original-To: freebsd-current@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 4TLt0S25xPz580gq for ; Fri, 26 Jan 2024 09:38:00 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TLt0S1VMKz4nPl; Fri, 26 Jan 2024 09:38:00 +0000 (UTC) (envelope-from se@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706261880; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9feZkA1Yw+5bIimCHAR0bEWMSBWBRVgG925yEe5zkBo=; b=slNBpjiZFe6+nw8ZUQRK6YSzBu2Mo5bzuw65cu3R5hvWS4bzre9NERGVAw5zNFovQ48/gA yL6jqGIwV9J0c/557dlISnLr+09FlHMEflGsu+swnEmXdasaL/zWN1UKwlmYu8UVt1nQTS arRrXioQGV3aK7XcEPnzPn6A4OatbiNfF1xlfsMqu/gEzJY6i8APqTwUN6a6QjZ39k9BfX gUYdaH4N/Jmg4o9GF+aQP0L4LCtQKLJrje8m6iNnW7rCakr8YzHgCkPphJOZzujLdvRApv dWgn30O9ykz0M1gihTddpYIyeLcfLLZd5b5w3W9Tt2dhk8VhOkORCDO0TciFfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706261880; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9feZkA1Yw+5bIimCHAR0bEWMSBWBRVgG925yEe5zkBo=; b=wzVSFDy8SJKQQtpLgwTP/FcZh2Apz5aj9d7hj2+27cZexbn2syfkqqYdBRXYzig7hBjRts yMbKUgoGgP/y6gebidWk9wtvzmT+iWJn5COXeHQ+zOktoHWqeeyO2h7IjN356LBCNeN124 bfBXxoM7Kzy7Y6IxUfbaBHykBIxglZfejt8zuztgSGtC8RnxjKrZTUtpVCACd+IlGdCQiQ tZgSy9Ag4dDWLTgbEKbSzIYTbvyVAq4cUwAqFUMz9RadX8r9ssKTzGQQUaTLkHI85UZNmQ 98zURVSG1BHl5ja8kFU+6zdU1vcMXMPrcHFcHraUdSqrE2c2/NGdgjwBt8e7Kw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1706261880; a=rsa-sha256; cv=none; b=GKxnhUxmfP7uvpIPnN6flUqsyfW82jHxwMijkJ/Jlp6LPTztQ9vTCbIUZMJlIyktB4orfp lh1GPB3btnwtSoRh+zWFDKZB+JhtwdgNMnIPKsloj1USf4QpuO34fnpv4kEPOUC4DBQvzD Lp+f+kdf18i+vFTwTLrisHXcfTaBeRAco/9gH1MYwLiz12812xgmDPNkmyuVFyHG+eJgSO vt0vIdN0P4ik7V+Zy5gBbQCkEqkQJF/IhmcCif6+qdHzkO/VzJ2D9IOMNtuYlqT41EUqxe v2IwH4IxrUezVG/FFvZUIUIu0RJq8IbwRxJnYz4lu9QFvsqwC33jXfYvyjCosA== Received: from [IPV6:2003:cd:5f2c:9d00:fc60:6ac1:1a5b:ca5] (p200300cd5f2c9d00fc606ac11a5b0ca5.dip0.t-ipconnect.de [IPv6:2003:cd:5f2c:9d00:fc60:6ac1:1a5b:ca5]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: se/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TLt0R0Xt2zRMf; Fri, 26 Jan 2024 09:37:58 +0000 (UTC) (envelope-from se@FreeBSD.org) Message-ID: Date: Fri, 26 Jan 2024 10:37:55 +0100 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Stefan Esser Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Content-Language: de-DE To: Ed Maste , Warner Losh References: Cc: FreeBSD CURRENT In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Am 25.01.24 um 16:38 schrieb Ed Maste: > On Wed, 24 Jan 2024 at 12:30, Warner Losh wrote: >> >> Those are the only users in the tree, but not for long :) > > I have some reviews open to remove some old fdisk / diskabel / > bsdlabel invocations from the tree. > > With those applied, for fdisk I see the following references > (excluding sbin/fdisk/* and comments, old examples, etc.): > > contrib/netbsd-tests/sbin/gpt/t_gpt.sh This test contains NetBSD specific details and will not run on FreeBSD. > tests/sys/cddl/zfs/bin/zpool_smi.ksh More than 99% of the tests in tests/sys/cddl/zfs are skipped, including this one, which relies on commands that do not exist on FreeBSD. > For bsdlabel / disklabel: > > sbin/growfs/tests/legacy_test.pl This test could easily be changed to use gpart. > tools/regression/msdosfs/msdosfstest-2.sh Trivially fixed. > tools/regression/tmpfs/t_vnd Trivially fixed. > tools/tools/nanobsd/legacy.sh Does already use gpart and could easily be fixed. > contrib/netbsd-tests/kernel/t_umount.sh > contrib/netbsd-tests/kernel/t_umountstress.sh > contrib/netbsd-tests/sbin/gpt/t_gpt.sh These are unused and won't run without modification. > sbin/newfs/runtest00.sh > sbin/newfs/runtest01.sh Unused and do not run on a current version of FreeBSD. > These will need to be addressed before actually removing any of these > binaries, of course. I could fix those that are actually usable and installed on a current FreeBSD system within at most 1 hour. >> I wouldn't object to making these ports, but both these programs use 'sekret' >> bits from the kernel that might not remain exposed as we clean things up. >> Though the IOCTLs they do (or used to do) may no longer be relevant. It's >> been so long that I've forgotten.... > > If we eventually stop exporting those kernel interfaces the tools > would fail anyway, so IMO we can keep providing the kernel interfaces > along with the headers etc, and keep building from source until/unless > we drop support altogether. The bsdlabel/disklabel/fdisk programs could be rewritten using gpart without too much effort, at least for the use cases that have not become obsolete (e.g. CHS specifications) and only for use in scripts (i.e. no fdisk interactive edit mode). Even parsing of the disktab format and a conversion to gpart backup format for use by gpart restore should not be too hard. That would keep the commands available for those that use them in scripts outside the FreeBSD sources, but would also allow to remove the kernel interfaces used by those legacy tools. I'd be willing to write those emulations of legacy tools, if there is interest in going that way ... Regards, STefan From nobody Fri Jan 26 15:21:30 2024 X-Original-To: freebsd-current@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 4TM1d63vP6z58K2J for ; Fri, 26 Jan 2024 15:21:46 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM1d61pcRz4RCB for ; Fri, 26 Jan 2024 15:21:46 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-5101f2dfd97so679400e87.2 for ; Fri, 26 Jan 2024 07:21:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706282504; x=1706887304; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=KpVcOQMjlRPnvqNhp1Xp5bcniG5NujtrkAFBj0ynLrw=; b=0HK3t9yfp2xoF2FCdWqMws8LPu9uCjHUEstV8JF7M9t6UBXJM4E66HAKSfm4uz1XrC tskLWUrTblU+COAz5sMenjotOO0NHvq+IYSJHlOMjfs1VNyU9simWu7Lrc6EzpFNSMCT k6gumriX4ooqMivqpy01e0YumyFt6xdLI7L1f7YVLWJDP5qHH1C4hOFIoQtsLKhhZDIQ md5uesPFhoz/JcUo1GzpbApyY5CG7MDKwVXapwS1tS/ldGlCEOXCjg6dHoOhzM5Vo6FD k5zrWeGzeS+pwXB2J4T2Y/RBKx+0P2tSm1kWgSktgTZM3ZiVBVFHh+zvrXk19QNvZT8g t1dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706282504; x=1706887304; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KpVcOQMjlRPnvqNhp1Xp5bcniG5NujtrkAFBj0ynLrw=; b=qtHaFozIrOjv8E3hjqwZ3l8LxYAmvAEFqNc9fANtrNlroWxjKIcieXnMhb7Zcj2roF U1EhyD+rCWhRZNM0CejJIRCDlA9V/Ve8roTE5VLdyKerQfer1IJeUVbcbUI4N5u9DHoo f7C0nF3B0PAbSGkytGUI4fqcc5E9ZHO+1ArvT/zKx16Yba6hydCGGo6Z4V1FpMLPVw/Y JHtVzS8ocwCAZ4bJafK0wlmz554cYPWoxj/5sFu0UQYvFyeoQPLRskNmmPRlUdxP7shg V3sAfdj7Io7EhNQSZ9ZrIefsJe2Hkm3taKQy/vhZzUqkHXNEz7xmd7+ePt51cDGcHeNW D/QQ== X-Gm-Message-State: AOJu0YzdIoikkUGenC/Pu/7SsKXkeHb3CnUm7AiBhIb6HoG7R/0duB6Y hPkArz/VfMaHYrhVV31nk/TCSqUob7xTuvz3Da6hEGoSJWa8t9iGzTORPF7ySCTzrACyhQ1pKGf su5cZdi4/kAFFT4KbwEANJRQEAnqpBtOLxhsr5td3yHDaJpzA84fEXw== X-Google-Smtp-Source: AGHT+IEIHQYyA27oxE44/G117Px9ezIUg6yKaIv2z+DA3gQXBdFgQ1C5vyo6PjZyD4lLpQmIEiMlhCFVRImpM6VJG6U= X-Received: by 2002:a05:651c:32f:b0:2cf:457e:61fa with SMTP id b15-20020a05651c032f00b002cf457e61famr873500ljp.37.1706282503805; Fri, 26 Jan 2024 07:21:43 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401251749.40PHnu4E002568@gndrsh.dnsmgr.net> In-Reply-To: <202401251749.40PHnu4E002568@gndrsh.dnsmgr.net> From: Warner Losh Date: Fri, 26 Jan 2024 08:21:30 -0700 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: "Rodney W. Grimes" Cc: Ed Maste , FreeBSD Current Content-Type: multipart/alternative; boundary="00000000000086b18b060fdadaa8" X-Rspamd-Queue-Id: 4TM1d61pcRz4RCB X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --00000000000086b18b060fdadaa8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jan 25, 2024, 10:49=E2=80=AFAM Rodney W. Grimes < freebsd-rwg@gndrsh.dnsmgr.net> wrote: > > On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: > > > > > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > > > wrote: > > > > > > > > > These will need to be addressed before actually removing any of > these > > > > > binaries, of course. > > > > > > > > You seem to have missed /rescue. Now think about that long > > > > and hard, these tools classified as so important that they > > > > are part of /rescue. Again I can not stress enough how often > > > > I turn to these tools in a repair mode situation. > > > > > > I haven't missed rescue, it is included in the work in progress I > > > mentioned. Note that rescue has included gpart since 2007. > > > > > > > What can fdisk and/or disklabel repair that gpart can't? > > As far as I know there is no way in gpart to get to the > MBR cyl/hd/sec values, you can only get to the LBA start > and end values: > In the last 20 years when have you needed this? LBA start/end is all that's relevant these days. The CHS values are completely ignored by FreeBSD. We use packet mode in the boot loader since about Pentium 150MH= z or so. I did have to change these back in the day when we inferred what the CHS geometry was from the drive by looking at the MBR's partitions that you knew (assumed really) started on a cylinder value. This hasn't mattered in FreeBSD since sos rewrote ata the second time. DOS had to do these things because old-school MFM, RLL, et= c disks couldn't return their CHS, so DOS had to enshrine them in the MBR to get a hint (or have the drive type BIOS to just know). Since we use LBA exclusively, none of this matter to FreeBSD. I've certainly never needed to tweak these in single user mode on an emergency basis. Why? Because you can't get to single user mode because the kernel won't even load if you have these wrong. So either you are booting some rescue disk to fix that (in which case you can craft it for your special environment)., or you are creating a special thing in multi-user, so you can install For all these use cases, fdisk as a port is fine. sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) > start 63, size 8388513 (4095 Meg), flag 80 (active) > beg: cyl 0/ head 1/ sector 1; > end: cyl 1023/ head 15/ sector 63 > > gpart show ada0 > =3D> 63 8388545 ada0 MBR (4.0G) > 63 8388513 1 freebsd [active] (4.0G) > 8388576 32 - free - (16K) > > Now I have learned that gpart backup/restore CAN get me > at least basic bsdlabel -e function, but again it has > no access to all the stuff stored that showsup with > bsdlabel -A. Which this is now the third time I have > asked "how do I do bsdlabel -A -e with gpart"? One > person at least answered that with: > gpart backup GEOM >backup > vi backup > gpart restore GEOM > OK Let's look at these extra fields: # /dev/md0: type: unknown disk: amnesiac label: flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 255 sectors/cylinder: 16065 cylinders: 130 sectors/unit: 2097152 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # milliseconds track-to-track seek: 0 # milliseconds drivedata: 0 type isn't used at all in FreeBSD. disk is for /etc/disktab, something we've not really needed since FreeBSD 3 or so. label can be set with gpart add/modify -l. I've never used flags. Can't speak to that. bytes/sector: This is a physical property of the drive, not the label. You can find it with gpart list: % gpart list md0 .... Consumers: 1. Name: md0 Mediasize: 1073741824 (1.0G) Sectorsize: 512 The rest of this/that are reported or you can do math: fwheads: 255 <- tracks/cylinder fwsectors: 63 <-- sectors/track last: 2097151 <-- sectors/unit - 1 now, cylenders and sectors/cylinder you can compute. geom does this for reading/writing disk labels. rpm is hard coded to 3600 these days. FreeBSD doesn't care. The rest are for interleaving, which FreeBSD doesn't do, so we don't care. So you can influence the values, but they aren't used for anything by FreeBSD that matters. What if you need them for something else? Then just use the disklabel port. You'll never need to hack them tn single user mode, so you can use the port for all use cases. Warner > Warner > -- > Rod Grimes > rgrimes@freebsd.org > --00000000000086b18b060fdadaa8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Thu, Jan 25, 2024, 10:49=E2=80=AFA= M Rodney W. Grimes <freebsd-rwg@gndrsh.dnsmgr.net> wrote:
> On Thu, Jan 25, 2024, 9:11?AM Ed Maste <em= aste@freebsd.org> wrote:
>
> > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes
> > <freebsd-rwg@gndrsh.dnsmgr.net> wrote:
> > >
> > > > These will need to be addressed before actually removin= g any of these
> > > > binaries, of course.
> > >
> > > You seem to have missed /rescue.=C2=A0 Now think about that = long
> > > and hard, these tools classified as so important that they > > > are part of /rescue.=C2=A0 Again I can not stress enough how= often
> > > I turn to these tools in a repair mode situation.
> >
> > I haven't missed rescue, it is included in the work in progre= ss I
> > mentioned. Note that rescue has included gpart since 2007.
> >
>
> What can fdisk and/or disklabel repair that gpart can't?

As far as I know there is no way in gpart to get to the
MBR cyl/hd/sec values, you can only get to the LBA start
and end values:

In the last 20 years when have you needed this?

= LBA start/end is all that's relevant these days. The CHS values are com= pletely ignored
by FreeBSD. We use packet mode in the boot loader= since about Pentium 150MHz
or so.

I did= have to change these back in the day when we inferred what the CHS geometr= y
was from the drive by looking at the MBR's partitions that = you knew (assumed really)
started on a cylinder value. This hasn&= #39;t mattered in FreeBSD since sos rewrote ata
the second time. = DOS had to do these things because old-school MFM, RLL, etc
disks= couldn't return their CHS, so DOS had to enshrine them in the MBR to g= et
a hint (or have the drive type BIOS to just know). Since we us= e LBA exclusively,
none of this matter to FreeBSD.
=
I've certainly never needed to tweak these in single use= r mode on an emergency
basis. Why? Because you can't get to s= ingle user mode because the kernel won't
even load if you hav= e these wrong. So either you are booting some rescue disk
to fix = that (in which case you can craft it for your special environment)., or you= are
creating a special thing in multi-user, so you can install= =C2=A0 For all these use cases, fdisk
as a port is fine.

<= blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px= #ccc solid;padding-left:1ex"> sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
=C2=A0 =C2=A0 start 63, size 8388513 (4095 Meg), flag 80 (active)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 beg: cyl 0/ head 1/ sector 1;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 end: cyl 1023/ head 15/ sector 63

gpart show ada0
=3D>=C2=A0 =C2=A0 =C2=A063=C2=A0 8388545=C2=A0 ada0=C2=A0 MBR=C2=A0 (4.0= G)
=C2=A0 =C2=A0 =C2=A0 =C2=A063=C2=A0 8388513=C2=A0 =C2=A0 =C2=A01=C2=A0 free= bsd=C2=A0 [active]=C2=A0 (4.0G)
=C2=A0 8388576=C2=A0 =C2=A0 =C2=A0 =C2=A032=C2=A0 =C2=A0 =C2=A0 =C2=A0 - fr= ee -=C2=A0 (16K)

Now I have learned that gpart backup/restore CAN get me
at least basic bsdlabel -e function, but again it has
no access to all the stuff stored that showsup with
bsdlabel -A.=C2=A0 Which this is now the third time I have
asked "how do I do bsdlabel -A -e with gpart"?=C2=A0 One
person at least answered that with:
gpart backup GEOM >backup
vi backup
gpart restore GEOM

=
OK Let's look at these extra fields:

# /d= ev/md0:
type: unknown
disk: amnesiac
label:
flags:
bytes/se= ctor: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder:= 16065
cylinders: 130
sectors/unit: 2097152
rpm: 3600
interleav= e: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # millisecondstrack-to-track seek: 0 # milliseconds
drivedata: 0

t= ype isn't used at all in FreeBSD.
disk is for /etc/disktab, s= omething we've not really needed since FreeBSD 3 or so.
label= can be set with gpart add/modify -l.
I've never used flags. = Can't speak to that.
bytes/sector: This is a physical propert= y of the drive, not the label.=C2=A0 You can find it with gpart list:
=
=C2=A0=C2=A0 % gpart list md0
=C2=A0=C2=A0 ....
= =C2=A0=C2=A0 Consumers:
=C2=A0=C2=A0 1. Name: md0
=C2=A0 =C2=A0=C2=A0= =C2=A0 Mediasize: 1073741824 (1.0G)
=C2=A0 =C2=A0 =C2=A0 Sectorsize: 512=
The rest of this/that are reported or you can do math:
=
=C2=A0=C2=A0=C2=A0 fwheads: 255 <- tracks/cylinder
=C2=A0=C2=A0= =C2=A0 fwsectors: 63 <-- sectors/track
=C2=A0=C2=A0=C2=A0 last: 20971= 51 <-- sectors/unit - 1
now, cylenders and sectors/cylinder yo= u can compute. geom does this for reading/writing disk labels.
rp= m is hard coded to 3600 these days. FreeBSD doesn't care.
The= rest are for interleaving, which FreeBSD doesn't do, so we don't c= are.

So you can influence the values, but they are= n't used for anything by FreeBSD
that matters.

=
What if you need them for something else? Then just use the disk= label port.
You'll never need to hack them tn single user mod= e, so you can use the port for all use cases.
=
Warner


> Warner
--
Rod Grimes=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0rgrimes@freebsd.org
--00000000000086b18b060fdadaa8-- From nobody Fri Jan 26 15:24:32 2024 X-Original-To: freebsd-current@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 4TM1hV05qlz58KMC for ; Fri, 26 Jan 2024 15:24:42 +0000 (UTC) (envelope-from madis555@hot.ee) Received: from SMTPOUT09.DKA.mailcore.net (smtpout09.dka.mailcore.net [194.19.134.9]) (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-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtpout09.dka.mailcore.net", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM1hS2ctdz4RwD for ; Fri, 26 Jan 2024 15:24:40 +0000 (UTC) (envelope-from madis555@hot.ee) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=online.ee header.s=mailcore header.b=N2MMx451; dmarc=pass (policy=reject) header.from=hot.ee; spf=pass (mx1.freebsd.org: domain of madis555@hot.ee designates 194.19.134.9 as permitted sender) smtp.mailfrom=madis555@hot.ee Received: from SMTP.DKA.mailcore.net (unknown [10.1.0.53]) by SMTPOUT01.DKA.mailcore.net (Postfix) with ESMTP id 6A7A1E024F; Fri, 26 Jan 2024 16:24:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=online.ee; s=mailcore; t=1706282677; bh=GNzE+DZ62syBR4SrsiVCZl/b4shF3mqcfexOXDyyrAw=; h=Date:From:To:Subject:In-Reply-To:References:From; b=N2MMx4512gSo6kHDrvUiaqXWRBfXFK1NBTMNS73HDFw4Qp6cjh4sr2T1X47KJcRwh 8+J+e4NxG4emd53vA7G/RE8oYzi6E7xSLKpfXKHUtB5xNgud58DCgDBi41FEYxHovT nXh0rnfnt7y9i9+45oKkyOIKz/B69QuGZkPies+r58oqfp7VTC9He73AqAK7FYRih3 73V4qvnobXpk8AdNbYvypERfJQdxId1GOUB/xhHv5GbcgXLqDFh6CCCmCUq8V6ls+q zqxMfhzDxDRcSLLyGCWFGO4b3m7+Q8KmMiVxq/u0TIQiM5TqXyjZb/QpLDlOFvlfc0 RS91aojAIFX1A== Received: from [127.0.0.1] (65-43-196-88.dyn.estpak.ee [88.196.43.65]) by SMTP.DKA.mailcore.net (Postfix) with ESMTPSA id 3D277400B2; Fri, 26 Jan 2024 16:24:37 +0100 (CET) Date: Fri, 26 Jan 2024 17:24:32 +0200 From: Sulev-Madis Silber To: freebsd-current@freebsd.org Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) User-Agent: K-9 Mail for Android In-Reply-To: References: Message-ID: <53EA2837-A30A-49D9-9897-E99FB471D82E@hot.ee> List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.89 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.89)[-0.887]; DMARC_POLICY_ALLOW(-0.50)[hot.ee,reject]; R_SPF_ALLOW(-0.20)[+ip4:194.19.134.0/25]; R_DKIM_ALLOW(-0.20)[online.ee:s=mailcore]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; DKIM_TRACE(0.00)[online.ee:+]; ASN(0.00)[asn:3308, ipnet:194.19.128.0/18, country:SE]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; FREEMAIL_FROM(0.00)[hot.ee]; TO_DN_NONE(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; FREEMAIL_ENVFROM(0.00)[hot.ee] X-Rspamd-Queue-Id: 4TM1hS2ctdz4RwD call me new, i only started with 4=2E6, being 19 years old at that time, wh= ich is pretty good i think i've always found anything but gpart way too confusing to use=2E by that t= ime i started with fbsd, chs was also gone for good=2E hence, no need, and = when gpart came, i just switched over=2E and i consider myself a slow adapt= er to some of new things also, why would ufs users need to be immediately assumed to be only using = anything but gpart? it's not like ufs is some old legacy=2E also i don't re= ally believe you could really use 15 with all the features except of some d= isk tools=2E on all new hw=2E on old hw, you won't be using 15=2E because f= disk is not the only thing we removed over years=2E unsure if sad or happy = path=2E nbsd seems to support everything still i see=2E i don't know, maybe= i should have really started with actual unix where i would have gotten li= felong preference to fdisk and disklabel=2E high respect if those ones read= this tho but yea, from all the replies, only thing i see is fdisk and disklabel is = more comfortable to use, while giving no technical benefits at all=2E fuck = knows if that's the reason to keep them then i recall myself objecting before when there was call to remove grdc and po= m=2E can't say about pom, i've used it for fun sometimes=2E grdc found use = when checking if times are in sync=2E but those really belong to ports=2E i= t not like those disappear or get banned=2E i could put them there myself, = if it comes up again and i still miss them we have moved a lot of things to ports already, since 4=2E6=2E altho, if p= kgbase comes along, some argue against it too, it would be hard to draw a l= ine where the "base" ends=2E what's "officially" supported and what's not but yeah, i can confirm that a lot of changes have annoyed me=2E switch to= pkgng=2E or that libxo breaks stuff=2E pkgng now works i think, xo is stil= l crapshoot=2E despite, i admit i like being able to get json from sysutils so yeah changes kind of suck, but they still happen? From nobody Fri Jan 26 16:02:30 2024 X-Original-To: freebsd-current@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 4TM2XS6X3yz58P5Y for ; Fri, 26 Jan 2024 16:02:48 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM2XS2QPBz4Z7K; Fri, 26 Jan 2024 16:02:47 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40QG2Udd006211; Fri, 26 Jan 2024 08:02:30 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40QG2Upe006210; Fri, 26 Jan 2024 08:02:30 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401261602.40QG2Upe006210@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: Alexander Leidinger Date: Fri, 26 Jan 2024 08:02:30 -0800 (PST) CC: "Rodney W. Grimes" , Warner Losh , Ed Maste , FreeBSD Current X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TM2XS2QPBz4Z7K X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] -- Start of PGP signed section. > Am 2024-01-25 18:49, schrieb Rodney W. Grimes: > >> On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: > >> > >> > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > >> > wrote: > >> > > > >> > > > These will need to be addressed before actually removing any of these > >> > > > binaries, of course. > >> > > > >> > > You seem to have missed /rescue. Now think about that long > >> > > and hard, these tools classified as so important that they > >> > > are part of /rescue. Again I can not stress enough how often > >> > > I turn to these tools in a repair mode situation. > >> > > >> > I haven't missed rescue, it is included in the work in progress I > >> > mentioned. Note that rescue has included gpart since 2007. > >> > > >> > >> What can fdisk and/or disklabel repair that gpart can't? > > > > As far as I know there is no way in gpart to get to the > > MBR cyl/hd/sec values, you can only get to the LBA start > > and end values: > > sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) > > start 63, size 8388513 (4095 Meg), flag 80 (active) > > beg: cyl 0/ head 1/ sector 1; > > end: cyl 1023/ head 15/ sector 63 > > > > gpart show ada0 > > => 63 8388545 ada0 MBR (4.0G) > > 63 8388513 1 freebsd [active] (4.0G) > > 8388576 32 - free - (16K) > > What are you using cyl/hd/sec values for on a system which runs FreeBSD > current or on which you would have to use FreeBSD-current in case of a > repair need? What is the disk hardware on those systems that you still > need cyl/hd/sec and LBA doesn't work? Serious questions out of > curiosity. Your making way to many assuptions, I deal with all sorts of operating systems, not just FreeBSD, and I often many drives from many systems connected to a FreeBSD box doing work to repair various anomolyies. FreeBSD is my swiss army knife of choice for fixing things. UEFI CMS and BIOS emplemntations can get very confused about a disk if these values are not properly set. Also make a big mental note that GPT is really just a BIOS type 0x238 MBR entry and if that entry is messed up you are screwed. I am not sure gpart has anyway to fix the protective MBR other than to rewrite it, probably destroying access to the whole contents of the disk. I am getting rather tired of hearing from people who just simply do not use these tools or can not phantom there are legitamate uses for them. But it is evident the project has decided to remote them to ports no matter what, so be it, yet another reason for me to use less FreeBSD and more of someone elses product. > > Bye, > Alexander. > > -- > http://www.Leidinger.net Alexander@Leidinger.net: PGP 0x8F31830F9F2772BF > http://www.FreeBSD.org netchild@FreeBSD.org : PGP 0x8F31830F9F2772BF -- End of PGP section, PGP failed! -- Rod Grimes rgrimes@freebsd.org From nobody Fri Jan 26 16:09:55 2024 X-Original-To: freebsd-current@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 4TM2hq2ny5z58PSv for ; Fri, 26 Jan 2024 16:10:03 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM2hq14L4z4cG5; Fri, 26 Jan 2024 16:10:02 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40QG9t6m006227; Fri, 26 Jan 2024 08:09:55 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40QG9th8006226; Fri, 26 Jan 2024 08:09:55 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401261609.40QG9th8006226@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: Stefan Esser Date: Fri, 26 Jan 2024 08:09:55 -0800 (PST) CC: Ed Maste , Warner Losh , FreeBSD CURRENT X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TM2hq14L4z4cG5 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] > Am 25.01.24 um 16:38 schrieb Ed Maste: > > On Wed, 24 Jan 2024 at 12:30, Warner Losh wrote: > >> > >> Those are the only users in the tree, but not for long :) > > > > I have some reviews open to remove some old fdisk / diskabel / > > bsdlabel invocations from the tree. > > > > With those applied, for fdisk I see the following references > > (excluding sbin/fdisk/* and comments, old examples, etc.): > > > > contrib/netbsd-tests/sbin/gpt/t_gpt.sh > > This test contains NetBSD specific details and will not run > on FreeBSD. > > > tests/sys/cddl/zfs/bin/zpool_smi.ksh > > More than 99% of the tests in tests/sys/cddl/zfs are skipped, > including this one, which relies on commands that do not exist > on FreeBSD. > > > For bsdlabel / disklabel: > > > > sbin/growfs/tests/legacy_test.pl > > This test could easily be changed to use gpart. > > > tools/regression/msdosfs/msdosfstest-2.sh > > Trivially fixed. > > > tools/regression/tmpfs/t_vnd > > Trivially fixed. > > > tools/tools/nanobsd/legacy.sh > > Does already use gpart and could easily be fixed. > > > contrib/netbsd-tests/kernel/t_umount.sh > > contrib/netbsd-tests/kernel/t_umountstress.sh > > contrib/netbsd-tests/sbin/gpt/t_gpt.sh > > These are unused and won't run without modification. > > > sbin/newfs/runtest00.sh > > sbin/newfs/runtest01.sh > > Unused and do not run on a current version of FreeBSD. > > > These will need to be addressed before actually removing any of these > > binaries, of course. > > I could fix those that are actually usable and installed on > a current FreeBSD system within at most 1 hour. > > >> I wouldn't object to making these ports, but both these programs use 'sekret' > >> bits from the kernel that might not remain exposed as we clean things up. > >> Though the IOCTLs they do (or used to do) may no longer be relevant. It's > >> been so long that I've forgotten.... > > > > If we eventually stop exporting those kernel interfaces the tools > > would fail anyway, so IMO we can keep providing the kernel interfaces > > along with the headers etc, and keep building from source until/unless > > we drop support altogether. > > The bsdlabel/disklabel/fdisk programs could be rewritten using > gpart without too much effort, at least for the use cases that That would be wonderful. Even just getting it to spit out the FULL MBR values that are in a protective 0x238 MBR would go along way to diagnose some corrupt GPT disks. > have not become obsolete (e.g. CHS specifications) and only for > use in scripts (i.e. no fdisk interactive edit mode). You are fooling yourself if you think an MBR and CHS values are obsolete. GPT *IS* a type 0x238 MBR and see how many BIOSes you can crash by writting garbage (Especially 0x0) to the CHS values. That MBR must have proper values, and you cant just ignore that they exist. > > Even parsing of the disktab format and a conversion to gpart > backup format for use by gpart restore should not be too hard. > > That would keep the commands available for those that use them > in scripts outside the FreeBSD sources, but would also allow to > remove the kernel interfaces used by those legacy tools. > > I'd be willing to write those emulations of legacy tools, if > there is interest in going that way ... I would be interested in seeing these. For me gpart does do a lot of things, but it is missing some very low level stuff that is probably should have. > Regards, STefan -- Rod Grimes rgrimes@freebsd.org From nobody Fri Jan 26 16:15:36 2024 X-Original-To: freebsd-current@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 4TM2qX2QFWz58PnV for ; Fri, 26 Jan 2024 16:15:52 +0000 (UTC) (envelope-from tsoome@me.com) Received: from mr85p00im-ztdg06021201.me.com (mr85p00im-ztdg06021201.me.com [17.58.23.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 4TM2qW65xyz4dVb for ; Fri, 26 Jan 2024 16:15:51 +0000 (UTC) (envelope-from tsoome@me.com) Authentication-Results: mx1.freebsd.org; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=me.com; s=1a1hai; t=1706285750; bh=Aqpu+uiZ1RdpBDs7nX6JpipFUnTmgrl8ETyIT+6Ko3c=; h=Content-Type:Mime-Version:Subject:From:Date:Message-Id:To; b=VJ+4+wgXowMi9F3eSm80nIvFFzeCdBVeBXe8Trwysmv7jdjMi6oPfc5khjEOKMWAq 1qqucVXdOrshJXlyhbJLgkbYV3WfoAmqS8uCd84NSDZphy7nPCbGtuutomXArV0wyF Itya8Ds8V69S/kOExleygJydryp1EmAHG7bNJhnM4gLty0jwNWAGDjQWVJzks3unxC RyHA2NpQpqQLJLuLpa53MDdwpNQ5o5JqZMzSLFCea+RYUrc3jIZ+tIUXIKiUYD2Ml6 NOFKKR9hDW2MC1IiCfJszMoV7dZHONHfcSd+o8SRE8NW4wnipKN2DT2V4BaI26+xLm lp+8B51lXbSvQ== Received: from smtpclient.apple (mr38p00im-dlb-asmtp-mailmevip.me.com [17.57.152.18]) by mr85p00im-ztdg06021201.me.com (Postfix) with ESMTPSA id E32A7320284; Fri, 26 Jan 2024 16:15:48 +0000 (UTC) Content-Type: text/plain; charset=utf-8 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) From: Toomas Soome In-Reply-To: <202401261602.40QG2Upe006210@gndrsh.dnsmgr.net> Date: Fri, 26 Jan 2024 18:15:36 +0200 Cc: Alexander Leidinger , Warner Losh , Ed Maste , FreeBSD Current Content-Transfer-Encoding: quoted-printable Message-Id: <77B55963-DF54-49BC-AF2C-3A115AC76B32@me.com> References: <202401261602.40QG2Upe006210@gndrsh.dnsmgr.net> To: "Rodney W. Grimes" X-Mailer: Apple Mail (2.3774.300.61.1.2) X-Proofpoint-ORIG-GUID: 6zNcisW9tiVNOyAEtLIFFM_vvWSjlUfQ X-Proofpoint-GUID: 6zNcisW9tiVNOyAEtLIFFM_vvWSjlUfQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-01-25_14,2024-01-25_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=971 spamscore=0 adultscore=0 phishscore=0 bulkscore=0 suspectscore=0 mlxscore=0 clxscore=1011 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2401260120 X-Rspamd-Queue-Id: 4TM2qW65xyz4dVb X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:714, ipnet:17.58.16.0/20, country:US] > On 26. Jan 2024, at 18:02, Rodney W. Grimes = wrote: >=20 > -- Start of PGP signed section. >> Am 2024-01-25 18:49, schrieb Rodney W. Grimes: >>>> On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: >>>>=20 >>>>> On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes >>>>> wrote: >>>>>>=20 >>>>>>> These will need to be addressed before actually removing any of = these >>>>>>> binaries, of course. >>>>>>=20 >>>>>> You seem to have missed /rescue. Now think about that long >>>>>> and hard, these tools classified as so important that they >>>>>> are part of /rescue. Again I can not stress enough how often >>>>>> I turn to these tools in a repair mode situation. >>>>>=20 >>>>> I haven't missed rescue, it is included in the work in progress I >>>>> mentioned. Note that rescue has included gpart since 2007. >>>>>=20 >>>>=20 >>>> What can fdisk and/or disklabel repair that gpart can't? >>>=20 >>> As far as I know there is no way in gpart to get to the >>> MBR cyl/hd/sec values, you can only get to the LBA start >>> and end values: >>> sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) >>> start 63, size 8388513 (4095 Meg), flag 80 (active) >>> beg: cyl 0/ head 1/ sector 1; >>> end: cyl 1023/ head 15/ sector 63 >>>=20 >>> gpart show ada0 >>> =3D> 63 8388545 ada0 MBR (4.0G) >>> 63 8388513 1 freebsd [active] (4.0G) >>> 8388576 32 - free - (16K) >>=20 >> What are you using cyl/hd/sec values for on a system which runs = FreeBSD=20 >> current or on which you would have to use FreeBSD-current in case of = a=20 >> repair need? What is the disk hardware on those systems that you = still=20 >> need cyl/hd/sec and LBA doesn't work? Serious questions out of=20 >> curiosity. >=20 > Your making way to many assuptions, I deal with all sorts of operating > systems, not just FreeBSD, and I often many drives from many systems > connected to a FreeBSD box doing work to repair various anomolyies. > FreeBSD is my swiss army knife of choice for fixing things. >=20 > UEFI CMS and BIOS emplemntations can get very confused about a > disk if these values are not properly set. Also make a big > mental note that GPT is really just a BIOS type 0x238 MBR > entry and if that entry is messed up you are screwed. I am > not sure gpart has anyway to fix the protective MBR other > than to rewrite it, probably destroying access to the whole > contents of the disk. >=20 That does not make too much sense because PMBR is just fake partition = covering whole disk (within the data type size limit), with the hope = that MBR only tool will see all the space is allocated and will not = attempt anything silly. Right after sector 0, in sector 1 there is GPT, = followed by GPT table array =E2=80=94 that is, if anything will attempt = to write anything other into sectors 1-33 (or depending on how large is = your table array), you are in trouble as the primary GPT is destroyed. rgds, toomas > I am getting rather tired of hearing from people who just simply > do not use these tools or can not phantom there are legitamate > uses for them. But it is evident the project has decided to > remote them to ports no matter what, so be it, yet another > reason for me to use less FreeBSD and more of someone elses > product. >=20 >>=20 >> Bye, >> Alexander. >>=20 >> --=20 >> http://www.Leidinger.net Alexander@Leidinger.net: PGP = 0x8F31830F9F2772BF >> http://www.FreeBSD.org netchild@FreeBSD.org : PGP = 0x8F31830F9F2772BF > -- End of PGP section, PGP failed! >=20 > --=20 > Rod Grimes = rgrimes@freebsd.org >=20 From nobody Fri Jan 26 16:17:17 2024 X-Original-To: freebsd-current@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 4TM2sK1fGPz58Pyd for ; Fri, 26 Jan 2024 16:17:25 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM2sJ4NSCz4fRx; Fri, 26 Jan 2024 16:17:24 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40QGHHwN006267; Fri, 26 Jan 2024 08:17:17 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40QGHH8e006266; Fri, 26 Jan 2024 08:17:17 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401261617.40QGHH8e006266@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: Warner Losh Date: Fri, 26 Jan 2024 08:17:17 -0800 (PST) CC: "Rodney W. Grimes" , Ed Maste , FreeBSD Current X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TM2sJ4NSCz4fRx X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] [ Charset UTF-8 unsupported, converting... ] > On Thu, Jan 25, 2024, 10:49?AM Rodney W. Grimes < > freebsd-rwg@gndrsh.dnsmgr.net> wrote: > > > > On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: > > > > > > > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > > > > wrote: > > > > > > > > > > > These will need to be addressed before actually removing any of > > these > > > > > > binaries, of course. > > > > > > > > > > You seem to have missed /rescue. Now think about that long > > > > > and hard, these tools classified as so important that they > > > > > are part of /rescue. Again I can not stress enough how often > > > > > I turn to these tools in a repair mode situation. > > > > > > > > I haven't missed rescue, it is included in the work in progress I > > > > mentioned. Note that rescue has included gpart since 2007. > > > > > > > > > > What can fdisk and/or disklabel repair that gpart can't? > > > > As far as I know there is no way in gpart to get to the > > MBR cyl/hd/sec values, you can only get to the LBA start > > and end values: > > > > In the last 20 years when have you needed this? Last week, and probably about every other month for the last 30 years. > > LBA start/end is all that's relevant these days. The CHS values are > completely ignored > by FreeBSD. We use packet mode in the boot loader since about Pentium 150MHz > or so. WORLD != FreeBSD, please STOP trying to assume that the users OF FreeBSD are ONLY using FreeBSD!!!! > > I did have to change these back in the day when we inferred what the CHS > geometry > was from the drive by looking at the MBR's partitions that you knew > (assumed really) > started on a cylinder value. This hasn't mattered in FreeBSD since sos > rewrote ata > the second time. DOS had to do these things because old-school MFM, RLL, etc > disks couldn't return their CHS, so DOS had to enshrine them in the MBR to > get > a hint (or have the drive type BIOS to just know). Since we use LBA > exclusively, > none of this matter to FreeBSD. WORLD != FreeBSD, and weither you like it or not your BIOS and CSM and UEFI are PROPBABLY reading those values and might even do a nice divide by zero for you should you write 0 in them. > > I've certainly never needed to tweak these in single user mode on an > emergency > basis. Why? Because you can't get to single user mode because the kernel > won't > even load if you have these wrong. So either you are booting some rescue > disk > to fix that (in which case you can craft it for your special environment)., > or you are rescue disk == any FreeBSD install media from the last 20 years. your REALLY stuck in a small box Warner, please think outside that box. You keep repeating FreeBSD FreeBSD FreeBSD, I have to inform you many of us who USE FreeBSD also USE other stuff, but we prefer to have FreeBSD be our goto system for this type of work. > creating a special thing in multi-user, so you can install For all these > use cases, fdisk > as a port is fine. I really do not want to have to maintain my own distribution. > > sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) > > start 63, size 8388513 (4095 Meg), flag 80 (active) > > beg: cyl 0/ head 1/ sector 1; > > end: cyl 1023/ head 15/ sector 63 > > > > gpart show ada0 > > => 63 8388545 ada0 MBR (4.0G) > > 63 8388513 1 freebsd [active] (4.0G) > > 8388576 32 - free - (16K) > > > > Now I have learned that gpart backup/restore CAN get me > > at least basic bsdlabel -e function, but again it has > > no access to all the stuff stored that showsup with > > bsdlabel -A. Which this is now the third time I have > > asked "how do I do bsdlabel -A -e with gpart"? One > > person at least answered that with: > > gpart backup GEOM >backup > > vi backup > > gpart restore GEOM > > > > OK Let's look at these extra fields: > > # /dev/md0: > type: unknown > disk: amnesiac > label: > flags: > bytes/sector: 512 > sectors/track: 63 > tracks/cylinder: 255 > sectors/cylinder: 16065 > cylinders: 130 > sectors/unit: 2097152 > rpm: 3600 > interleave: 1 > trackskew: 0 > cylinderskew: 0 > headswitch: 0 # milliseconds > track-to-track seek: 0 # milliseconds > drivedata: 0 > > type isn't used at all in FreeBSD. > disk is for /etc/disktab, something we've not really needed since FreeBSD 3 > or so. > label can be set with gpart add/modify -l. > I've never used flags. Can't speak to that. > bytes/sector: This is a physical property of the drive, not the label. You > can find it with gpart list: > % gpart list md0 > .... > Consumers: > 1. Name: md0 > Mediasize: 1073741824 (1.0G) > Sectorsize: 512 > The rest of this/that are reported or you can do math: > fwheads: 255 <- tracks/cylinder > fwsectors: 63 <-- sectors/track > last: 2097151 <-- sectors/unit - 1 > now, cylenders and sectors/cylinder you can compute. geom does this for > reading/writing disk labels. > rpm is hard coded to 3600 these days. FreeBSD doesn't care. > The rest are for interleaving, which FreeBSD doesn't do, so we don't care. > > So you can influence the values, but they aren't used for anything by > FreeBSD > that matters. > > What if you need them for something else? Then just use the disklabel port. > You'll never need to hack them tn single user mode, so you can use the port > for all use cases. Booting a FreeBSD install image is the use case, you seem to not realize people do use that for "RESCUE". > Warner > > > > Warner > > -- > > Rod Grimes > > rgrimes@freebsd.org > > -- Rod Grimes rgrimes@freebsd.org From nobody Fri Jan 26 16:21:18 2024 X-Original-To: freebsd-current@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 4TM2xz0Wz9z58Q7M for ; Fri, 26 Jan 2024 16:21:27 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM2xy5mNpz4gnm; Fri, 26 Jan 2024 16:21:26 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40QGLIgi006286; Fri, 26 Jan 2024 08:21:18 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40QGLIv7006285; Fri, 26 Jan 2024 08:21:18 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401261621.40QGLIv7006285@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: <77B55963-DF54-49BC-AF2C-3A115AC76B32@me.com> To: Toomas Soome Date: Fri, 26 Jan 2024 08:21:18 -0800 (PST) CC: "Rodney W. Grimes" , Alexander Leidinger , Warner Losh , Ed Maste , FreeBSD Current X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TM2xy5mNpz4gnm X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] > > > > On 26. Jan 2024, at 18:02, Rodney W. Grimes wrote: > > > > -- Start of PGP signed section. > >> Am 2024-01-25 18:49, schrieb Rodney W. Grimes: > >>>> On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: > >>>> > >>>>> On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > >>>>> wrote: > >>>>>> > >>>>>>> These will need to be addressed before actually removing any of these > >>>>>>> binaries, of course. > >>>>>> > >>>>>> You seem to have missed /rescue. Now think about that long > >>>>>> and hard, these tools classified as so important that they > >>>>>> are part of /rescue. Again I can not stress enough how often > >>>>>> I turn to these tools in a repair mode situation. > >>>>> > >>>>> I haven't missed rescue, it is included in the work in progress I > >>>>> mentioned. Note that rescue has included gpart since 2007. > >>>>> > >>>> > >>>> What can fdisk and/or disklabel repair that gpart can't? > >>> > >>> As far as I know there is no way in gpart to get to the > >>> MBR cyl/hd/sec values, you can only get to the LBA start > >>> and end values: > >>> sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) > >>> start 63, size 8388513 (4095 Meg), flag 80 (active) > >>> beg: cyl 0/ head 1/ sector 1; > >>> end: cyl 1023/ head 15/ sector 63 > >>> > >>> gpart show ada0 > >>> => 63 8388545 ada0 MBR (4.0G) > >>> 63 8388513 1 freebsd [active] (4.0G) > >>> 8388576 32 - free - (16K) > >> > >> What are you using cyl/hd/sec values for on a system which runs FreeBSD > >> current or on which you would have to use FreeBSD-current in case of a > >> repair need? What is the disk hardware on those systems that you still > >> need cyl/hd/sec and LBA doesn't work? Serious questions out of > >> curiosity. > > > > Your making way to many assuptions, I deal with all sorts of operating > > systems, not just FreeBSD, and I often many drives from many systems > > connected to a FreeBSD box doing work to repair various anomolyies. > > FreeBSD is my swiss army knife of choice for fixing things. > > > > UEFI CMS and BIOS emplemntations can get very confused about a > > disk if these values are not properly set. Also make a big > > mental note that GPT is really just a BIOS type 0x238 MBR > > entry and if that entry is messed up you are screwed. I am > > not sure gpart has anyway to fix the protective MBR other > > than to rewrite it, probably destroying access to the whole > > contents of the disk. > > > > That does not make too much sense because PMBR is just fake partition covering whole disk (within the data type size limit), with the hope that MBR only tool will see all the space is allocated and will not attempt anything silly. Right after sector 0, in sector 1 there is GPT, followed by GPT table array ? that is, if anything will attempt to write anything other into sectors 1-33 (or depending on how large is your table array), you are in trouble as the primary GPT is destroyed. *SIGH* Seriously if you think it is so fake NUKE it and see how good your system works. dd if=/dev/zero of=/dev/FOO count=1 GOOD LUCK! > rgds, > toomas > > I am getting rather tired of hearing from people who just simply > > do not use these tools or can not phantom there are legitamate > > uses for them. But it is evident the project has decided to > > remote them to ports no matter what, so be it, yet another > > reason for me to use less FreeBSD and more of someone elses > > product. > > > >> > >> Bye, > >> Alexander. > >> > >> -- > >> http://www.Leidinger.net Alexander@Leidinger.net: PGP 0x8F31830F9F2772BF > >> http://www.FreeBSD.org netchild@FreeBSD.org : PGP 0x8F31830F9F2772BF > > -- End of PGP section, PGP failed! > > > > -- > > Rod Grimes rgrimes@freebsd.org -- Rod Grimes rgrimes@freebsd.org From nobody Fri Jan 26 16:40:24 2024 X-Original-To: freebsd-current@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 4TM3N875H8z58Rhd for ; Fri, 26 Jan 2024 16:40:40 +0000 (UTC) (envelope-from tsoome@me.com) Received: from mr85p00im-zteg06021901.me.com (mr85p00im-zteg06021901.me.com [17.58.23.194]) (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 4TM3N83Lcbz4l5y for ; Fri, 26 Jan 2024 16:40:40 +0000 (UTC) (envelope-from tsoome@me.com) Authentication-Results: mx1.freebsd.org; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=me.com; s=1a1hai; t=1706287238; bh=XrB31BrOipHZa3qH4shizLWKt9uekIvsNLibZz88cKs=; h=From:Message-Id:Content-Type:Mime-Version:Subject:Date:To; b=HBWTn8ZewQrplL482e+BbgBvgxPwJ4R1zIENn9Q+bLPCUKGGA4uQ4kMGurb3kFn/1 Z40iTX6Dwia7xbhdXMZ5h9EZu3LCF4zwjsJY2qcxOeeep8L0yYUVMUvBcCWfrB8xfi pcCtp5PnkeEONkhP7KGdaqDyejrH7FrCMCDQOaUPJ5DN0ZYNdaS9IznNpdx3IICkou kZafJJRlTbpOmpEsMlQnap7govST5tzbq+KYVdm+cBON8GO4QontQmfsAawo0XoLXv jHyrKuyV+7AqQnUimSg9xK4B+8iwbxVzvXT0hctAt7PKgz0PBGr9g0KvYtEfeb3Q8D o9ljDlspzbkmA== Received: from smtpclient.apple (mr38p00im-dlb-asmtp-mailmevip.me.com [17.57.152.18]) by mr85p00im-zteg06021901.me.com (Postfix) with ESMTPSA id D4D2D740215; Fri, 26 Jan 2024 16:40:36 +0000 (UTC) From: Toomas Soome Message-Id: Content-Type: multipart/alternative; boundary="Apple-Mail=_F0426EF8-7AD0-4641-9138-CFB20337145F" List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Date: Fri, 26 Jan 2024 18:40:24 +0200 In-Reply-To: <202401261621.40QGLIv7006285@gndrsh.dnsmgr.net> Cc: Alexander Leidinger , Warner Losh , Ed Maste , FreeBSD Current To: "Rodney W. Grimes" References: <202401261621.40QGLIv7006285@gndrsh.dnsmgr.net> X-Mailer: Apple Mail (2.3774.300.61.1.2) X-Proofpoint-ORIG-GUID: Q1H3WwW1LzSyIU4H-AldsjhE0TuM1aua X-Proofpoint-GUID: Q1H3WwW1LzSyIU4H-AldsjhE0TuM1aua X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-01-25_14,2024-01-25_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 bulkscore=0 adultscore=0 malwarescore=0 spamscore=0 clxscore=1015 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2401260123 X-Rspamd-Queue-Id: 4TM3N83Lcbz4l5y X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:714, ipnet:17.58.16.0/20, country:US] --Apple-Mail=_F0426EF8-7AD0-4641-9138-CFB20337145F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On 26. Jan 2024, at 18:21, Rodney W. Grimes = wrote: >=20 >>=20 >>=20 >>> On 26. Jan 2024, at 18:02, Rodney W. Grimes = wrote: >>>=20 >>> -- Start of PGP signed section. >>>> Am 2024-01-25 18:49, schrieb Rodney W. Grimes: >>>>>> On Thu, Jan 25, 2024, 9:11?AM Ed Maste = wrote: >>>>>>=20 >>>>>>> On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes >>>>>>> wrote: >>>>>>>>=20 >>>>>>>>> These will need to be addressed before actually removing any = of these >>>>>>>>> binaries, of course. >>>>>>>>=20 >>>>>>>> You seem to have missed /rescue. Now think about that long >>>>>>>> and hard, these tools classified as so important that they >>>>>>>> are part of /rescue. Again I can not stress enough how often >>>>>>>> I turn to these tools in a repair mode situation. >>>>>>>=20 >>>>>>> I haven't missed rescue, it is included in the work in progress = I >>>>>>> mentioned. Note that rescue has included gpart since 2007. >>>>>>>=20 >>>>>>=20 >>>>>> What can fdisk and/or disklabel repair that gpart can't? >>>>>=20 >>>>> As far as I know there is no way in gpart to get to the >>>>> MBR cyl/hd/sec values, you can only get to the LBA start >>>>> and end values: >>>>> sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) >>>>> start 63, size 8388513 (4095 Meg), flag 80 (active) >>>>> beg: cyl 0/ head 1/ sector 1; >>>>> end: cyl 1023/ head 15/ sector 63 >>>>>=20 >>>>> gpart show ada0 >>>>> =3D> 63 8388545 ada0 MBR (4.0G) >>>>> 63 8388513 1 freebsd [active] (4.0G) >>>>> 8388576 32 - free - (16K) >>>>=20 >>>> What are you using cyl/hd/sec values for on a system which runs = FreeBSD=20 >>>> current or on which you would have to use FreeBSD-current in case = of a=20 >>>> repair need? What is the disk hardware on those systems that you = still=20 >>>> need cyl/hd/sec and LBA doesn't work? Serious questions out of=20 >>>> curiosity. >>>=20 >>> Your making way to many assuptions, I deal with all sorts of = operating >>> systems, not just FreeBSD, and I often many drives from many systems >>> connected to a FreeBSD box doing work to repair various anomolyies. >>> FreeBSD is my swiss army knife of choice for fixing things. >>>=20 >>> UEFI CMS and BIOS emplemntations can get very confused about a >>> disk if these values are not properly set. Also make a big >>> mental note that GPT is really just a BIOS type 0x238 MBR >>> entry and if that entry is messed up you are screwed. I am >>> not sure gpart has anyway to fix the protective MBR other >>> than to rewrite it, probably destroying access to the whole >>> contents of the disk. >>>=20 >>=20 >> That does not make too much sense because PMBR is just fake partition = covering whole disk (within the data type size limit), with the hope = that MBR only tool will see all the space is allocated and will not = attempt anything silly. Right after sector 0, in sector 1 there is GPT, = followed by GPT table array ? that is, if anything will attempt to write = anything other into sectors 1-33 (or depending on how large is your = table array), you are in trouble as the primary GPT is destroyed. >=20 > *SIGH* Seriously if you think it is so fake NUKE it and see how good = your system works. >=20 > dd if=3D/dev/zero of=3D/dev/FOO count=3D1 > GOOD LUCK! >=20 It is fake in a sense that a) its role is to denote the marked space is = in use and b) in case of large disks, the PMBR end is not the same as = disk end (due to data type limit). It is entirely other matter what happens when PMBR is wiped. However, = even if you wipe it, it is trivial to restore. rgds, toomas >> rgds, >> toomas >>> I am getting rather tired of hearing from people who just simply >>> do not use these tools or can not phantom there are legitamate >>> uses for them. But it is evident the project has decided to >>> remote them to ports no matter what, so be it, yet another >>> reason for me to use less FreeBSD and more of someone elses >>> product. >>>=20 >>>>=20 >>>> Bye, >>>> Alexander. >>>>=20 >>>> --=20 >>>> http://www.Leidinger.net Alexander@Leidinger.net: PGP = 0x8F31830F9F2772BF >>>> http://www.FreeBSD.org netchild@FreeBSD.org : PGP = 0x8F31830F9F2772BF >>> -- End of PGP section, PGP failed! >>>=20 >>> --=20 >>> Rod Grimes = rgrimes@freebsd.org > --=20 > Rod Grimes = rgrimes@freebsd.org --Apple-Mail=_F0426EF8-7AD0-4641-9138-CFB20337145F Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii

On 26. Jan 2024, at 18:21, Rodney W. Grimes = <freebsd-rwg@gndrsh.dnsmgr.net> wrote:



On 26. Jan = 2024, at 18:02, Rodney W. Grimes <freebsd-rwg@gndrsh.dnsmgr.net> = wrote:

-- Start of PGP signed section.
Am 2024-01-25 18:49, schrieb Rodney W. = Grimes:
On Thu, = Jan 25, 2024, 9:11?AM Ed Maste <emaste@freebsd.org> = wrote:

On Thu, 25 Jan 2024 at 11:00, = Rodney W. Grimes
<freebsd-rwg@gndrsh.dnsmgr.net> = wrote:

These = will need to be addressed before actually removing any of = these
binaries, of course.

You seem to have = missed /rescue.  Now think about that long
and hard, these tools = classified as so important that they
are part of /rescue.  Again = I can not stress enough how often
I turn to these tools in a repair = mode situation.

I haven't missed rescue, it is = included in the work in progress I
mentioned. Note that rescue has = included gpart since 2007.


What can fdisk and/or = disklabel repair that gpart can't?

As far as I know = there is no way in gpart to get to the
MBR cyl/hd/sec values, you can = only get to the LBA start
and end values:
sysid 165 = (0xa5),(FreeBSD/NetBSD/386BSD)
  start 63, size 8388513 = (4095 Meg), flag 80 (active)
      beg: = cyl 0/ head 1/ sector 1;
      end: cyl = 1023/ head 15/ sector 63

gpart show ada0
=3D> =     63  8388545  ada0  MBR =  (4.0G)
     63  8388513 =     1  freebsd  [active] =  (4.0G)
8388576       32 =        - free - =  (16K)

What are you using cyl/hd/sec values for = on a system which runs FreeBSD 
current or on which you = would have to use FreeBSD-current in case of a 
repair need? What is = the disk hardware on those systems that you still 
need cyl/hd/sec and LBA = doesn't work? Serious questions out of 
curiosity.

Your making way to many assuptions, I deal with all sorts of = operating
systems, not just FreeBSD, and I often many drives from = many systems
connected to a FreeBSD box doing work to repair various = anomolyies.
FreeBSD is my swiss army knife of choice for fixing = things.

UEFI CMS and BIOS emplemntations can get very confused = about a
disk if these values are not properly set.  Also make a = big
mental note that GPT is really just a BIOS type 0x238 = MBR
entry and if that entry is messed up you are screwed.  I = am
not sure gpart has anyway to fix the protective MBR other
than = to rewrite it, probably destroying access to the whole
contents of = the disk.


That does not make too much sense = because PMBR is just fake partition covering whole disk (within the data = type size limit), with the hope that MBR only tool will see all the = space is allocated and will not attempt anything silly. Right after = sector 0, in sector 1 there is GPT, followed by GPT table array ? that = is, if anything will attempt to write anything other into sectors 1-33 = (or depending on how large is your table array), you are in trouble as = the primary GPT is destroyed.

*SIGH* = Seriously if you think it is so fake NUKE it and see how good your = system works.

dd if=3D/dev/zero = of=3D/dev/FOO count=3D1
GOOD = LUCK!


It is fake in a sense that = a) its role is to denote the marked space is in use and b) in case of = large disks, the PMBR end is not the same as disk end (due to data type = limit).

It is entirely other matter what = happens when PMBR is wiped. However, even if you wipe it, it is trivial = to = restore.

rgds,
toomas

rgds,
toomas
I = am getting rather tired of hearing from people who just simply
do not = use these tools or can not phantom there are legitamate
uses for = them.  But it is evident the project has decided to
remote them = to ports no matter what, so be it, yet another
reason for me to use = less FreeBSD and more of someone elses
product.


Bye,
Alexander.

-- 
http://www.Leidinger.net = Alexander@Leidinger.net: PGP = 0x8F31830F9F2772BF
http://www.FreeBSD.org =    netchild@FreeBSD.org  : PGP = 0x8F31830F9F2772BF
-- End of PGP section, PGP = failed!

-- 
Rod Grimes =             &n= bsp;           &nbs= p;            =            rgrimes@= freebsd.org
-- 
Rod Grimes =             &n= bsp;           &nbs= p;            =            <= a href=3D"mailto:rgrimes@freebsd.org" style=3D"font-family: = Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: = normal; font-weight: 400; letter-spacing: normal; orphans: auto; = text-align: start; text-indent: 0px; text-transform: none; white-space: = normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: = 0px;">rgrimes@freebsd.org

= --Apple-Mail=_F0426EF8-7AD0-4641-9138-CFB20337145F-- From nobody Fri Jan 26 17:36:03 2024 X-Original-To: freebsd-current@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 4TM4cL00BJz58WwD for ; Fri, 26 Jan 2024 17:36:18 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM4cK5Sk3z4rsJ for ; Fri, 26 Jan 2024 17:36:17 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-55a86795a3bso408014a12.1 for ; Fri, 26 Jan 2024 09:36:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706290575; x=1706895375; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=7vWNAouHV4DzhQwj2IFI2PIXGfZ56bKLR13AP7N4ml0=; b=VFS2PONCm7BdKB5y+w8SiciyyBK6YcMXw8oCdwC0WEZSzSgtecpHIIRAem4Pfrf1aP pSEeFbwiYbtC7OmEwiunfQFm3OEILsCapLLDW/siBCzm8IJnyZ/ta0cWt08tsjXJdxkB rzYntfmTJlVoFcVI16TtFu+j+OmBb9T+0UmjlAJtOUEYot/9DW3HhnJA12Iu3ZVjUlxR Bd1MtNAP/6iFWQNF7C4unQA+KE4ZqowyedHUvsxu0i9xmYviQvvr39pVJnTVn+FHmcMA 27SeXuH+JQndaifTih56eSQK7puiI/c6j78DThZx+HhLxCGjrJoMeyF8EZnnVsmTePBi YYCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706290575; x=1706895375; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7vWNAouHV4DzhQwj2IFI2PIXGfZ56bKLR13AP7N4ml0=; b=fSdyJOGRaYvEeLjnY+WmYweOqoJLRNrHluo0OgCqXSSeMsQZkKwmxXPLRtFoB+q/Eh ZyTa6JehIRn5F/HZgYAqAxqYSyTxpCBDEQSiliDM3NuBjf3k5hDtyH3I4Uj83UrKCBVn Ccze3Rvgkgw/A0sux53peX8w+Dr5ehihljuXJfC6/jo5oh+BAUxBNE43CgSOGa9DrXB3 e+m89L0Jpc4knZR1NGe/n5o/usFYP2d1ptU47Oxuj7664kX65fc+uYTKVB7x361nKM1F 8rx8lXM8UJvwe/+RV8DhDWw8QxsdsTyXLuZ9tH1Dq9gADi9C29qQe46+R6zJwkKv3Obv bsHA== X-Gm-Message-State: AOJu0YwcBG8NzsbPwYQAeJN7K2d8Vv38pU2CstNbQ3gRmMIjdkj+Ucn5 utD/Paub86YJ2vZvjCf++wYXqnkvxOYCavz0ZKiFM429JGSJhH6rOCEMTlv5YGWAplsD7BDAugX fxWzk65UzAp0dWgKJj+E9YFbiklxG3wCIuiKxSg0p9034jOxDFVE= X-Google-Smtp-Source: AGHT+IHPTkqG4B43h8CPqJQANZm/+4790ZHf5qGmr34wBW1S/eRo3KAbxydvCESbxXnFVMtmbr/yTgse2AvakGcxsX4= X-Received: by 2002:aa7:c3c9:0:b0:55d:344e:2cd0 with SMTP id l9-20020aa7c3c9000000b0055d344e2cd0mr2548edr.40.1706290574854; Fri, 26 Jan 2024 09:36:14 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401261602.40QG2Upe006210@gndrsh.dnsmgr.net> In-Reply-To: <202401261602.40QG2Upe006210@gndrsh.dnsmgr.net> From: Warner Losh Date: Fri, 26 Jan 2024 10:36:03 -0700 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: "Rodney W. Grimes" Cc: Alexander Leidinger , Ed Maste , FreeBSD Current Content-Type: multipart/alternative; boundary="0000000000009925ad060fdcbbe8" X-Rspamd-Queue-Id: 4TM4cK5Sk3z4rsJ X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --0000000000009925ad060fdcbbe8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jan 26, 2024 at 9:02=E2=80=AFAM Rodney W. Grimes < freebsd-rwg@gndrsh.dnsmgr.net> wrote: > -- Start of PGP signed section. > > Am 2024-01-25 18:49, schrieb Rodney W. Grimes: > > >> On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: > > >> > > >> > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > > >> > wrote: > > >> > > > > >> > > > These will need to be addressed before actually removing any o= f > these > > >> > > > binaries, of course. > > >> > > > > >> > > You seem to have missed /rescue. Now think about that long > > >> > > and hard, these tools classified as so important that they > > >> > > are part of /rescue. Again I can not stress enough how often > > >> > > I turn to these tools in a repair mode situation. > > >> > > > >> > I haven't missed rescue, it is included in the work in progress I > > >> > mentioned. Note that rescue has included gpart since 2007. > > >> > > > >> > > >> What can fdisk and/or disklabel repair that gpart can't? > > > > > > As far as I know there is no way in gpart to get to the > > > MBR cyl/hd/sec values, you can only get to the LBA start > > > and end values: > > > sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) > > > start 63, size 8388513 (4095 Meg), flag 80 (active) > > > beg: cyl 0/ head 1/ sector 1; > > > end: cyl 1023/ head 15/ sector 63 > > > > > > gpart show ada0 > > > =3D> 63 8388545 ada0 MBR (4.0G) > > > 63 8388513 1 freebsd [active] (4.0G) > > > 8388576 32 - free - (16K) > > > > What are you using cyl/hd/sec values for on a system which runs FreeBSD > > current or on which you would have to use FreeBSD-current in case of a > > repair need? What is the disk hardware on those systems that you still > > need cyl/hd/sec and LBA doesn't work? Serious questions out of > > curiosity. > > Your making way to many assuptions, I deal with all sorts of operating > systems, not just FreeBSD, and I often many drives from many systems > connected to a FreeBSD box doing work to repair various anomolyies. > FreeBSD is my swiss army knife of choice for fixing things. > Then install the port and be done with it. > UEFI CMS and BIOS emplemntations can get very confused about a > disk if these values are not properly set. Also make a big > mental note that GPT is really just a BIOS type 0x238 MBR > entry and if that entry is messed up you are screwed. I am > not sure gpart has anyway to fix the protective MBR other > than to rewrite it, probably destroying access to the whole > contents of the disk. > That might be a legitimate complaint. But you can still fix that with a port. Nothing stopping you from adding packages. And as pkgbase rolls into life for FreeBSD 15, these would be omitted by default anyway: they are too niche for today's needs to be in the already too large default bundle. > I am getting rather tired of hearing from people who just simply > do not use these tools or can not phantom there are legitamate > uses for them. But it is evident the project has decided to > remote them to ports no matter what, so be it, yet another > reason for me to use less FreeBSD and more of someone elses > product. > I'm saying that for most users gpart is sufficient. You have special needs that the project can no longer meet with in-tree tools, but provides an eas= y way to add them on by ports. None of your use cases require them to be available in /rescue or single-user scenarios. They are all adequately covered by a pkg install. Just like hundreds of other special use cases that need a pkg. Need to partition your MMC card, install mmc-util. Need to boot the NanoPi P2S card, install u-boot-nanopi-p2s. Etc. While cross BSD functionality is nice to have, the current tools don't even support tha= t very well (try to use a address sanitizer version of disklabel and discover the buffer overflows). So if it's important to you and maybe some others, you'll need to "pay the freight" of that functionality by making these port= s and having the community of users that needs this to work continue making them work as new bugs come to light. FreeBSD's fdisk and disklabel are flawed in a number of other ways. They most work cross platform, but aren't 100% what you want in all cases. You can't write big endian disk labels on a little endian machine, for example. The CHS handling in fdisk isn't quite right always for drives that are larger than 1023 cylinders: we round differently than at least 3.0ish Linux expects. disklabel has trouble writing to alternate locations that some BSD architectures need. Given that none of these problems have been fixed in the 20ish years that I've been at least dimly aware of them suggests tha= t there's not a huge demand for coping with these edge cases. Warner --0000000000009925ad060fdcbbe8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Fri, Jan 26, 2024 at 9:02=E2=80=AF= AM Rodney W. Grimes <fr= eebsd-rwg@gndrsh.dnsmgr.net> wrote:
-- Start of PGP signed section.
> Am 2024-01-25 18:49, schrieb Rodney W. Grimes:
> >> On Thu, Jan 25, 2024, 9:11?AM Ed Maste <emaste@freebsd.org> wrote:
> >>
> >> > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes
> >> > <freebsd-rwg@gndrsh.dnsmgr.net> wrote:
> >> > >
> >> > > > These will need to be addressed before actuall= y removing any of these
> >> > > > binaries, of course.
> >> > >
> >> > > You seem to have missed /rescue.=C2=A0 Now think ab= out that long
> >> > > and hard, these tools classified as so important th= at they
> >> > > are part of /rescue.=C2=A0 Again I can not stress e= nough how often
> >> > > I turn to these tools in a repair mode situation. > >> >
> >> > I haven't missed rescue, it is included in the work = in progress I
> >> > mentioned. Note that rescue has included gpart since 200= 7.
> >> >
> >>
> >> What can fdisk and/or disklabel repair that gpart can't?<= br> > >
> > As far as I know there is no way in gpart to get to the
> > MBR cyl/hd/sec values, you can only get to the LBA start
> > and end values:
> > sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
> >=C2=A0 =C2=A0 =C2=A0start 63, size 8388513 (4095 Meg), flag 80 (ac= tive)
> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0beg: cyl 0/ head 1/ sector 1; > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0end: cyl 1023/ head 15/ sector 6= 3
> >
> > gpart show ada0
> > =3D>=C2=A0 =C2=A0 =C2=A063=C2=A0 8388545=C2=A0 ada0=C2=A0 MBR= =C2=A0 (4.0G)
> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 63=C2=A0 8388513=C2=A0 =C2=A0 =C2=A01= =C2=A0 freebsd=C2=A0 [active]=C2=A0 (4.0G)
> >=C2=A0 =C2=A08388576=C2=A0 =C2=A0 =C2=A0 =C2=A032=C2=A0 =C2=A0 =C2= =A0 =C2=A0 - free -=C2=A0 (16K)
>
> What are you using cyl/hd/sec values for on a system which runs FreeBS= D
> current or on which you would have to use FreeBSD-current in case of a=
> repair need? What is the disk hardware on those systems that you still=
> need cyl/hd/sec and LBA doesn't work? Serious questions out of > curiosity.

Your making way to many assuptions, I deal with all sorts of operating
systems, not just FreeBSD, and I often many drives from many systems
connected to a FreeBSD box doing work to repair various anomolyies.
FreeBSD is my swiss army knife of choice for fixing things.

Then install the port and be done with it.
= =C2=A0
UEFI CMS and BIOS emplemntations can get very confused about a
disk if these values are not properly set.=C2=A0 Also make a big
mental note that GPT is really just a BIOS type 0x238 MBR
entry and if that entry is messed up you are screwed.=C2=A0 I am
not sure gpart has anyway to fix the protective MBR other
than to rewrite it, probably destroying access to the whole
contents of the disk.

That might be a l= egitimate complaint. But you can still fix that with
a port. Noth= ing stopping you from adding packages. And as pkgbase
rolls into = life for FreeBSD 15, these would be omitted by default
anyway: th= ey are too niche for today's needs to be in the already
too l= arge default bundle.
=C2=A0
I am getting rather tired of hearing from people who just simply
do not use these tools or can not phantom there are legitamate
uses for them.=C2=A0 But it is evident the project has decided to
remote them to ports no matter what, so be it, yet another
reason for me to use less FreeBSD and more of someone elses
product.

I'm saying that for most u= sers gpart is sufficient. You have special needs
that the project= can no longer meet with in-tree tools, but provides an easy
way = to add them on by ports. None of your use cases require them to
b= e available in /rescue or single-user scenarios. They are all adequately
covered by a pkg install. Just like hundreds of other special use c= ases
that need a pkg. Need to partition your MMC card, install mm= c-util. Need
to boot the NanoPi P2S card, install u-boot-nanopi-p= 2s. Etc. While cross
BSD functionality is nice to have, the curre= nt tools don't even support that
very well (try to use a addr= ess sanitizer version of disklabel and discover
the buffer overfl= ows). So if it's important to you and maybe some others,
you&= #39;ll need to "pay the freight" of that functionality by making = these ports
and having the community of users that needs this to = work continue making
them work as new bugs come to light.

FreeBSD's fdisk and disklabel=C2=A0are flawed in a nu= mber of other ways.
They most work cross platform, but aren't= 100% what you want in all
cases. You can't write big endian = disk labels on a little endian machine,
for example. The CHS hand= ling in fdisk isn't quite right always for drives
that are la= rger than 1023 cylinders: we round differently than at least 3.0ish
Linux expects. disklabel has trouble writing to alternate locations that= some
BSD architectures need. Given that none of these problems h= ave been fixed
in the 20ish years that I've been at least dim= ly aware of them suggests that
there's not a huge demand for = coping with these edge cases.

Warner
--0000000000009925ad060fdcbbe8-- From nobody Fri Jan 26 17:45:21 2024 X-Original-To: freebsd-current@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 4TM4q30JRhz58XFZ for ; Fri, 26 Jan 2024 17:45:35 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM4q25SGcz4vGm for ; Fri, 26 Jan 2024 17:45:34 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-55cdaa96f34so3947824a12.1 for ; Fri, 26 Jan 2024 09:45:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706291133; x=1706895933; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=jCgKsxumiJd43BqED4YRyuqUjsvJQ4y+cGRo0z00GKs=; b=08aVsxznS7gW+bAkUfRJvvNsOVRHxbpqYlL+cT3PZsAcAzgDpl0Olh1pQ1ZOBJfXBP wzOeIGU3rw9fkhGQPX5Z8ChNDzmWnOtf2V8IMmdqoaTqei/T83C5ybmyDwSR2duhZp1J 0IQ4qdLE1Sz5dPddDrOAYHYYY01OK503MiLhXQ8xKvIEYAcKukyBxCWXc0TCeWalDUAH yi3vFAFx3T+vn8HsRZRXhbo9CDgMM2rTfMdZcPsrUfd61Bl/KdOqAYkTKA5kvB2cCBB7 oeZuqzk/cP8OZDtdTS8E9IC+lw/gYznbKkmqMusjyR1poezgY081Kg3lT7q9eptjt+R3 ptGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706291133; x=1706895933; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=jCgKsxumiJd43BqED4YRyuqUjsvJQ4y+cGRo0z00GKs=; b=WQm4qurYPQHjq0w7IpCIlzKWNCFj53o8BGKStCwLLQFTKdewsYZQtl85GQRN7JenDM oR1dmYr148pEoBeK8SCKieTzMWbGRKb+scwZfOlJYXK+dKeUgm/8NKztN5I/IB83vhzw rD4WNd/sM74y1DTIZ27hjkkWX5AJ6WWDQkmc0sk2C6HXm+/24zh4isMIjZ7iN5CSZwqm N3ff8vsu9xSIkgzh78bG2o2apXCkdgxIvMN/V0cC250SfMRy18vHockvUEbNCetfnNQs lmfUgLwHzPb/xvESBlzhx3xpET/xXMG6/Y5i/vdGqVoReR9pBudLRerdISOE4+aXV2Fs BBGg== X-Gm-Message-State: AOJu0YzFMZcTrw3geqwv/GJnD0l6NosD8DkjVWgFmTODLYfSv0e7hMQD OdrEL5RqiuQ9PzKyI8QlFIkeNJcDXAT1z3XYhCCeRY/CB3zMx3NcxKsWiFkIy0ileo+mfIK5aXU +Aq41tAXzhupYF0I1OzrkwHX1DtXA6W07/sfq3gNrppHVfFhQXpc= X-Google-Smtp-Source: AGHT+IE7Nt4/pFTEAGPyInMXjpSCfpjrd2KHT8ouXdJHCzUPS7RvhpsppihDqnWH+9+7b3S2h56Q4R22ymT8w3A3ogY= X-Received: by 2002:aa7:c559:0:b0:55c:864e:790d with SMTP id s25-20020aa7c559000000b0055c864e790dmr273087edr.10.1706291133299; Fri, 26 Jan 2024 09:45:33 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401261617.40QGHH8e006266@gndrsh.dnsmgr.net> In-Reply-To: <202401261617.40QGHH8e006266@gndrsh.dnsmgr.net> From: Warner Losh Date: Fri, 26 Jan 2024 10:45:21 -0700 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: "Rodney W. Grimes" Cc: Ed Maste , FreeBSD Current Content-Type: multipart/alternative; boundary="000000000000e24bb3060fdcdc7e" X-Rspamd-Queue-Id: 4TM4q25SGcz4vGm X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000e24bb3060fdcdc7e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jan 26, 2024 at 9:17=E2=80=AFAM Rodney W. Grimes < freebsd-rwg@gndrsh.dnsmgr.net> wrote: > [ Charset UTF-8 unsupported, converting... ] > > On Thu, Jan 25, 2024, 10:49?AM Rodney W. Grimes < > > freebsd-rwg@gndrsh.dnsmgr.net> wrote: > > > > > > On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: > > > > > > > > > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > > > > > wrote: > > > > > > > > > > > > > These will need to be addressed before actually removing any = of > > > these > > > > > > > binaries, of course. > > > > > > > > > > > > You seem to have missed /rescue. Now think about that long > > > > > > and hard, these tools classified as so important that they > > > > > > are part of /rescue. Again I can not stress enough how often > > > > > > I turn to these tools in a repair mode situation. > > > > > > > > > > I haven't missed rescue, it is included in the work in progress I > > > > > mentioned. Note that rescue has included gpart since 2007. > > > > > > > > > > > > > What can fdisk and/or disklabel repair that gpart can't? > > > > > > As far as I know there is no way in gpart to get to the > > > MBR cyl/hd/sec values, you can only get to the LBA start > > > and end values: > > > > > > > In the last 20 years when have you needed this? > > Last week, and probably about every other month for the last > 30 years. > What. specifically did you need to change, for what hardware, etc? > > > > LBA start/end is all that's relevant these days. The CHS values are > > completely ignored > > by FreeBSD. We use packet mode in the boot loader since about Pentium > 150MHz > > or so. > > WORLD !=3D FreeBSD, please STOP trying to assume that the users OF FreeBS= D > are ONLY using FreeBSD!!!! > Yes. And the world stopped using them too around that time, give or take 5 years. > > > > I did have to change these back in the day when we inferred what the CH= S > > geometry > > was from the drive by looking at the MBR's partitions that you knew > > (assumed really) > > started on a cylinder value. This hasn't mattered in FreeBSD since sos > > rewrote ata > > the second time. DOS had to do these things because old-school MFM, RLL= , > etc > > disks couldn't return their CHS, so DOS had to enshrine them in the MBR > to > > get > > a hint (or have the drive type BIOS to just know). Since we use LBA > > exclusively, > > none of this matter to FreeBSD. > > WORLD !=3D FreeBSD, and weither you like it or not your BIOS and CSM > and UEFI are PROPBABLY reading those values and might even do a > nice divide by zero for you should you write 0 in them. > Maybe rather than using all caps you could give a specific example. I've not had to help anybody with CHS values in maybe 15 years, and even then it was rare. In the prior 10 years to that I went from shipping produc= t where CHS had to be right, to shipping product where it didn't matter at all on a set of SBCs that were lagging the industry by 5 years. Also, UEFI doesn't care: It has no CHS APIs. It's all LBA. The only places in the standard where 'Cylinder' is mentioned is the (now obsolete) name for fields in a ATA packet that now mean different parts of the LBA for modern commands. > > > > I've certainly never needed to tweak these in single user mode on an > > emergency > > basis. Why? Because you can't get to single user mode because the kerne= l > > won't > > even load if you have these wrong. So either you are booting some rescu= e > > disk > > to fix that (in which case you can craft it for your special > environment)., > > or you are > > rescue disk =3D=3D any FreeBSD install media from the last 20 years. > your REALLY stuck in a small box Warner, please think outside > that box. You keep repeating FreeBSD FreeBSD FreeBSD, I have to > inform you many of us who USE FreeBSD also USE other stuff, but > we prefer to have FreeBSD be our goto system for this type of work. > Yes. I understand that. And with the packages installed, you still can do that. > > creating a special thing in multi-user, so you can install For all the= se > > use cases, fdisk > > as a port is fine. > > I really do not want to have to maintain my own distribution. > And the project can no longer support programs that have buffer overflows and other dangerous behavior when presented with untrusted information from the disks that matters only to a few users. > > > > sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) > > > start 63, size 8388513 (4095 Meg), flag 80 (active) > > > beg: cyl 0/ head 1/ sector 1; > > > end: cyl 1023/ head 15/ sector 63 > > > > > > gpart show ada0 > > > =3D> 63 8388545 ada0 MBR (4.0G) > > > 63 8388513 1 freebsd [active] (4.0G) > > > 8388576 32 - free - (16K) > > > > > > Now I have learned that gpart backup/restore CAN get me > > > at least basic bsdlabel -e function, but again it has > > > no access to all the stuff stored that showsup with > > > bsdlabel -A. Which this is now the third time I have > > > asked "how do I do bsdlabel -A -e with gpart"? One > > > person at least answered that with: > > > gpart backup GEOM >backup > > > vi backup > > > gpart restore GEOM > > > > > > > OK Let's look at these extra fields: > > > > # /dev/md0: > > type: unknown > > disk: amnesiac > > label: > > flags: > > bytes/sector: 512 > > sectors/track: 63 > > tracks/cylinder: 255 > > sectors/cylinder: 16065 > > cylinders: 130 > > sectors/unit: 2097152 > > rpm: 3600 > > interleave: 1 > > trackskew: 0 > > cylinderskew: 0 > > headswitch: 0 # milliseconds > > track-to-track seek: 0 # milliseconds > > drivedata: 0 > > > > type isn't used at all in FreeBSD. > > disk is for /etc/disktab, something we've not really needed since > FreeBSD 3 > > or so. > > label can be set with gpart add/modify -l. > > I've never used flags. Can't speak to that. > > bytes/sector: This is a physical property of the drive, not the label. > You > > can find it with gpart list: > > % gpart list md0 > > .... > > Consumers: > > 1. Name: md0 > > Mediasize: 1073741824 (1.0G) > > Sectorsize: 512 > > The rest of this/that are reported or you can do math: > > fwheads: 255 <- tracks/cylinder > > fwsectors: 63 <-- sectors/track > > last: 2097151 <-- sectors/unit - 1 > > now, cylenders and sectors/cylinder you can compute. geom does this for > > reading/writing disk labels. > > rpm is hard coded to 3600 these days. FreeBSD doesn't care. > > The rest are for interleaving, which FreeBSD doesn't do, so we don't > care. > > > > So you can influence the values, but they aren't used for anything by > > FreeBSD > > that matters. > > > > What if you need them for something else? Then just use the disklabel > port. > > You'll never need to hack them tn single user mode, so you can use the > port > > for all use cases. > > Booting a FreeBSD install image is the use case, you seem to not > realize people do use that for "RESCUE". FreeBSD 14 CD images will exist online for ~forever. Warner --000000000000e24bb3060fdcdc7e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Fri, Jan 26, 2024 at 9:17=E2=80=AF= AM Rodney W. Grimes <fr= eebsd-rwg@gndrsh.dnsmgr.net> wrote:
[ Charset UTF-8 unsupported, converting... ]
> On Thu, Jan 25, 2024, 10:49?AM Rodney W. Grimes <
> fre= ebsd-rwg@gndrsh.dnsmgr.net> wrote:
>
> > > On Thu, Jan 25, 2024, 9:11?AM Ed Maste <emaste@freebsd.org> wrote: > > >
> > > > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes
> > > > <freebsd-rwg@gndrsh.dnsmgr.net> wrote:
> > > > >
> > > > > > These will need to be addressed before actual= ly removing any of
> > these
> > > > > > binaries, of course.
> > > > >
> > > > > You seem to have missed /rescue.=C2=A0 Now think a= bout that long
> > > > > and hard, these tools classified as so important t= hat they
> > > > > are part of /rescue.=C2=A0 Again I can not stress = enough how often
> > > > > I turn to these tools in a repair mode situation.<= br> > > > >
> > > > I haven't missed rescue, it is included in the work= in progress I
> > > > mentioned. Note that rescue has included gpart since 20= 07.
> > > >
> > >
> > > What can fdisk and/or disklabel repair that gpart can't?=
> >
> > As far as I know there is no way in gpart to get to the
> > MBR cyl/hd/sec values, you can only get to the LBA start
> > and end values:
> >
>
> In the last 20 years when have you needed this?

Last week, and probably about every other month for the last
30 years.

What. specifically did you ne= ed to change, for what hardware, etc?
=C2=A0
>
> LBA start/end is all that's relevant these days. The CHS values ar= e
> completely ignored
> by FreeBSD. We use packet mode in the boot loader since about Pentium = 150MHz
> or so.

WORLD !=3D FreeBSD, please STOP trying to assume that the users OF FreeBSD<= br> are ONLY using FreeBSD!!!!

Yes. And the= world stopped using them too around that time, give or take 5 years.
=
=C2=A0
>
> I did have to change these back in the day when we inferred what the C= HS
> geometry
> was from the drive by looking at the MBR's partitions that you kne= w
> (assumed really)
> started on a cylinder value. This hasn't mattered in FreeBSD since= sos
> rewrote ata
> the second time. DOS had to do these things because old-school MFM, RL= L, etc
> disks couldn't return their CHS, so DOS had to enshrine them in th= e MBR to
> get
> a hint (or have the drive type BIOS to just know). Since we use LBA > exclusively,
> none of this matter to FreeBSD.

WORLD !=3D FreeBSD, and weither you like it or not your BIOS and CSM
and UEFI are PROPBABLY reading those values and might even do a
nice divide by zero for you should you write 0 in them.

Maybe rather than using all caps you could give a specific= example. I've
not had to help anybody with CHS values in may= be 15 years, and even
then it was rare. In the prior 10 years to = that I went from shipping product
where CHS had to be right, to s= hipping product where it didn't matter at
all on a set of SBC= s that were lagging the industry by 5 years.

Also,= UEFI doesn't care: It has no CHS APIs. It's all LBA. The only plac= es in the
standard where 'Cylinder' is mentioned is the (= now obsolete) name for fields in
a ATA packet that now mean diffe= rent parts of the LBA for modern commands.
=C2=A0
>
> I've certainly never needed to tweak these in single user mode on = an
> emergency
> basis. Why? Because you can't get to single user mode because the = kernel
> won't
> even load if you have these wrong. So either you are booting some resc= ue
> disk
> to fix that (in which case you can craft it for your special environme= nt).,
> or you are

rescue disk =3D=3D any FreeBSD install media from the last 20 years.
your REALLY stuck in a small box Warner, please think outside
that box.=C2=A0 =C2=A0You keep repeating FreeBSD FreeBSD FreeBSD, I have to=
inform you many of us who USE FreeBSD also USE other stuff, but
we prefer to have FreeBSD be our goto system for this type of work.

Yes. I understand that. And with the packages = installed, you still can
do that.
=C2=A0
> creating a special thing in multi-user, so you can install=C2=A0 For a= ll these
> use cases, fdisk
> as a port is fine.

I really do not want to have to maintain my own distribution.

And the project can no longer support programs that = have buffer overflows
and other dangerous behavior when presented= with untrusted information
from the disks that matters only to a= few users.
=C2=A0
>
> sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
> >=C2=A0 =C2=A0 =C2=A0start 63, size 8388513 (4095 Meg), flag 80 (ac= tive)
> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0beg: cyl 0/ head 1/ sector 1; > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0end: cyl 1023/ head 15/ sector 6= 3
> >
> > gpart show ada0
> > =3D>=C2=A0 =C2=A0 =C2=A063=C2=A0 8388545=C2=A0 ada0=C2=A0 MBR= =C2=A0 (4.0G)
> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 63=C2=A0 8388513=C2=A0 =C2=A0 =C2=A01= =C2=A0 freebsd=C2=A0 [active]=C2=A0 (4.0G)
> >=C2=A0 =C2=A08388576=C2=A0 =C2=A0 =C2=A0 =C2=A032=C2=A0 =C2=A0 =C2= =A0 =C2=A0 - free -=C2=A0 (16K)
> >
> > Now I have learned that gpart backup/restore CAN get me
> > at least basic bsdlabel -e function, but again it has
> > no access to all the stuff stored that showsup with
> > bsdlabel -A.=C2=A0 Which this is now the third time I have
> > asked "how do I do bsdlabel -A -e with gpart"?=C2=A0 On= e
> > person at least answered that with:
> > gpart backup GEOM >backup
> > vi backup
> > gpart restore GEOM
> >
>
> OK Let's look at these extra fields:
>
> # /dev/md0:
> type: unknown
> disk: amnesiac
> label:
> flags:
> bytes/sector: 512
> sectors/track: 63
> tracks/cylinder: 255
> sectors/cylinder: 16065
> cylinders: 130
> sectors/unit: 2097152
> rpm: 3600
> interleave: 1
> trackskew: 0
> cylinderskew: 0
> headswitch: 0 # milliseconds
> track-to-track seek: 0 # milliseconds
> drivedata: 0
>
> type isn't used at all in FreeBSD.
> disk is for /etc/disktab, something we've not really needed since = FreeBSD 3
> or so.
> label can be set with gpart add/modify -l.
> I've never used flags. Can't speak to that.
> bytes/sector: This is a physical property of the drive, not the label.= =C2=A0 You
> can find it with gpart list:
>=C2=A0 =C2=A0 % gpart list md0
>=C2=A0 =C2=A0 ....
>=C2=A0 =C2=A0 Consumers:
>=C2=A0 =C2=A0 1. Name: md0
>=C2=A0 =C2=A0 =C2=A0 =C2=A0Mediasize: 1073741824 (1.0G)
>=C2=A0 =C2=A0 =C2=A0 =C2=A0Sectorsize: 512
> The rest of this/that are reported or you can do math:
>=C2=A0 =C2=A0 =C2=A0fwheads: 255 <- tracks/cylinder
>=C2=A0 =C2=A0 =C2=A0fwsectors: 63 <-- sectors/track
>=C2=A0 =C2=A0 =C2=A0last: 2097151 <-- sectors/unit - 1
> now, cylenders and sectors/cylinder you can compute. geom does this fo= r
> reading/writing disk labels.
> rpm is hard coded to 3600 these days. FreeBSD doesn't care.
> The rest are for interleaving, which FreeBSD doesn't do, so we don= 't care.
>
> So you can influence the values, but they aren't used for anything= by
> FreeBSD
> that matters.
>
> What if you need them for something else? Then just use the disklabel = port.
> You'll never need to hack them tn single user mode, so you can use= the port
> for all use cases.

Booting a FreeBSD install image is the use case, you seem to not
realize people do use that for "RESCUE".

FreeBSD 14 CD images will exist online for ~forever.

=
Warner=C2=A0
--000000000000e24bb3060fdcdc7e-- From nobody Fri Jan 26 20:01:54 2024 X-Original-To: freebsd-current@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 4TM7rQ0Bmsz58kjg for ; Fri, 26 Jan 2024 20:01:58 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM7rP5WRvz4DqF; Fri, 26 Jan 2024 20:01:57 +0000 (UTC) (envelope-from se@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706299317; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gko2uFZsDrfARZt+oxRevf5SNSLqj0Kcnp1aNIXjnvU=; b=RPXIGhDExzAUTLgnXm332na35N51qS+2aU5f0vZ8RjpfNQu+DbX+vp9NuUvroeH8iGcQav QdrofJ75Kn0RJDc+4c40SECwWdSkm5g15j68nawcqF/sRM1Qmj6cdqsEaxr5tHCQxYubPe htOACnpVkbbOwvr1YLNslMze1cfKifqNqCjJojViKrJijBwnYDuYSY3XGNoDaM2wj7cbte 8lXIHAZLXPNWok3sIJF/5sGVBo8f8/o1/meek94bfAt1Ox7J2OVbOytRd3myuzJBVZOM1g XEoVRnA2bu6zHVi1yTDU2MMDn3OF0H2Z/wShcWN9i1CwCVoQXYFMoJ8Gxh4R2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706299317; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gko2uFZsDrfARZt+oxRevf5SNSLqj0Kcnp1aNIXjnvU=; b=e2Y3bzMy5VIhv4eZbewrrX4xYizNjgqL1YrZp2bVtEU17LE3PwtmK/zPvXWyKeBxszDtXF qZUTc+PzL/xSLWBhNHuukyZ2R9Kklkkyr5bx20uL+Eb+ZBgm9NznZEFrUr1+CDrJPZ2wEh 23aSw9M5UgIKHiDiNFBpTjPwyGUyws1x4vWdnC43Nkiy/aCd+dZjzBJ54cmrk78HuCA6vc EoLG3nALZnv8FSykFRJDmbJig2nPt5FSLd2LP4XvJCUOwIpjZzOVGZ9L1t2eVWkwX4vBGC Lmimd2DlVTESXFlAVs2IQc0NfIkTGI6aZKZ/0J/jdXqikC5WQS+WxualQtzTWA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1706299317; a=rsa-sha256; cv=none; b=q7ePB+EQuPD14hFO9HHo91/xh/2p3i6ZddyDwuBDo/J7EmXWmTa8wvVBCfkZwb6uPjsjHZ 78Z1VPzl2hpgwaFnJ02O8zDpK4v2Gs0luy32ypIex/+cYszyyh1L4fs5M1GhYdrhdYjF53 Y0J6H4MOnCYfQEZRUU6huOgAnQhdFDtn+xlnWIg+6dPx71SWTMq2j2Ym/XmaqvbysSdvRc 8ihl9iEyTcf5R5m+vqPeEVrfOc5wJp6hSq1LAeX1d7EqH/TKn8Ydx9xFBVZZRHOsy+20An N6kvISm77Xr4dpVy4CLxJXkwG6VmW2KelMlQcLENrPLk3edJ0ZisvNOtKDaG7A== Received: from [IPV6:2003:cd:5f2c:9d00:b5c6:f2af:6888:1ab7] (p200300cd5f2c9d00b5c6f2af68881ab7.dip0.t-ipconnect.de [IPv6:2003:cd:5f2c:9d00:b5c6:f2af:6888:1ab7]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: se/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TM7rN74FPzdS8; Fri, 26 Jan 2024 20:01:56 +0000 (UTC) (envelope-from se@FreeBSD.org) Message-ID: Date: Fri, 26 Jan 2024 21:01:54 +0100 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Stefan Esser Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Content-Language: de-DE To: "Rodney W. Grimes" Cc: Ed Maste , Warner Losh , FreeBSD CURRENT References: <202401261609.40QG9th8006226@gndrsh.dnsmgr.net> In-Reply-To: <202401261609.40QG9th8006226@gndrsh.dnsmgr.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Am 26.01.24 um 17:09 schrieb Rodney W. Grimes: >> Am 25.01.24 um 16:38 schrieb Ed Maste: >>> On Wed, 24 Jan 2024 at 12:30, Warner Losh wrote: >>> sbin/growfs/tests/legacy_test.pl >>> tools/regression/msdosfs/msdosfstest-2.sh >>> tools/regression/tmpfs/t_vnd >>> tools/tools/nanobsd/legacy.sh All these scripts that currently depend on bsdlabel could easily be converted to exclusively use gpart instead. Other scripts that had been identified to use bsdlabel or disklabel are unused / not relevant for FreeBSD. [...] >> The bsdlabel/disklabel/fdisk programs could be rewritten using >> gpart without too much effort, at least for the use cases that After looking at the source code it appears that there is no need to rewrite any of the bsdlabel/disklabel code, since it already uses geom calls to access the partition data and only uses direct disk writes to write out the partition table (as does gpart, AFAICT). So, I do not see any dependencies on deprecated kernel features. I have not compared the bsdlabel code and gpart_write_partcode() in detail, but I do not see much of a difference at first glance. Therefore, bsdlabel and disklabel could be kept in the base system, IMHO. (But fdisk should go ...) > That would be wonderful. Even just getting it to spit out > the FULL MBR values that are in a protective 0x238 MBR > would go along way to diagnose some corrupt GPT disks. If you need access to the protective MBR of a GPT partition, this feature should be added to gpart instead, IMHO. But what's wrong with using "file -s" for this purpose: # file -s /dev/nda0 /dev/nda0: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x3ff,255,63), startsector 1, 1953525167 sectors, extended partition table (last) Do you need more information from the protective MBR? This will not work on mounted file systems, though. But if you got the disk mounted, I'd expect you do not really need this information ... >> have not become obsolete (e.g. CHS specifications) and only for >> use in scripts (i.e. no fdisk interactive edit mode). > > You are fooling yourself if you think an MBR and CHS values > are obsolete. GPT *IS* a type 0x238 MBR and see how many > BIOSes you can crash by writting garbage (Especially 0x0) > to the CHS values. That MBR must have proper values, and > you cant just ignore that they exist. Again something that gpart should be able to diagnose and fix. Doesn't "gpart recover" already fix such protective MBRs? >> Even parsing of the disktab format and a conversion to gpart >> backup format for use by gpart restore should not be too hard. >> >> That would keep the commands available for those that use them >> in scripts outside the FreeBSD sources, but would also allow to >> remove the kernel interfaces used by those legacy tools. >> >> I'd be willing to write those emulations of legacy tools, if >> there is interest in going that way ... > > I would be interested in seeing these. > For me gpart does do a lot of things, but it is missing > some very low level stuff that is probably should have. I read that to mean that gpart is useful for standard setup operations, but it lacks commands that might be useful to diagnose inconsistent parameters? Well, adding consistency checks and warning about potential issues might not have been on the requirements sheet, but if you specify checks that should be performed, these could be added either to "gpart show" or a "gaprt check" command could be implemented. If you want such consistency checks added, then specify them in a feature request PR, for example. Best regards, STefan From nobody Fri Jan 26 20:11:44 2024 X-Original-To: freebsd-current@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 4TM83x2Dh6z58lqv for ; Fri, 26 Jan 2024 20:11:57 +0000 (UTC) (envelope-from fjwcash@gmail.com) Received: from mail-yw1-x1131.google.com (mail-yw1-x1131.google.com [IPv6:2607:f8b0:4864:20::1131]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM83x0Phfz4G2j; Fri, 26 Jan 2024 20:11:57 +0000 (UTC) (envelope-from fjwcash@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-602b7cef983so8305437b3.3; Fri, 26 Jan 2024 12:11:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706299915; x=1706904715; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=gQFrDWppXCqD7G6Ihu6H9d3HPz6vwpgtSRazXEFvJjA=; b=h6rqLGTkNGnuZRgKZI6T4tosTO6Hncs1xdvi7b+2K/GbgDRdgwPd4R+uGqsZXsk+iF E+5CNuwM9Y2mDJ37t8JvjZB+ekgTamtlGb8dtV3rNGaQIPehK+j+bNrmMAJjTux2GXtW 0zIa4vEhFu2gHJdYcHQcPpAavcMJX/6gCV9zCJqly+10rMdDSq4cX+BMV5zwBDCxXg4W 5UerP8T5IRlEBOU2gTVNive8mHq4G+I8qHHN8drWD8NhfDNo1hMsrrBTZHS5Clp9veg/ kzJ6wIVCFQJ1h2WHGs4//MLcyqfH5pAfyHSp/5OUZD8S9yU8Q5vNzVVVmh04EBc3Pl+f Palg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706299915; x=1706904715; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gQFrDWppXCqD7G6Ihu6H9d3HPz6vwpgtSRazXEFvJjA=; b=XiGtdjtf2c/KJ/TLwfJxA/ZNXZC2bhJmxsC35N78jNNovOuLz76Gz2KpPgnToSBj+J WyA0D6lqj9LEF6fmMDfqPL4jAiaCwURIZGasyxrjdj43+eN4reZ9abOSBXePU3ioLS8s bDif61hPn4tSJsf4Bm6Nb6Kd0cNUEmIZbkvZHvNBa61+SmDcHclQ3+m7LOIVqSoejCJ3 MtWzYVqypcOvW6aIFivPd1kBjkk5zBuaZG/dSjKWsfieRpBGpVhIq0pAh7jHnKJMPUmZ k6S7oePl+CcW3hRuxJLANS0omDXP0OLO4SytVqjJniAb6QtJFpsschtLp9fg4xGL+GA9 pSmg== X-Gm-Message-State: AOJu0YwsBsx3Bu3kHxPdpQIHHgS3iHW32kZ7y6KbE2KvQb+LcrNXr9DR s7A0Rhl39Tloc2qOjD0bDClf9FhzbYjmxXWTeKKMvwyzAAMUe1isF/nO9J9QiqUjVANvtb5bZdE AXyWOEdG+TLPIqKHMcb0bSEoLjOE= X-Google-Smtp-Source: AGHT+IEtUzBaDZ5kVJpO34C4oapCy53Gh8M8B/ZDdOE1RRTLNmuAUqwi/GKVynOPWH4/UVwE/+KXOxx1yJpdcfRRCcA= X-Received: by 2002:a25:ce08:0:b0:dc3:6d7d:889e with SMTP id x8-20020a25ce08000000b00dc36d7d889emr514995ybe.14.1706299915579; Fri, 26 Jan 2024 12:11:55 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <77B55963-DF54-49BC-AF2C-3A115AC76B32@me.com> <202401261621.40QGLIv7006285@gndrsh.dnsmgr.net> In-Reply-To: <202401261621.40QGLIv7006285@gndrsh.dnsmgr.net> From: Freddie Cash Date: Fri, 26 Jan 2024 12:11:44 -0800 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: "Rodney W. Grimes" Cc: Toomas Soome , Alexander Leidinger , Warner Losh , Ed Maste , FreeBSD Current Content-Type: multipart/alternative; boundary="00000000000059349e060fdee8c7" X-Rspamd-Queue-Id: 4TM83x0Phfz4G2j X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] --00000000000059349e060fdee8c7 Content-Type: text/plain; charset="UTF-8" Sounds like a custom mfsBSD or Frenzy CD/USB would be better suited to these bare-metal rescue setups. Something that has the specific tools you need already installed. I know I've kept various versions of these CD images around for just this purpose. I always found them nicer to use than the FreeBSD install CDs in rescue mode, as there's a fully-functional FreeBSD install to work from, including the ability to install packages temporarily. -- Freddie Cash fjwcash@gmail.com --00000000000059349e060fdee8c7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Sounds like a custom mfsBSD or Frenzy CD/USB would be= better suited to these bare-metal rescue setups.=C2=A0 Something that has = the specific tools you need already installed.=C2=A0 I know I've kept v= arious versions of these CD images around for just this purpose.=C2=A0 I al= ways found them nicer to use than the FreeBSD install CDs in rescue mode, a= s there's a fully-functional FreeBSD install to work from, including th= e ability to install packages temporarily.

--
Freddie Cash
fjwcash@gmail.com
--00000000000059349e060fdee8c7-- From nobody Fri Jan 26 21:10:20 2024 X-Original-To: freebsd-current@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 4TM9MW4NVnz58r2Z for ; Fri, 26 Jan 2024 21:10:31 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM9MW0TVbz4Q1g; Fri, 26 Jan 2024 21:10:30 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40QLAK3H007033; Fri, 26 Jan 2024 13:10:20 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40QLAKZK007032; Fri, 26 Jan 2024 13:10:20 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401262110.40QLAKZK007032@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: Warner Losh Date: Fri, 26 Jan 2024 13:10:20 -0800 (PST) CC: "Rodney W. Grimes" , Ed Maste , FreeBSD Current X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TM9MW0TVbz4Q1g X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] > On Fri, Jan 26, 2024 at 9:17?AM Rodney W. Grimes < > freebsd-rwg@gndrsh.dnsmgr.net> wrote: > > > [ Charset UTF-8 unsupported, converting... ] > > > On Thu, Jan 25, 2024, 10:49?AM Rodney W. Grimes < > > > freebsd-rwg@gndrsh.dnsmgr.net> wrote: > > > > > > > > On Thu, Jan 25, 2024, 9:11?AM Ed Maste wrote: > > > > > > > > > > > On Thu, 25 Jan 2024 at 11:00, Rodney W. Grimes > > > > > > wrote: > > > > > > > > > > > > > > > These will need to be addressed before actually removing any of > > > > these > > > > > > > > binaries, of course. > > > > > > > > > > > > > > You seem to have missed /rescue. Now think about that long > > > > > > > and hard, these tools classified as so important that they > > > > > > > are part of /rescue. Again I can not stress enough how often > > > > > > > I turn to these tools in a repair mode situation. > > > > > > > > > > > > I haven't missed rescue, it is included in the work in progress I > > > > > > mentioned. Note that rescue has included gpart since 2007. > > > > > > > > > > > > > > > > What can fdisk and/or disklabel repair that gpart can't? > > > > > > > > As far as I know there is no way in gpart to get to the > > > > MBR cyl/hd/sec values, you can only get to the LBA start > > > > and end values: > > > > > > > > > > In the last 20 years when have you needed this? > > > > Last week, and probably about every other month for the last > > 30 years. > > > > What. specifically did you need to change, for what hardware, etc? I needed to manually recraft the MBR that had been destroyed, and doing so with tools I knew would not touch anything but the MBR. I know that fdisk well do exactly what I tell it to and without any fight about the values I put in. I do not have that confidence in GPT or any other tool, I suspect if you tell gpart to write a GPT setup to what appears to be an empty disk you shall end up with that, an empty disk as it is going to clear out more than just the MBR/PMBR. > > > > > > LBA start/end is all that's relevant these days. The CHS values are > > > completely ignored > > > by FreeBSD. We use packet mode in the boot loader since about Pentium > > 150MHz > > > or so. > > > > WORLD != FreeBSD, please STOP trying to assume that the users OF FreeBSD > > are ONLY using FreeBSD!!!! > > > > Yes. And the world stopped using them too around that time, give or take 5 > years. That response doesnt even fit with the assertion. Or are you saying the world stopped using other OS's? As that is about the only thing that seems to fit your assertion. > > > I did have to change these back in the day when we inferred what the CHS > > > geometry > > > was from the drive by looking at the MBR's partitions that you knew > > > (assumed really) > > > started on a cylinder value. This hasn't mattered in FreeBSD since sos > > > rewrote ata > > > the second time. DOS had to do these things because old-school MFM, RLL, > > etc > > > disks couldn't return their CHS, so DOS had to enshrine them in the MBR > > to > > > get > > > a hint (or have the drive type BIOS to just know). Since we use LBA > > > exclusively, > > > none of this matter to FreeBSD. > > > > WORLD != FreeBSD, and weither you like it or not your BIOS and CSM > > and UEFI are PROPBABLY reading those values and might even do a > > nice divide by zero for you should you write 0 in them. > > > > Maybe rather than using all caps you could give a specific example. I've > not had to help anybody with CHS values in maybe 15 years, and even > then it was rare. In the prior 10 years to that I went from shipping product > where CHS had to be right, to shipping product where it didn't matter at > all on a set of SBCs that were lagging the industry by 5 years. I have given specifics, you seem to read right pass them, and since I already see commits falling in I am assuming at this point it has zero point in confersing with what is a Brick wall. > > Also, UEFI doesn't care: It has no CHS APIs. It's all LBA. The only places > in the > standard where 'Cylinder' is mentioned is the (now obsolete) name for > fields in > a ATA packet that now mean different parts of the LBA for modern commands. You yet again seem to ignore what it was I said, UEFI/CSM != UEFI, and there are many buggy CSM's that roach on zeros in the CHS area. Your lack of experience with these problems does not mean they lack to exist. When board makers rip out CSM and BIOS mode booting you can make your assertion, until then this stuff matters as a simple case of fact. > > > I've certainly never needed to tweak these in single user mode on an > > > emergency > > > basis. Why? Because you can't get to single user mode because the kernel > > > won't > > > even load if you have these wrong. So either you are booting some rescue > > > disk > > > to fix that (in which case you can craft it for your special > > environment)., > > > or you are > > > > rescue disk == any FreeBSD install media from the last 20 years. > > your REALLY stuck in a small box Warner, please think outside > > that box. You keep repeating FreeBSD FreeBSD FreeBSD, I have to > > inform you many of us who USE FreeBSD also USE other stuff, but > > we prefer to have FreeBSD be our goto system for this type of work. > > > > Yes. I understand that. And with the packages installed, you still can > do that. How many times do you get that ports dont just "install" on a freebsd distirubtion media.... or your chosing to ignore that side of my point. And in many situation thats all I got to work with. Not every repair work gets to come back to a lab and have its hard drive riped out to figure out something zorched the MBR/PMBR or GPT tables. > > > > > creating a special thing in multi-user, so you can install For all these > > > use cases, fdisk > > > as a port is fine. > > > > I really do not want to have to maintain my own distribution. > > > > And the project can no longer support programs that have buffer overflows > and other dangerous behavior when presented with untrusted information > from the disks that matters only to a few users. How does a moving the code to ports exactly address that? Are we really just gona sweep it away with that as the "solution" to a buffer overflow? > > > sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) > > > > start 63, size 8388513 (4095 Meg), flag 80 (active) > > > > beg: cyl 0/ head 1/ sector 1; > > > > end: cyl 1023/ head 15/ sector 63 > > > > > > > > gpart show ada0 > > > > => 63 8388545 ada0 MBR (4.0G) > > > > 63 8388513 1 freebsd [active] (4.0G) > > > > 8388576 32 - free - (16K) > > > > > > > > Now I have learned that gpart backup/restore CAN get me > > > > at least basic bsdlabel -e function, but again it has > > > > no access to all the stuff stored that showsup with > > > > bsdlabel -A. Which this is now the third time I have > > > > asked "how do I do bsdlabel -A -e with gpart"? One > > > > person at least answered that with: > > > > gpart backup GEOM >backup > > > > vi backup > > > > gpart restore GEOM > > > > > > > > > > OK Let's look at these extra fields: > > > > > > # /dev/md0: > > > type: unknown > > > disk: amnesiac > > > label: > > > flags: > > > bytes/sector: 512 > > > sectors/track: 63 > > > tracks/cylinder: 255 > > > sectors/cylinder: 16065 > > > cylinders: 130 > > > sectors/unit: 2097152 > > > rpm: 3600 > > > interleave: 1 > > > trackskew: 0 > > > cylinderskew: 0 > > > headswitch: 0 # milliseconds > > > track-to-track seek: 0 # milliseconds > > > drivedata: 0 > > > > > > type isn't used at all in FreeBSD. > > > disk is for /etc/disktab, something we've not really needed since > > FreeBSD 3 > > > or so. > > > label can be set with gpart add/modify -l. > > > I've never used flags. Can't speak to that. > > > bytes/sector: This is a physical property of the drive, not the label. > > You > > > can find it with gpart list: > > > % gpart list md0 > > > .... > > > Consumers: > > > 1. Name: md0 > > > Mediasize: 1073741824 (1.0G) > > > Sectorsize: 512 > > > The rest of this/that are reported or you can do math: > > > fwheads: 255 <- tracks/cylinder > > > fwsectors: 63 <-- sectors/track > > > last: 2097151 <-- sectors/unit - 1 > > > now, cylenders and sectors/cylinder you can compute. geom does this for > > > reading/writing disk labels. > > > rpm is hard coded to 3600 these days. FreeBSD doesn't care. > > > The rest are for interleaving, which FreeBSD doesn't do, so we don't > > care. > > > > > > So you can influence the values, but they aren't used for anything by > > > FreeBSD > > > that matters. > > > > > > What if you need them for something else? Then just use the disklabel > > port. > > > You'll never need to hack them tn single user mode, so you can use the > > port > > > for all use cases. > > > > Booting a FreeBSD install image is the use case, you seem to not > > realize people do use that for "RESCUE". > > > FreeBSD 14 CD images will exist online for ~forever. > > Warner -- Rod Grimes rgrimes@freebsd.org From nobody Fri Jan 26 21:26:20 2024 X-Original-To: freebsd-current@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 4TM9k1514jz58sTZ for ; Fri, 26 Jan 2024 21:26:33 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TM9k12y6pz4V4r; Fri, 26 Jan 2024 21:26:33 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; none Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40QLQKH8007098; Fri, 26 Jan 2024 13:26:20 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40QLQKKO007097; Fri, 26 Jan 2024 13:26:20 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401262126.40QLQKKO007097@gndrsh.dnsmgr.net> Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: To: Stefan Esser Date: Fri, 26 Jan 2024 13:26:20 -0800 (PST) CC: "Rodney W. Grimes" , Ed Maste , Warner Losh , FreeBSD CURRENT X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4TM9k12y6pz4V4r X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US] > Am 26.01.24 um 17:09 schrieb Rodney W. Grimes: > >> Am 25.01.24 um 16:38 schrieb Ed Maste: > >>> On Wed, 24 Jan 2024 at 12:30, Warner Losh wrote: > >>> sbin/growfs/tests/legacy_test.pl > >>> tools/regression/msdosfs/msdosfstest-2.sh > >>> tools/regression/tmpfs/t_vnd > >>> tools/tools/nanobsd/legacy.sh > > All these scripts that currently depend on bsdlabel could > easily be converted to exclusively use gpart instead. > > Other scripts that had been identified to use bsdlabel or > disklabel are unused / not relevant for FreeBSD. > > [...] > >> The bsdlabel/disklabel/fdisk programs could be rewritten using > >> gpart without too much effort, at least for the use cases that > > After looking at the source code it appears that there is > no need to rewrite any of the bsdlabel/disklabel code, since > it already uses geom calls to access the partition data and > only uses direct disk writes to write out the partition table > (as does gpart, AFAICT). > > So, I do not see any dependencies on deprecated kernel features. > > I have not compared the bsdlabel code and gpart_write_partcode() > in detail, but I do not see much of a difference at first glance. > > Therefore, bsdlabel and disklabel could be kept in the base > system, IMHO. (But fdisk should go ...) I still have not seen anything compelling that says fdisk must go, other than someone says there is a PR and I am not sure how a bug fix effects the position of fdisk in or out of base as the bug needs fixed regardless. > > > That would be wonderful. Even just getting it to spit out > > the FULL MBR values that are in a protective 0x238 MBR > > would go along way to diagnose some corrupt GPT disks. > > If you need access to the protective MBR of a GPT partition, > this feature should be added to gpart instead, IMHO. I am fine with that too, probalby 99% of my use case is just a sanity check that the MBR/PMBR is not messed up, but that 1% case when it is one needs a way to deal with it very carefully. > > But what's wrong with using "file -s" for this purpose: > > # file -s /dev/nda0 > /dev/nda0: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), ^sic > end-CHS (0x3ff,255,63), startsector 1, 1953525167 sectors, extended partition ^sic > table (last) Other than the sick mixing of hex and decimal output I suppose that does infact get the :reading: of the MBR/PMBR to validate there isnt an issue. Its the repair work when those values are nonsince I do not seeing file(1) fixing. > > Do you need more information from the protective MBR? I think that is all the information, same as output by fdisk, just in a different and very hard to read format. > > This will not work on mounted file systems, though. But if > you got the disk mounted, I'd expect you do not really need > this information ... Correct > > >> have not become obsolete (e.g. CHS specifications) and only for > >> use in scripts (i.e. no fdisk interactive edit mode). > > > > You are fooling yourself if you think an MBR and CHS values > > are obsolete. GPT *IS* a type 0x238 MBR and see how many > > BIOSes you can crash by writting garbage (Especially 0x0) > > to the CHS values. That MBR must have proper values, and > > you cant just ignore that they exist. > > Again something that gpart should be able to diagnose and fix. > > Doesn't "gpart recover" already fix such protective MBRs? I do not know for certain, but I think mainly "gpart recover" is about fixing the 2 copies of the GPT to be consistant, can it actually reconstuct a toasted PMBR? It would be making assumptions so I would expect to have to use some options to force it to do this. > >> Even parsing of the disktab format and a conversion to gpart > >> backup format for use by gpart restore should not be too hard. > >> > >> That would keep the commands available for those that use them > >> in scripts outside the FreeBSD sources, but would also allow to > >> remove the kernel interfaces used by those legacy tools. > >> > >> I'd be willing to write those emulations of legacy tools, if > >> there is interest in going that way ... > > > > I would be interested in seeing these. > > For me gpart does do a lot of things, but it is missing > > some very low level stuff that is probably should have. > > I read that to mean that gpart is useful for standard setup > operations, but it lacks commands that might be useful to > diagnose inconsistent parameters? Yes, like a disk with a zapped PMBR just shows up as empty, nothing, fully ready to let gpart slice and dice it up until you realize.. uh oh, that wasnt the drive I thought it was.... > > Well, adding consistency checks and warning about potential > issues might not have been on the requirements sheet, but if > you specify checks that should be performed, these could be > added either to "gpart show" or a "gaprt check" command could > be implemented. I think geom layer already does the checks, and if you fail the checks you get a nice "empty" drive. "gpart check" could be interesting. > If you want such consistency checks added, then specify them > in a feature request PR, for example. > Best regards, STefan > > -- Rod Grimes rgrimes@freebsd.org From nobody Fri Jan 26 22:17:38 2024 X-Original-To: freebsd-current@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 4TMBs90JMNz58wyY for ; Fri, 26 Jan 2024 22:17:49 +0000 (UTC) (envelope-from madis555@hot.ee) Received: from SMTPOUT09.DKA.mailcore.net (smtpout09.dka.mailcore.net [194.19.134.9]) (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-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtpout09.dka.mailcore.net", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMBs64mWmz4cjW for ; Fri, 26 Jan 2024 22:17:46 +0000 (UTC) (envelope-from madis555@hot.ee) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=online.ee header.s=mailcore header.b=TOug+b2R; dmarc=pass (policy=reject) header.from=hot.ee; spf=pass (mx1.freebsd.org: domain of madis555@hot.ee designates 194.19.134.9 as permitted sender) smtp.mailfrom=madis555@hot.ee Received: from SMTP.DKA.mailcore.net (unknown [10.1.0.53]) by SMTPOUT01.DKA.mailcore.net (Postfix) with ESMTP id BADC9E02CD; Fri, 26 Jan 2024 23:17:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=online.ee; s=mailcore; t=1706307461; bh=FFihMSVm1LZMxW/LqVHQws8pypns7THZ6sfLbOxTP9g=; h=Date:From:To:Subject:In-Reply-To:References:From; b=TOug+b2R6CVTE449c2I3XdBN8qF3nJkN8npFzzLsccJxP7H+ViyEyBif2pVAIVZqd qve7gk7Gdmn6wfNvOCaPL5NTpFW61FUJOPTwcgSuZDJQu9YbsbmGOUhouWnqNAXb9V UVXTH41TBIga7wKkKv/htGH9rfGYDSHLpfc1Hr6kVBinEhTV7740RMX+ujTRRZNThL ZSJPfEiPQ6khwE7+K+08Uw0bkkSRR7h6OJkaLnEHX7WoTYbJllGlBTiLpFeE221cpk HgGit2V5vATJ8+6DFuNPIOr2yGgsMP5MQV5w6q9Cfvqf9OGg6LtCw4FXNEIBNUXIwx yux/7tw51HJYQ== Received: from [127.0.0.1] (65-43-196-88.dyn.estpak.ee [88.196.43.65]) by SMTP.DKA.mailcore.net (Postfix) with ESMTPSA id 8F98F400FE; Fri, 26 Jan 2024 23:17:41 +0100 (CET) Date: Sat, 27 Jan 2024 00:17:38 +0200 From: Sulev-Madis Silber To: freebsd-current@freebsd.org Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) User-Agent: K-9 Mail for Android In-Reply-To: References: <77B55963-DF54-49BC-AF2C-3A115AC76B32@me.com> <202401261621.40QGLIv7006285@gndrsh.dnsmgr.net> Message-ID: List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.99 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.99)[-0.995]; DMARC_POLICY_ALLOW(-0.50)[hot.ee,reject]; R_SPF_ALLOW(-0.20)[+ip4:194.19.134.0/25]; R_DKIM_ALLOW(-0.20)[online.ee:s=mailcore]; MIME_GOOD(-0.10)[text/plain]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:3308, ipnet:194.19.128.0/18, country:SE]; FREEMAIL_FROM(0.00)[hot.ee]; ARC_NA(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; FREEMAIL_ENVFROM(0.00)[hot.ee]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_LAST(0.00)[]; DKIM_TRACE(0.00)[online.ee:+] X-Rspamd-Queue-Id: 4TMBs64mWmz4cjW add variation of this to stock image to get better rescue media=2E maybe in= staller could even be updated a bit=2E if that is really big issue=2E cons = is that this requires network to be present=2E but where to get packages fr= om anyway without it, perhaps dvd1=2E i actually find it confusing that hig= hly technically skilled people who clearly run non-standard hw of various a= rchs and with several oses, for work or hobby, argue how installer sucks=2E= you can patch it=2E then you can use it locally or submit it to fbsd=2E i = don't know, maybe i'll do it then? --- cut --- #!/bin/sh -Cefu set -Cefu kbdcontrol -r fast -l ee test -d /tmp/unionfs/etc || mkdir -p /tmp/unionfs/etc mount -t unionfs | fgrep -q /etc || mount_unionfs /tmp/unionfs/etc /etc test -d /tmp/unionfs/root || mkdir -p /tmp/unionfs/root mount -t unionfs | fgrep -q /root || mount_unionfs /tmp/unionfs/root /root test -f /etc/wall_cmos_clock || touch /etc/wall_cmos_clock test -f /etc/localtime || tzsetup Europe/Tallinn pgrep -q adjkerntz || service adjkerntz start ifconfig -a -G lo | grep '^[a-z0-9]' | cut -d : -f 1 | xargs -n 1 sh -c \ 'echo ; service dhclient status "$0" || service dhclient forcestart "$0"' test -f /tmp/ntpdate_run_done \ || ( echo ; ntpdate dome && touch /tmp/ntpdate_run_done ) echo service ntpd onestatus || service ntpd onestart echo test -f /tmp/ntpdate_run_done && ntpdate -q dome echo date echo test -f /boot/kernel/coretemp=2Eko && kldload -n coretemp test -f /boot/kernel/amdtemp=2Eko && kldload -n amdtemp sysctl -a | grep '[0-9]C$' | egrep -v '(_(CRT|PSV)|\=2Etjmax)' sysctl -a | fgrep -q battery \ && ( echo ; acpiconf -i 0 | grep -v ':[[:space:]]*$') echo --- cut --- On 26 January 2024 22:11:44 EET, Freddie Cash wrote: >Sounds like a custom mfsBSD or Frenzy CD/USB would be better suited to >these bare-metal rescue setups=2E Something that has the specific tools = you >need already installed=2E I know I've kept various versions of these CD >images around for just this purpose=2E I always found them nicer to use = than >the FreeBSD install CDs in rescue mode, as there's a fully-functional >FreeBSD install to work from, including the ability to install packages >temporarily=2E > From nobody Sat Jan 27 02:32:26 2024 X-Original-To: freebsd-current@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 4TMJW86dSBz57MX1 for ; Sat, 27 Jan 2024 02:32:36 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (troutmask.apl.washington.edu [128.95.76.21]) (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 4TMJW66vL7z5423 for ; Sat, 27 Jan 2024 02:32:34 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Authentication-Results: mx1.freebsd.org; dkim=none ("invalid DKIM record") header.d=troutmask.apl.washington.edu header.s=troutmask header.b=Syqho5Ob; dmarc=fail reason="No valid SPF" header.from=washington.edu (policy=none); spf=none (mx1.freebsd.org: domain of sgk@troutmask.apl.washington.edu has no SPF policy when checking 128.95.76.21) smtp.mailfrom=sgk@troutmask.apl.washington.edu Received: from troutmask.apl.washington.edu (localhost [127.0.0.1]) by troutmask.apl.washington.edu (8.17.1/8.17.1) with ESMTP id 40R2WQaO062414 for ; Fri, 26 Jan 2024 18:32:26 -0800 (PST) (envelope-from sgk@troutmask.apl.washington.edu) DKIM-Filter: OpenDKIM Filter v2.10.3 troutmask.apl.washington.edu 40R2WQaO062414 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=troutmask.apl.washington.edu; s=troutmask; t=1706322746; bh=/HJYtSqMT4ye68r1aV5656ekIJMVct5aYbq67YbAcJM=; h=Date:From:To:Subject:Reply-To:From; b=Syqho5Obi3iGUxAJZfedipQ2iPOJbC0JmEctXj4JCblpgecLJ6af815nDxfs+faE+ 1elC990KGxoQxFUpcIc0JgCf3c8WCcItXXVeLxjiumeYg2cZwcjVkhjIGS8wWe5JxI saAF5P009Z7Wipk5QJKvbaqDiXwBISU0EgS5ZHIg8Hptd0CpRj11Wwjv/UBfzMaBQ4 doyX5vTTgVlIGPzz/s2pECoQxkrrHmKr9dLL7UssAmVlfFHLiiRNI3071N3NQLtrZd WhIpVh0V8cltNzpSq3SPpP1AEWSHZhjObEo2V0zQv250LtnFpx/Sl4iiwiseWLuG/C RREUXRx3CJaEg== Received: (from sgk@localhost) by troutmask.apl.washington.edu (8.17.1/8.17.1/Submit) id 40R2WQOU062413 for freebsd-current@freebsd.org; Fri, 26 Jan 2024 18:32:26 -0800 (PST) (envelope-from sgk) Date: Fri, 26 Jan 2024 18:32:26 -0800 From: Steve Kargl To: freebsd-current@freebsd.org Subject: RCS and $FreeBSD$ purge Message-ID: Reply-To: sgk@troutmask.apl.washington.edu List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spamd-Bar: ++ X-Spamd-Result: default: False [2.90 / 15.00]; SUBJECT_HAS_CURRENCY(1.00)[]; NEURAL_SPAM_MEDIUM(1.00)[1.000]; NEURAL_SPAM_LONG(0.99)[0.985]; MIME_GOOD(-0.10)[text/plain]; DMARC_POLICY_SOFTFAIL(0.10)[washington.edu : No valid SPF,none]; NEURAL_HAM_SHORT(-0.08)[-0.084]; R_SPF_NA(0.00)[no SPF record]; RCPT_COUNT_ONE(0.00)[1]; ASN(0.00)[asn:73, ipnet:128.95.0.0/16, country:US]; MIME_TRACE(0.00)[0:+]; MISSING_XM_UA(0.00)[]; R_DKIM_PERMFAIL(0.00)[troutmask.apl.washington.edu:s=troutmask]; MID_RHS_MATCH_FROM(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; ARC_NA(0.00)[]; REPLYTO_ADDR_EQ_FROM(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; HAS_REPLYTO(0.00)[sgk@troutmask.apl.washington.edu]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_LAST(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; DKIM_TRACE(0.00)[troutmask.apl.washington.edu:~] X-Rspamd-Queue-Id: 4TMJW66vL7z5423 I'm currently syncing src/lib/msun with my private libm repository where I do much of my hacking on libm issues. In looking at diffs, I see a few lingering RCS and $FreeBSD$ tags. For example, lib/msun/amd64/s_scalbnl.S contains /* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") */ Should this be cleaned up or ws intentional left in the source code? -- Steve From nobody Sat Jan 27 03:13:15 2024 X-Original-To: freebsd-current@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 4TMKQN0XhVz57Qnd for ; Sat, 27 Jan 2024 03:13:32 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMKQM2xnCz57sh for ; Sat, 27 Jan 2024 03:13:31 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=freebsd.org (policy=none); spf=pass (mx1.freebsd.org: domain of carpeddiem@gmail.com designates 209.85.208.180 as permitted sender) smtp.mailfrom=carpeddiem@gmail.com Received: by mail-lj1-f180.google.com with SMTP id 38308e7fff4ca-2cf4a22e10dso10853411fa.3 for ; Fri, 26 Jan 2024 19:13:31 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706325209; x=1706930009; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=h7SW3YtpWE/MaVvL1PtYN+1Z7djTrheycGf9vN9ExRY=; b=jbu3YBheBsbZBQkFAFq3M0jFknSH/iMfZB+rafgJ4IYoY4cLpyQ3vcGcyZOeLgqxJL QMy8uIUtAiqiBhi1KJZ0C3aJjAp14YCbdk/2d79Lw3A8EGyTj7GUsktu6TRYIjlIg1br MKtUQAzRqfXKPTNqMdokYWwghgk346IiNNf4NsBRwMncT4YOt4PyIE6M4vUe+Uh0yq9D /10d2WD+/+hUdeq9vLBcTshQ//ehJNN0p60bnvjmzMEtsBlOOl107tGogNtTY7f84RFM RlWqmlz9qrDDPlYaUbColpBzqH93ZcE7/hKiQP78T/4u61n8AHq8VLLxAj9WIk8VlXl6 fSKw== X-Gm-Message-State: AOJu0Yzvw9/SaZGa/enkaZyGcRKUjJxwgUcVo5mPzZnszkQPpHTB+d2w k6hitcE/ivY3ID78wNazFqpZJQt9bNalJaGx4HH9u/6olT5cvjCGUwIoqtxn60QR77ipKYr6wEw AcMFV0Rou/wleh41SDG3OvhuXFoFBKf05 X-Google-Smtp-Source: AGHT+IGJ5gf3vES5pb3qwiOw+9xkbZhr7yXM54PLm/+ZgcoHZ2xLBYb1gL7ewvCNqIoMj4RHqj1pgHpo0T88dRIqMLg= X-Received: by 2002:a05:651c:c97:b0:2cc:d4ae:cfc3 with SMTP id bz23-20020a05651c0c9700b002ccd4aecfc3mr546030ljb.21.1706325208788; Fri, 26 Jan 2024 19:13:28 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401242042.40OKgv8P087348@dell.no.berklix.net> In-Reply-To: <202401242042.40OKgv8P087348@dell.no.berklix.net> From: Ed Maste Date: Fri, 26 Jan 2024 22:13:15 -0500 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: "Julian H. Stacey" Cc: FreeBSD Current Content-Type: text/plain; charset="UTF-8" X-Spamd-Bar: - X-Spamd-Result: default: False [-1.24 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-0.96)[-0.961]; NEURAL_SPAM_SHORT(0.62)[0.623]; FORGED_SENDER(0.30)[emaste@freebsd.org,carpeddiem@gmail.com]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17:c]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : SPF not aligned (relaxed), No valid DKIM,none]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.208.180:from]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; MIME_TRACE(0.00)[0:+]; FREEFALL_USER(0.00)[carpeddiem]; RCVD_COUNT_ONE(0.00)[1]; MISSING_XM_UA(0.00)[]; RCVD_TLS_LAST(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; R_DKIM_NA(0.00)[]; FROM_NEQ_ENVFROM(0.00)[emaste@freebsd.org,carpeddiem@gmail.com]; FROM_HAS_DN(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; TO_DN_ALL(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; RCVD_IN_DNSWL_NONE(0.00)[209.85.208.180:from] X-Rspamd-Queue-Id: 4TMKQM2xnCz57sh On Wed, 24 Jan 2024 at 15:43, Julian H. Stacey wrote: > > Probably many do, clueless there's a proposal to remove them, > as many wont be tracking lists (I havent been tracking lately, > focused on moving home, other will have other distractions) As Rod suggested I'll have the tools emit a warning when they are run, so that those users will become aware. https://reviews.freebsd.org/D43585 https://reviews.freebsd.org/D43586 From nobody Sat Jan 27 03:37:00 2024 X-Original-To: freebsd-current@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 4TMKxl6Tw6z57TJD for ; Sat, 27 Jan 2024 03:37:15 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com [209.85.167.53]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMKxl4fh4z3xKw for ; Sat, 27 Jan 2024 03:37:15 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-51030ce36fbso77119e87.3 for ; Fri, 26 Jan 2024 19:37:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706326633; x=1706931433; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RZx474863ViB8nGJtsn2h4fOZRPJnYqjpbnEzCSm79k=; b=oqQx/J2fBijy0WSftX3uo6XU4hOGGZcMG3Cv7vN6xLDpWK5Sm3+NMOkZ1fmsZAhsn+ GHTJcyB4PTqrk3ebirhxRGqTajgm4EULUWABKRU+NyBLujwZ2bwi1UjU074SFtbwmV24 bZRv0LtihCXmgq6X16Xr9O2rSlHNS7ikpWJoT//w8sgqzpK4M5kxw4pKVTOIovWwBcTZ daKahrCs52BpnFN+2bDWsKsBoIIyfOEzjg+BnRY5uEuk4oWeAuWI4PintayS5sQyjo5i ZPJgF08/cY7hKysts4m8M8fg3bhPpkDUA3hiNg3w9vzAWjUYk69TyMmr7GHji9QBlNUl +JIg== X-Gm-Message-State: AOJu0YxE3DR3NXdVFg0DGbO6jG5T969OU+nitvPsnMEzlQlNeLFe48yg GNJU++BB3qpgTeQybMwoBJRbXeLNxfwgFw5WhE+TH7fmOwoBilk3DoGmnaHRk4o+xKuX94RzvZa q/9FcgBK9xZVIrRvo50UxYZ/ygdTL8HCp X-Google-Smtp-Source: AGHT+IGG9UVydWxFoSS8DCCxsJ70j7vfjIK7d1MBATBPlRId8VyCKgLRyBiNE9V2S4j+3hW4pd3FA/ojjhzH4szzwcM= X-Received: by 2002:ac2:4114:0:b0:50e:f728:50b2 with SMTP id b20-20020ac24114000000b0050ef72850b2mr415726lfi.37.1706326633197; Fri, 26 Jan 2024 19:37:13 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401262110.40QLAKZK007032@gndrsh.dnsmgr.net> In-Reply-To: <202401262110.40QLAKZK007032@gndrsh.dnsmgr.net> From: Ed Maste Date: Fri, 26 Jan 2024 22:37:00 -0500 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: freebsd-rwg@gndrsh.dnsmgr.net Cc: Warner Losh , FreeBSD Current Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4TMKxl4fh4z3xKw X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Fri, 26 Jan 2024 at 16:10, Rodney W. Grimes wrote: > > You yet again seem to ignore what it was I said, UEFI/CSM != UEFI, and > there are many buggy CSM's that roach on zeros in the CHS area. I'm not sure what "zeros in the CHS area" is referring to -- gpart writes values in the CHS fields, regardless of whether you're creating a plain MBR or a PMBR for GPT. From nobody Sat Jan 27 13:11:50 2024 X-Original-To: freebsd-current@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 4TMZj92NKpz58Bpr for ; Sat, 27 Jan 2024 13:12:13 +0000 (UTC) (envelope-from void@f-m.fm) Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) (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 4TMZj80PC8z40pT for ; Sat, 27 Jan 2024 13:12:12 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=f-m.fm header.s=fm3 header.b=BWKOOxNo; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=Sask9zZ6; dmarc=pass (policy=none) header.from=f-m.fm; spf=pass (mx1.freebsd.org: domain of void@f-m.fm designates 66.111.4.28 as permitted sender) smtp.mailfrom=void@f-m.fm Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 0411F5C0179 for ; Sat, 27 Jan 2024 08:12:11 -0500 (EST) Received: from imap46 ([10.202.2.96]) by compute6.internal (MEProxy); Sat, 27 Jan 2024 08:12:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc :content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm3; t=1706361130; x=1706447530; bh=hpQaO0KsJ0SIdbM8yj1ubD+0tTIXDahk wlxx7WgNGcQ=; b=BWKOOxNomOtXcVbF7nICT11QKglzlSRkmBP6E5cseL0IdHGZ Oq+r4C+7vBcToL1i3aTkvowSkGjCDipvStQIqT/QWiVHI4VU4i65Hv7iRUzyjxcN EuTEiFdGQxnRx6QluKDg75NenNr4dJC3Rd6gDg+CYOjKu0keDlFQ7oK+jHcOmIqh d1vzz388YdVHEnt4BFO0wUUmryTtDpSFIg8bNapubsoIcEfUhL6I1BvJ7mey0W3e weMQDIwVEHtjyksFwOj8nILgLTtX1JKQvhd62DN0ZGYrPb6oL2j8VMUDMa/rz/TC Y1Kj5tgNBW/rPpyy3kybMwUtUsloA5kHxC0D9g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1706361130; x=1706447530; bh=hpQaO0KsJ0SIdbM8yj1ubD+0tTIXDahkwlx x7WgNGcQ=; b=Sask9zZ6ji9TFAT52lljVvrgX06lCBudxlQ5Bcy5aEMGcnXQoFf 8xrQ9Mk6R/hsyyXNOdH3qBO3HgUd6BqftJbwzE57gCv2K6fnUOEkq5SaQc6qdXMc mQ0filog0mlb5U089TTDOg5QdOnFSwtK3rPWZKTMVlcYtuGR+aO7JjIyEMWBxw1J 0HqMB3meMLCxr134SPXh7CVs4h9fQTYBCozcT8aAbNP3vpuzWigrC9WbRJ0Tp6VD 8m3GlaB1a+N6PGTbBLQ4n2t4LC6tgSvJWqbd+RnooMUVLT50CHKjG3I4cot87WUc NW/8XKivKVkULd0b4ocX0ErCLHVkbb7iQ6w== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdelledggeelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfffhffvufgtsehttdertd erredtnecuhfhrohhmpehvohhiugcuoehvohhiugesfhdqmhdrfhhmqeenucggtffrrght thgvrhhnpeeftdfhhefgjeeiteevfeeghedvkeefgeetudffffehfffgjeehtedukefhje dtveenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehv ohhiugesfhdqmhdrfhhm X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id B627E2A2008B; Sat, 27 Jan 2024 08:12:10 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-119-ga8b98d1bd8-fm-20240108.001-ga8b98d1b List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Message-Id: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> Date: Sat, 27 Jan 2024 13:11:50 +0000 From: void To: freebsd-current@freebsd.org Subject: meta mode Content-Type: text/plain X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.07 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.88)[-0.885]; DMARC_POLICY_ALLOW(-0.50)[f-m.fm,none]; R_SPF_ALLOW(-0.20)[+ip4:66.111.4.28]; R_DKIM_ALLOW(-0.20)[f-m.fm:s=fm3,messagingengine.com:s=fm3]; RWL_MAILSPIKE_GOOD(-0.10)[66.111.4.28:from]; MIME_GOOD(-0.10)[text/plain]; RCVD_IN_DNSWL_LOW(-0.10)[66.111.4.28:from]; XM_UA_NO_VERSION(0.01)[]; RCPT_COUNT_ONE(0.00)[1]; FREEMAIL_FROM(0.00)[f-m.fm]; ARC_NA(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; MIME_TRACE(0.00)[0:+]; FROM_HAS_DN(0.00)[]; DKIM_TRACE(0.00)[f-m.fm:+,messagingengine.com:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; ASN(0.00)[asn:19151, ipnet:66.111.4.0/24, country:US]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; FREEMAIL_ENVFROM(0.00)[f-m.fm]; DWL_DNSWL_NONE(0.00)[messagingengine.com:dkim] X-Rspamd-Queue-Id: 4TMZj80PC8z40pT Hi, I use meta-mode in /etc/src-env.conf so that if (for example) a small change in the kernel config is made, the machine doesn't take hours recompiling. Also, (I *think* it works this way) if src gets updated by git and world/kernel rebuilt it won't recompile already compiled files provided I don't delete /usr/obj/* But, from time to time, one might be required to make cleanworld && make cleandir (to be sure) && make clean (to be *really* sure) What circumstances & notices in /usr/src/UPDATING would require it? -- From nobody Sat Jan 27 13:51:49 2024 X-Original-To: freebsd-current@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 4TMbb25gzLz58Gmm for ; Sat, 27 Jan 2024 13:51:58 +0000 (UTC) (envelope-from lexi@le-fay.org) Received: from thyme.eden.le-Fay.ORG (THYME.EDEN.LE-FAY.ORG [81.187.47.194]) by mx1.freebsd.org (Postfix) with ESMTP id 4TMbb16GgLz474P for ; Sat, 27 Jan 2024 13:51:57 +0000 (UTC) (envelope-from lexi@le-fay.org) Authentication-Results: mx1.freebsd.org; none Received: from iris.eden.le-Fay.ORG (IRIS.EDEN.LE-FAY.ORG [IPv6:2001:8b0:aab5:106::18]) by thyme.eden.le-Fay.ORG (Postfix) with ESMTP id 710642A276; Sat, 27 Jan 2024 13:51:50 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=le-fay.org; s=thyme; t=1706363510; bh=hij4JdgQLsoBuCil44UpEnuNbWWmESOYDAnwXRsCOBA=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=hlTZc/Np6nGVOSnAdci7w1RBi/BeGZiYj6UiS2lC9FYMEUui07PQwjNyOObGDdedi BSzPxiY9WuUL1V2kgnh2g/yLiQicJBmbvfl8Fa//jBrZr0Huk4q/1CjTePRpBWM++F m7vqiRJoFIDZMs/7cHf/9+y7LnJGiA0XYvtwqOGk= Received: from ilythia.eden.le-fay.org (ILYTHIA.EDEN.LE-FAY.ORG [IPv6:2001:8b0:aab5:104:3::101]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by iris.eden.le-Fay.ORG (Postfix) with ESMTPSA id 4CC9C8761; Sat, 27 Jan 2024 13:51:50 +0000 (GMT) Date: Sat, 27 Jan 2024 13:51:49 +0000 From: Lexi Winter To: void Cc: freebsd-current@freebsd.org Subject: Re: meta mode Message-ID: Mail-Followup-To: void , freebsd-current@freebsd.org References: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="rH4372a+W3moPcPR" Content-Disposition: inline In-Reply-To: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> X-Rspamd-Queue-Id: 4TMbb16GgLz474P X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:20712, ipnet:81.187.0.0/16, country:GB] --rH4372a+W3moPcPR Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable void: > But, from time to time, one might be required to make > cleanworld && make cleandir (to be sure) && make clean (to be *really* su= re) =20 > What circumstances & notices in /usr/src/UPDATING would require it? one case this is required in non-meta mode is if you use pkg(8) (e.g., with poudriere), which determines the 'running kernel' version by looking at the ELF notes of /usr/bin/uname. if __FreeBSD_version is bumped but that binary isn't rebuilt, which is normal with an incremental build then pkg will report a version mismatch error. the (easiest) fix for that is to do a full rebuild every time __FreeBSD_version changes. pkg(8) bug report: https://github.com/freebsd/pkg/issues/2162 i don't know if meta mode will catch this and rebuild correctly, but since this confused me the first time i ran into it, i thought it was worth mentioning. --rH4372a+W3moPcPR Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQGzBAABCAAdFiEEuwt6MaPcv/+Mo+ftDHqbqZ41x5kFAmW1CnMACgkQDHqbqZ41 x5kI8gv+Pcziqs2x7at22lV0NQcy9HzAqm/ap8539xa42XQBINpBuGXZZgi/9I4R L2Zxq4jhyw7hIGudAcAMrU7U6nnw5meqFgQrAWdir/2TIYilkkaJB5tJ9gsBpOgL kOySwmma+YSHlEZTIlJsI0oE1+boCLXj1EgcdN8hEU80sVfSPTswIYZNiEUADEhQ Pgg2JAsE96BnCg19X3FRC7Pc1T1CURLeNMCDNGjjyTCPEigFfmWweGxtW19KnO59 cL9iOVDyafsxoi3nTIvKBDjBOuQo/TH7QfJot9HqKH/U1UtmSQEV213YmxQE6jid RBcJRuidndxhb5GaLQThDNCXVNiRduSGHwn6vEiitUxx/jhhm8YSeMgGLEsK+nm/ a48SqIDsJwc1RdsJOXhNQz3dKa8h7Ywp9nrHkIcfrV/6uyzhhk0SsHa4LnMl7T2e A+98H6aHaBf7UWsh8xJ7vuK2xM1NfULDYB3FduLMsZ39NT0m4up/kbkVwlqxMMWs 2ApU2cXc =e5GV -----END PGP SIGNATURE----- --rH4372a+W3moPcPR-- From nobody Sat Jan 27 13:59:50 2024 X-Original-To: freebsd-current@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 4TMbmP0sz1z58HXh for ; Sat, 27 Jan 2024 14:00:05 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMbmN4bNLz49BT for ; Sat, 27 Jan 2024 14:00:04 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-40ee9e21f89so13299265e9.0 for ; Sat, 27 Jan 2024 06:00:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706364002; x=1706968802; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=f242wnlvKGBzJ6AFkt8g7qrGUxPUFvjTA7n+V0hZ900=; b=NRAYZJ6sl6LoH438RajUxj5eXvq8fFsQjiVobwkuiCvo8vq1bElZFD2klNwe+sT3bO wQoZ7n+KLkDFpWo+rls6uHwQN6tLrMzl3RlfOSR95oFX3yMIJNQlNdtGr6Y3J3KBUfg0 6qtLmvn2m6O8S8cBQ/41IwDE/6nJAiD5fpBRJEEO5aHSZi8ypv4HmFGut2rmnrR72unk 9n2I5MzeTDomxpfk8iV3ZEL3q7Ad0PLbBguwhIrmddSen0JtVnunWdzqlRJmSsdao754 fUPyTY8fTpyFKl0XvMJxi0dISqDq0hgK9WbcgVYM6nEy2WRguFM1kcr8g/JiuaxCUNkr YiRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706364002; x=1706968802; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=f242wnlvKGBzJ6AFkt8g7qrGUxPUFvjTA7n+V0hZ900=; b=k24gub1NYVUKhy3wmndIpYPBFlDg4wFyzQFIMw/BTwyBGRGWeYX8BQbwO8jx+idkO+ UeYyroLuUpAqEK+6qvxGe4ekohqcPa7vJFWCVBQmxM8KtRPNs/vnqNOuEWvH3kFzsJkw heMalnLW4YYCyc4ekn778wDkxu3JygazbXnJeAypKqcWhPIBi5feLLOGMcAgms2HlUgw qvl+FOJEpA7FE0O77QSJLCra7NTDmierTICDJM996U3bOBDaTnlUxb68nS/l0/0GS5bw bHdvZCGPycgLKbiI5m/CnoEXD7ZCkpkySZlkAIkcZD/h3R5Oa8RgAz3+YQNagYX9lYko vE9w== X-Gm-Message-State: AOJu0Yxe+v7VisqssgBbSLq4E0q5ivLGhvfiHe4dz07AJUlridTedIyZ gPwev3pDXHHFe1uIbuhpZrhMJJFJ1xQPX2M7HT0/Pebt+EQauSSMGjRKauErQ5Q1wzmIXsNc8Fc pjobI9DFsPlzr7ZB+1aocPOUo0mdht2hOGlF2gS+BHD9TbwOl X-Google-Smtp-Source: AGHT+IF/0VDq+xxums4xxOhFWV+Nn27SGZHPg+MFYEBSsQudzCSayyGn/ugBlaD4woy6w5yXNexc80CEDBYE5dIUJNI= X-Received: by 2002:adf:e58b:0:b0:337:c5ef:3d2c with SMTP id l11-20020adfe58b000000b00337c5ef3d2cmr987221wrm.61.1706364002054; Sat, 27 Jan 2024 06:00:02 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> In-Reply-To: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> From: Warner Losh Date: Sat, 27 Jan 2024 06:59:50 -0700 Message-ID: Subject: Re: meta mode To: void Cc: FreeBSD Current Content-Type: multipart/alternative; boundary="0000000000003348c1060fedd49c" X-Rspamd-Queue-Id: 4TMbmN4bNLz49BT X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --0000000000003348c1060fedd49c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 27, 2024, 6:12=E2=80=AFAM void wrote: > Hi, > > I use meta-mode in /etc/src-env.conf so that if (for example) a small > change in the kernel config is made, the machine doesn't take hours > recompiling. > > Also, (I *think* it works this way) if src gets updated by git and > world/kernel rebuilt it won't recompile already compiled files provided > I don't delete /usr/obj/* > > But, from time to time, one might be required to make > cleanworld && make cleandir (to be sure) && make clean (to be *really* > sure) > > What circumstances & notices in /usr/src/UPDATING would require it? > Approximately never. The only time I've had issues were when the machine crashed due to sudden power failure during the build which lead to the last few .o files to be zero length with UFS. Non clean normal builds have lots of issues with moved files. But meta mode steers clear of them. Warner > --0000000000003348c1060fedd49c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Sat, Jan 27, 2024, 6:12=E2=80=AFAM void <void@f-m.fm> wrote:
Hi,

I use meta-mode in /etc/src-env.conf so that if (for example) a small
change in the kernel config is made, the machine doesn't take hours rec= ompiling.

Also, (I *think* it works this way) if src gets updated by git and
world/kernel rebuilt it won't recompile already compiled files provided=
I don't delete /usr/obj/*

But, from time to time, one might be required to make
cleanworld && make cleandir (to be sure) && make clean (to = be *really* sure)

What circumstances & notices in /usr/src/UPDATING would require it?
=

Appr= oximately never. The only time I've had issues were when the machine cr= ashed due to sudden power failure during the build which lead to the last f= ew .o files to be zero length with UFS.

Non clean normal builds have lots of issues with moved file= s. But meta mode steers clear of them.

Warner=C2=A0
--0000000000003348c1060fedd49c-- From nobody Sat Jan 27 14:29:48 2024 X-Original-To: freebsd-current@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 4TMcR61PsLz58KnV for ; Sat, 27 Jan 2024 14:30:10 +0000 (UTC) (envelope-from void@f-m.fm) Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) (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 4TMcR53rH4z4FTs for ; Sat, 27 Jan 2024 14:30:09 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; none Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id EEF6D5C0172; Sat, 27 Jan 2024 09:30:08 -0500 (EST) Received: from imap46 ([10.202.2.96]) by compute6.internal (MEProxy); Sat, 27 Jan 2024 09:30:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1706365808; x=1706452208; bh=YzlhqsEfkq PKdEHyurh6ALQE5Rnu+hgcagC2xBMubFc=; b=KS22AtCuBPeeyVMz0pgMVtW3Oy iNIGY9nLYIubGS5tBkiDbaCIbnBgV8KlMUkXzGdoPoMovF3jII1n5roFs8c9Gz5i OFfF7lEpMPVGOceSyQ0H1JsRBeXHxYKeRn3CZzKme1Qx8Onye60M23zRxPH6Wjcl kANWflqwR5fsTrmfao8XjAU6zmpa2P/LTZGO3TEj0MEmhhcqTU8K8rCluYHvavc+ yCLTDx+gfRovZq2EB9uW21+ZtBdvObvxz7JVY5Pn8np21ejEjCev6g2zpGOVxZl1 W7zYVkHwG7jAmNGTksu3jLXjObRChj2gS7ohsk8hlkSfF8c4LfDMakqIT2NQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1706365808; x=1706452208; bh=YzlhqsEfkqPKdEHyurh6ALQE5Rnu +hgcagC2xBMubFc=; b=ChoW3UAvHLr1WmmnPsLw4B9TJ2Rgz2StXOIIGFsDmEei yLixeEeyyM+xkPEJ+jo1h4AVkcWUQHDbf9o/G9B1OdNjMfWC6dxcC8EWB3voWImG 21VguyR+JRW96KpMPGAgsVEiYS7zcK2tJppKR9jbUrM1obD1KFtICgz2TO6W4xLo ugbRh9Bg6I2oyxhKe8nvx3UYmv3idHMRK0Fs5ZUoMrQ5wdbYpAjDwIs8PxoX18ix 3XC/VIqoRK0l8NqWacwYn3tC+JhAGpkipZrj/Xkzc6sawtZ0kfra3kitAEVmijQf J1a4/ThspSBjbnvHHlGIwJZh5mp85ZJ0G+A3GCinXA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdelledgieegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfggfkjghffffhvfevufgtsehttdertderredtnecuhfhrohhmpehvohhi ugcuoehvohhiugesfhdqmhdrfhhmqeenucggtffrrghtthgvrhhnpeevtdfhieeltdeitd dvieeklefhjefgvdeuffeliedugeeigefgffetvdeikeevieenucffohhmrghinhepghhi thhhuhgsrdgtohhmnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilh hfrhhomhepvhhoihgusehfqdhmrdhfmh X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id A764C2A2008B; Sat, 27 Jan 2024 09:30:08 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-119-ga8b98d1bd8-fm-20240108.001-ga8b98d1b List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Message-Id: In-Reply-To: References: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> Date: Sat, 27 Jan 2024 14:29:48 +0000 From: void To: "Lexi Winter" Cc: freebsd-current Subject: Re: meta mode Content-Type: text/plain X-Rspamd-Queue-Id: 4TMcR53rH4z4FTs X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:19151, ipnet:66.111.4.0/24, country:US] Hi, On Sat, 27 Jan 2024, at 13:51, Lexi Winter wrote: > the (easiest) fix for that is to do a full rebuild every time > __FreeBSD_version changes. > > pkg(8) bug report: https://github.com/freebsd/pkg/issues/2162 > > i don't know if meta mode will catch this and rebuild correctly, but > since this confused me the first time i ran into it, i thought it was > worth mentioning. Thank you. I've not encountered the issue you describe yet - not by design though, more like by accident ;) I normally use a local poudriere for local ports. Rather than having a make.conf src.conf etc specifically for the poudriere jail, instead they are symlinked to /etc/src.conf and /etc/make.conf (and /etc/src-env.conf) and the jail is built after a make installworld for the system using -m src=/usr/src (and because it uses the obj files created previously, it'll build and install in about a minute). Because the jail gets rebuilt when poudriere runs again, it clears out all packages and rebuilds them automatically against the new freebsd version. What I was worried about is if in /etc/src.conf I build from a default system, (for example) add WITHOUT_IPV6= and WITH_SORT_THREADS= whether the OS is smart enough to tidy the cruft left behind after these adjustments. -- From nobody Sat Jan 27 14:32:00 2024 X-Original-To: freebsd-current@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 4TMcTd5dbhz58L3L for ; Sat, 27 Jan 2024 14:32:21 +0000 (UTC) (envelope-from void@f-m.fm) Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMcTd1yTgz4Gkq for ; Sat, 27 Jan 2024 14:32:21 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=f-m.fm header.s=fm3 header.b=CHOlzYj6; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=ZC8GLic3; dmarc=pass (policy=none) header.from=f-m.fm; spf=pass (mx1.freebsd.org: domain of void@f-m.fm designates 66.111.4.28 as permitted sender) smtp.mailfrom=void@f-m.fm Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 3182E5C010B for ; Sat, 27 Jan 2024 09:32:21 -0500 (EST) Received: from imap46 ([10.202.2.96]) by compute6.internal (MEProxy); Sat, 27 Jan 2024 09:32:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1706365941; x=1706452341; bh=foOspqO/4I TDPj182x2vN6/DwECPnD/P3VTbC2NUJKk=; b=CHOlzYj6BdeTs8p4mwU92O2UMI bRRRTcusiQKdQOtbVg1rhXpf8/UodE1kA/iBiUpas/KJfxkuWkCoBT+q91RDAea4 HP2seKZqjlityEdvC2iMTsQ+KZCUM8jWsJcN/7RMtvtzw4CjYcLXujBwyfJhrVCw ctwsD57kPrENPse3g9lPUVplchKgDefWlzMiqm2LMxIpaY2MLtDNo4/jQIDjqM2Y s1c8wSOICkudkYq2ewXmuLceUnHVjuebfXMISZDi+RFIyCnH0nm75rPVMUUMy0vK JzKx1gY0LrRAJ9QBaLkw94cUrHVd78G4+3upCGgNR/RjtNq4REI9ZFewSVPA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1706365941; x=1706452341; bh=foOspqO/4ITDPj182x2vN6/DwECP nD/P3VTbC2NUJKk=; b=ZC8GLic3knVSFqfN+x4raUWeH34W+ojG5dRDqv+FELes rShpj86RY2TuUCuu+HhiAcoDqFejQ1Af6RHdlgxYxP7ofEZ0FKFGkSpVlifbAxCG lEhouDlOAfmoADUSsmj0pBlJZvtBH+lwubQBfIHR9utsXkTOCBZo1jRc8RSppVdz b+ApcYYETz08QfJv49ykjyQp8RdWwQwVR+AUwXWvjdlxTEYp1kSfMIgzu/u1twC5 Me9+riGsZbhRrtZs7IT0zF0nz9NS1IbMv0KknqOQZQphS7UPRLAU7qv5fuvUwTY5 YmEu+ITRKBgyTakisg5y25k3Ms1s4RCYM9MKHntbXA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdelledgieehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfgjfhffhffvufgtsehttd ertderredtnecuhfhrohhmpehvohhiugcuoehvohhiugesfhdqmhdrfhhmqeenucggtffr rghtthgvrhhnpeeitedvueehtdehtddvhfeuhfevhedvieelvdeiffehveelheegfedule ejudekvdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhm pehvohhiugesfhdqmhdrfhhm X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id E4AA32A2008B; Sat, 27 Jan 2024 09:32:20 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-119-ga8b98d1bd8-fm-20240108.001-ga8b98d1b List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Message-Id: <81e239c1-e21f-4efc-8052-68db1aa867fa@app.fastmail.com> In-Reply-To: References: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> Date: Sat, 27 Jan 2024 14:32:00 +0000 From: void To: freebsd-current Subject: Re: meta mode Content-Type: text/plain X-Spamd-Bar: ----- X-Spamd-Result: default: False [-5.19 / 15.00]; DWL_DNSWL_LOW(-1.00)[messagingengine.com:dkim]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[f-m.fm,none]; R_SPF_ALLOW(-0.20)[+ip4:66.111.4.28]; R_DKIM_ALLOW(-0.20)[f-m.fm:s=fm3,messagingengine.com:s=fm3]; RCVD_IN_DNSWL_LOW(-0.10)[66.111.4.28:from]; RWL_MAILSPIKE_GOOD(-0.10)[66.111.4.28:from]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; ARC_NA(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; RCPT_COUNT_ONE(0.00)[1]; FROM_HAS_DN(0.00)[]; DKIM_TRACE(0.00)[f-m.fm:+,messagingengine.com:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; FROM_EQ_ENVFROM(0.00)[]; TO_DN_ALL(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; FREEMAIL_FROM(0.00)[f-m.fm]; ASN(0.00)[asn:19151, ipnet:66.111.4.0/24, country:US]; FREEMAIL_ENVFROM(0.00)[f-m.fm] X-Rspamd-Queue-Id: 4TMcTd1yTgz4Gkq On Sat, 27 Jan 2024, at 13:59, Warner Losh wrote: > Approximately never. The only time I've had issues were when the > machine crashed due to sudden power failure during the build which lead > to the last few .o files to be zero length with UFS. > > Non clean normal builds have lots of issues with moved files. But meta > mode steers clear of them. OK, thank you. I'll leave meta mode on in src-env.conf in future. It'll certainly save time compiling!!! -- From nobody Sat Jan 27 17:08:49 2024 X-Original-To: freebsd-current@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 4TMgyF1x5Lz58ZCT for ; Sat, 27 Jan 2024 17:08:53 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (troutmask.apl.washington.edu [128.95.76.21]) (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 4TMgyD1LCXz4cFr for ; Sat, 27 Jan 2024 17:08:52 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Authentication-Results: mx1.freebsd.org; dkim=none ("invalid DKIM record") header.d=troutmask.apl.washington.edu header.s=troutmask header.b=PW0dJPeg; dmarc=fail reason="No valid SPF" header.from=washington.edu (policy=none); spf=none (mx1.freebsd.org: domain of sgk@troutmask.apl.washington.edu has no SPF policy when checking 128.95.76.21) smtp.mailfrom=sgk@troutmask.apl.washington.edu Received: from troutmask.apl.washington.edu (localhost [127.0.0.1]) by troutmask.apl.washington.edu (8.17.1/8.17.1) with ESMTP id 40RH8n6f066008 for ; Sat, 27 Jan 2024 09:08:49 -0800 (PST) (envelope-from sgk@troutmask.apl.washington.edu) DKIM-Filter: OpenDKIM Filter v2.10.3 troutmask.apl.washington.edu 40RH8n6f066008 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=troutmask.apl.washington.edu; s=troutmask; t=1706375329; bh=aR0rgr3Ac8jIuV9f6FBBAaU0d9eCGENcwIGTnN4n1pc=; h=Date:From:To:Subject:Reply-To:From; b=PW0dJPegPsvcUAiUppvgzvlCtYNwE1WnScHxOozn4TSsnq9i7NPjPWexuxp1knrMZ K135DZUpWMXXPTLINfPWlN8EIzF9gtjBMfdi3YKVn+U/8XGro66LVnaAJIulEqVuaF GXXRJfujfdvVS9eSa1hGBDLndgIWStfpNEJOLMUMJkcCeIP1ALBztWUZeyNFXuFgJO 1kDYP/bR7R5NC63F+T2lW4aZ70jI1oIfRD+w6jFmD8oQqLSkuP93yQVWop6gq6oeaG d3k3i9/xzMShizlWsrEJ3fw2KL3jqU/JdFzMiv8/Prb/OwYm0ugMIdEEP+ZMwQ7G2L u0R//gyD2Ldag== Received: (from sgk@localhost) by troutmask.apl.washington.edu (8.17.1/8.17.1/Submit) id 40RH8nwn066007 for freebsd-current@freebsd.org; Sat, 27 Jan 2024 09:08:49 -0800 (PST) (envelope-from sgk) Date: Sat, 27 Jan 2024 09:08:49 -0800 From: Steve Kargl To: freebsd-current@freebsd.org Subject: llvm ld vs binutils ld Message-ID: Reply-To: sgk@troutmask.apl.washington.edu List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spamd-Bar: ++ X-Spamd-Result: default: False [2.16 / 15.00]; NEURAL_SPAM_LONG(1.00)[0.998]; NEURAL_SPAM_MEDIUM(1.00)[0.995]; NEURAL_SPAM_SHORT(0.17)[0.166]; DMARC_POLICY_SOFTFAIL(0.10)[washington.edu : No valid SPF,none]; MIME_GOOD(-0.10)[text/plain]; MID_RHS_MATCH_FROM(0.00)[]; R_SPF_NA(0.00)[no SPF record]; ASN(0.00)[asn:73, ipnet:128.95.0.0/16, country:US]; R_DKIM_PERMFAIL(0.00)[troutmask.apl.washington.edu:s=troutmask]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; MISSING_XM_UA(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; ARC_NA(0.00)[]; RCVD_TLS_LAST(0.00)[]; REPLYTO_ADDR_EQ_FROM(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; HAS_REPLYTO(0.00)[sgk@troutmask.apl.washington.edu]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; DKIM_TRACE(0.00)[troutmask.apl.washington.edu:~] X-Rspamd-Queue-Id: 4TMgyD1LCXz4cFr In an attempt to cleanup a bit of src/lib/msun, I ran into a small issue that I cannot explain at the moment. If I have /usr/bin/ld in my path prior to /usr/local/bin/ld everything works % which ld /usr/bin/ld % make clean && make cleandepend % make and I have a libm.so.5. But if /usr/local/bin/ld is found, I see % cd msun % make clean && make cleandepend % make ... ld: error: version script assignment of 'FBSD_1.0' to symbol 'fabs' \ failed: symbol not defined cc: error: linker command failed with exit code 1 (use -v to see invocation) *** Error code 1 Stop. make: stopped in /usr/src/lib/msun % grep fabs /usr/src/lib/msun/Symbol.map fabs; fabsf; fabsl; But, if one looks in msun/Makefile, one see # FreeBSD's C library supplies these functions: #COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c so fabs is not built with libm. % nm --dynamic /lib/libc.so.7 | grep fabs 00000000000ba600 T fabs % nm --dynamic /lib/libm.so.5 | grep fabs 000000000001fa90 T fabsf 00000000000252e0 T fabsl Is this a known issue? Should fabs be removed from Symbol.map? -- Steve From nobody Sat Jan 27 20:26:32 2024 X-Original-To: freebsd-current@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 4TMmLN6CZkz58s12 for ; Sat, 27 Jan 2024 20:26:36 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMmLN4Cd2z4vJY; Sat, 27 Jan 2024 20:26:36 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; none Received: from shw-obgw-4001a.ext.cloudfilter.net ([10.228.9.142]) by cmsmtp with ESMTPS id TnaMr3VcGGAIJTpG8r53aR; Sat, 27 Jan 2024 20:26:36 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id TpG6rnOIOZ0jDTpG7rbLO2; Sat, 27 Jan 2024 20:26:35 +0000 X-Authority-Analysis: v=2.4 cv=P8GZhTAu c=1 sm=1 tr=0 ts=65b566fb a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=IkcTkHD0fZMA:10 a=dEuoMetlWLkA:10 a=6I5d2MoRAAAA:8 a=NRF7K_vUAAAA:8 a=YxBL1-UpAAAA:8 a=EkcXrb_YAAAA:8 a=xcRwdgz-wvLyNB5BA8MA:9 a=QEXdDO2ut3YA:10 a=IjZwj45LgO3ly-622nXo:22 a=-TUkS2ffhQBfG7ohTqvO:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from [127.0.0.1] (unknown [24.244.23.65]) by spqr.komquats.com (Postfix) with ESMTPSA id CAA2B78E; Sat, 27 Jan 2024 12:26:33 -0800 (PST) Date: Sat, 27 Jan 2024 12:26:32 -0800 From: Cy Schubert To: freebsd-current@freebsd.org, Ed Maste , "Julian H. Stacey" CC: FreeBSD Current Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) In-Reply-To: References: <202401242042.40OKgv8P087348@dell.no.berklix.net> Message-ID: <0C644400-6E75-4137-8E37-C3CF632381D0@cschubert.com> List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-CMAE-Envelope: MS4xfKLQtRMShGFYPy3TLn60l96Sp92QsQhTQLWAJaRHhSlnio0JzygNe4HS9bKWFsrFnhgj78TCD0KVnIkn7uL7123B5yW7hmGPXdVdz+Tcs9I1H1AYphBd oQtiAYgqJprgWfqZkOcNs81/Q9588QGpkiRfsOCKcgJUVNG1acDUWrJffjRrP+dr5Fmm6S1fnHOJ4NSob2h900WuoQkq4/W14HVDI9dKKH0Uj3OZXZj9gWdx 7dBEySzHyyrRSXBUILWN2AX2rdZkJ9wpJ7PDAFl+Uzg= X-Rspamd-Queue-Id: 4TMmLN4Cd2z4vJY X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US] On January 26, 2024 7:13:15 PM PST, Ed Maste wrote: >On Wed, 24 Jan 2024 at 15:43, Julian H=2E Stacey wrot= e: >> >> Probably many do, clueless there's a proposal to remove them, >> as many wont be tracking lists (I havent been tracking lately, >> focused on moving home, other will have other distractions) > >As Rod suggested I'll have the tools emit a warning when they are run, >so that those users will become aware=2E >https://reviews=2Efreebsd=2Eorg/D43585 >https://reviews=2Efreebsd=2Eorg/D43586 > We can also point people to the two new ports=2E --=20 Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD=2Eorg NTP: Web: https://nwtime=2Eorg e^(i*pi)+1=3D0 Pardon the typos=2E Small keyboard in use=2E From nobody Sat Jan 27 21:29:34 2024 X-Original-To: freebsd-current@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 4TMnl53ghBz58xdG for ; Sat, 27 Jan 2024 21:29:37 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMnl53CYFz43TX; Sat, 27 Jan 2024 21:29:37 +0000 (UTC) (envelope-from dim@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706390977; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZNonh0PXXApFo28DuPHDhmnklLU5iBE89ws9X/dKaPA=; b=vUwZ891IXNqjVw6+Vx/Ug8KkeFKjD7jHWNjdWM+/CA0tz7nwKG3N0H3RPYMgQXZ9Xwx/Nw JkWC0dxiyQXfksVtP9uZjJ0EiRyQAD0MOZwmG94VoSnGjOAvBQZziDQhfXE910Ea1jsTPe MSIkBQyArMoiRN2pABTXFSyZC6VABjOqQ4jMKD0rDMEKyw6jJjm+KQhCR8UIWZkHUiAh8i Cyw482fCgQcatQpjbp2hPCcVI8NFKw1qaJWHu2OGDWVxuhkrk+krdwciBjWCE5rVCYrW27 0+oMzdFe+7og3uTQRot2K4g0jm5FqpRDxBR1p/2XuswItkcfuyIMXwIgUzfZug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706390977; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZNonh0PXXApFo28DuPHDhmnklLU5iBE89ws9X/dKaPA=; b=usK0XGECUvYgYSB66/gkh6Z9ObGLLRi6x8hjF5I0rpqgLF2rEVQssroyVGo2r0qPDEyJxg 4MGlwUqvKaPQSPyapjun7Na2DGe0FVKcTSzbUps3NyIPa4Thn+KSCHtW9B5/dXHQP50FW7 mVMUhmwiL+QCuEtSnufWVzEle3/wVaEe4KHB5tSsR6CtT4quvbe7fYYBmIB51kXlI1MEFH PX4tfSfR5YHJy0Ybq9j/P/ugZ1T8g8zRqsStSjDja2Wr958iq+nUFDxCn92Opj4OP0hK01 mXk3HADa0ZuPaLN87QoyEqBpJgLCONxx0/pQjIRpZXW6kqiCwuytPKzZqnXVMA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1706390977; a=rsa-sha256; cv=none; b=cjEj3survT90RK7vLSyCD4IXSYAfO0kVy/H0qczJQ+fZxQOzsUIDOpcBzHo52Te3+oOMwc jmdsADqnpllF/b8dbr/qlop7C1aUEngoG30YeOH7gM5uWeluGlq0J/s+b8hZEFNLOKiZxM yUKV+k/4Id1sGl7fXe3vl2YvGPVXq4HrTPgO4ssrqfHNZWBIUQeeEhmI2MZIEGKoLTLlY0 yk0+JTdHc6outCweEXcq6h5osAFGz+vlI6cvGS8P53Dhjm/3ychje2GaObTEtPYUOPruMA sw3OtiNDLV0bAE8deAZTCBRKmI7JFa7cqbnYFuqch0X+ID7kg2pi/41SImL4OQ== Received: from tensor.andric.com (tensor.andric.com [87.251.56.140]) (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-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "tensor.andric.com", Issuer "R3" (verified OK)) (Authenticated sender: dim) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TMnl51WPwz1P8b; Sat, 27 Jan 2024 21:29:37 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from smtpclient.apple (longrow.home.andric.com [192.168.0.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id 15675428C2; Sat, 27 Jan 2024 22:29:35 +0100 (CET) Content-Type: text/plain; charset=us-ascii List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.700.6.1.1\)) Subject: Re: llvm ld vs binutils ld From: Dimitry Andric In-Reply-To: Date: Sat, 27 Jan 2024 22:29:34 +0100 Cc: FreeBSD CURRENT Content-Transfer-Encoding: quoted-printable Message-Id: References: To: Steve Kargl X-Mailer: Apple Mail (2.3731.700.6.1.1) On 27 Jan 2024, at 18:08, Steve Kargl = wrote: >=20 > In an attempt to cleanup a bit of src/lib/msun, I ran into > a small issue that I cannot explain at the moment. If I have > /usr/bin/ld in my path prior to /usr/local/bin/ld everything > works >=20 > % which ld > /usr/bin/ld > % make clean && make cleandepend > % make >=20 > and I have a libm.so.5. But if /usr/local/bin/ld is found, I > see >=20 > % cd msun > % make clean && make cleandepend > % make > .. > ld: error: version script assignment of 'FBSD_1.0' to symbol 'fabs' \ > failed: symbol not defined > cc: error: linker command failed with exit code 1 (use -v to see = invocation) > *** Error code 1 >=20 > Stop. > make: stopped in /usr/src/lib/msun >=20 > % grep fabs /usr/src/lib/msun/Symbol.map=20 > fabs; > fabsf; > fabsl; >=20 > But, if one looks in msun/Makefile, one see >=20 > # FreeBSD's C library supplies these functions: > #COMMON_SRCS+=3D s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c >=20 > so fabs is not built with libm. =20 >=20 > % nm --dynamic /lib/libc.so.7 | grep fabs > 00000000000ba600 T fabs > % nm --dynamic /lib/libm.so.5 | grep fabs > 000000000001fa90 T fabsf > 00000000000252e0 T fabsl >=20 >=20 > Is this a known issue? Should fabs be removed from Symbol.map? Yes, fabs is excluded in msun's Makefile: # FreeBSD's C library supplies these functions: #COMMON_SRCS+=3D s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c so it should not have been in Symbol.map at all. The comment is also incorrect, since s_frexp.c and s_isnan.c *are* actually in COMMON_SRCS, see lines 79 and 80 of the Makefile. (They are indeed also in libc, so which one is chosen is only known by the linker. :) It doesn't complain with lld >=3D 16 because of https://cgit.freebsd.org/src/commit/?id=3D2ba84b4bcdd60, where it add -Wl,--undefined-version to suppress such warnings. I added that rather big hammer to be able to continue importing llvm 16, but I see now that it may be better to attempt to fix all individual failures due to missing symbols. The reason that it still goes wrong if you put /usr/local/bin in front of your PATH (or if you set LD explicitly to /usr/local/bin/ld) is that /usr/bin/cc will pick /usr/bin/ld over whatever it finds in the PATH or in the LD variable, while bsd.linker.mk still uses PATH or LD to find the linker type and version. E.g., it concludes that the linker type is BFD and the version is 2.40, then does not add the -Wl,--undefined-version to allow undefined symbols. I committed https://cgit.freebsd.org/src/commit/?id=3Dd04e03c19a8d to remove fabs from Symbol.map, and adjust the Makefile comment. -Dimitry From nobody Sun Jan 28 01:42:05 2024 X-Original-To: freebsd-current@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 4TMvM84ppFz57PNv for ; Sun, 28 Jan 2024 01:42:44 +0000 (UTC) (envelope-from sjg@juniper.net) Received: from mx0b-00273201.pphosted.com (mx0b-00273201.pphosted.com [67.231.152.164]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "*.pphosted.com", Issuer "Sectigo RSA Organization Validation Secure Server CA" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMvM80rkgz4f0V for ; Sun, 28 Jan 2024 01:42:44 +0000 (UTC) (envelope-from sjg@juniper.net) Authentication-Results: mx1.freebsd.org; none Received: from pps.filterd (m0108161.ppops.net [127.0.0.1]) by mx0b-00273201.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 40RG11rx009366; Sat, 27 Jan 2024 17:42:41 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; h= to:cc:subject:in-reply-to:references:from:mime-version :content-type:content-id:date:message-id; s=PPS1017; bh=jyYbKKlH hl+hIA+SiaYM0g4ouFdqkrUS4axVi4dLcys=; b=k8mLJ9uMAg/LW+GanE493RF8 twoqrji8F5T3UPowERei4EK6/EcGDlnMQDTYL43p2A6OQeRsAu+b/MLgAhMkhwwx U8hSq0B2lSCUsLlHTaeV1iU5aKHWCOfL+Lz9KBVtuI+3y2ZRpb+b0udRuSyUGDMz CjLSCYdGi38ozl9/DsKBZNaNrY3CzqkHBOKWcKGrwkcPQjuLFRMuAX6vupGHTgJe urd4rTbIQFtr6YcYtI9uN6KzuNggnx+awrBNz3BUvsjqnHa+znEXEPbMpVpCk03h UDeUOmXKugT5lArTpAIOz6aWU6tLXOjNKLVgY5ap37ZchYHxAhg0FRMyrJVuMA== Received: from mw2pr02cu001.outbound.protection.outlook.com (mail-westus2azlp17012021.outbound.protection.outlook.com [40.93.10.21]) by mx0b-00273201.pphosted.com (PPS) with ESMTPS id 3vw1tx1pt9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 27 Jan 2024 17:42:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K5EM2wJv0Q7h0Tk8OZkaEN5qw8sxR+Spdbg9KKtREtUiyEC0bDWakGR0MD3bbMs5uemz710b+Nfhcf5jfiS6cOSRpFd/0FhP29Eb9rto/1Rs/hXCmSPogOH0z1RDI0hTchn9fABS9MpBB5NsExk1FRUG8EnHnI3xdVi1TGvEQLEaV5+4WA38s/UVJWK7Qs7eZqnH9zXTEbrl4sacUdvzGlrk0awJtCBM/Vdo32Db8fsRWxjSOAxnPSGUdR+tCu50SyYN0kq8bfQ5DMBD8kktybvHMsOQYJsbk1zAleo/NGLmT92JrxMpf58JE5ysN64jsYC67c/DKNOWpU95Ifxe+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jyYbKKlHhl+hIA+SiaYM0g4ouFdqkrUS4axVi4dLcys=; b=JS+BY7EdQcutzSNFlm1x96ddNN+5cGLwaBqbmTGrpNaZ1rAv0g+Z7EnqCQuxw4ow1VYEbv5dM6RqLdM0WMVvpacLKMHmFEM2IRnh8z3MrX08D+faG0g68I2A/g37cmwbmvTqm6FHWULSjvvZ/QJrw+F1X9i16l/5NZAD/cd8t8Bw6pRpdai9sovxI9ZQ6IG6Luji34uP46DanncQyd1x3pPN/EcVzYbMUrqqdKwXYTVNU7IYgwPthmxMPhZaACeVlx07aMWz0Az6ZVUj+XOeXCq4CJSpGIRffN95dWOBsNqwlH3bBt7zVT/z7EL4BiHlMA50kXO8zElJf1NsjaeHaQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 66.129.242.15) smtp.rcpttodomain=freebsd.org smtp.mailfrom=juniper.net; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=juniper.net; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jyYbKKlHhl+hIA+SiaYM0g4ouFdqkrUS4axVi4dLcys=; b=UsSUUvX4D+C4Zbfiag7ODDFyV7SnFDqHquauGFbJIJpQ0cAWisjUOHUJNR8GDTLYtW03UDYf3Wc0FiW8EEwzV+azT/kKhLFLf/zqXrYUy/N9nHA3bj6P4Njip4m9D3B5bXpqIXrV/NmPHCEpT0BxjXbKzAY8wkcIkf9EwiwJcQc= Received: from BN1PR10CA0003.namprd10.prod.outlook.com (2603:10b6:408:e0::8) by DS7PR05MB7254.namprd05.prod.outlook.com (2603:10b6:5:2d2::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.31; Sun, 28 Jan 2024 01:42:37 +0000 Received: from BN8NAM12FT017.eop-nam12.prod.protection.outlook.com (2603:10b6:408:e0:cafe::99) by BN1PR10CA0003.outlook.office365.com (2603:10b6:408:e0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.31 via Frontend Transport; Sun, 28 Jan 2024 01:42:37 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 66.129.242.15) smtp.mailfrom=juniper.net; dkim=none (message not signed) header.d=none;dmarc=fail action=oreject header.from=juniper.net; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning juniper.net discourages use of 66.129.242.15 as permitted sender) Received: from p-exchfe-eqx-02.jnpr.net (66.129.242.15) by BN8NAM12FT017.mail.protection.outlook.com (10.13.182.170) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.19 via Frontend Transport; Sun, 28 Jan 2024 01:42:37 +0000 Received: from p-exchbe-eqx-02.jnpr.net (10.104.9.15) by p-exchfe-eqx-02.jnpr.net (10.104.9.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.39; Sat, 27 Jan 2024 19:42:36 -0600 Received: from p-mailhub01.juniper.net (10.104.20.6) by p-exchbe-eqx-02.jnpr.net (10.104.9.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.39 via Frontend Transport; Sat, 27 Jan 2024 19:42:36 -0600 Received: from kaos.jnpr.net (kaos.jnpr.net [172.23.255.201]) by p-mailhub01.juniper.net (8.14.4/8.11.3) with ESMTP id 40S1ga1h007738; Sat, 27 Jan 2024 17:42:36 -0800 (envelope-from sjg@juniper.net) Received: by kaos.jnpr.net (Postfix, from userid 1377) id 97EAE73CB5; Sat, 27 Jan 2024 17:42:05 -0800 (PST) Received: from kaos.jnpr.net (localhost [127.0.0.1]) by kaos.jnpr.net (Postfix) with ESMTP id 964BE73FB0; Sat, 27 Jan 2024 17:42:05 -0800 (PST) To: void CC: , Subject: Re: meta mode In-Reply-To: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> References: <8c42cc06-d3de-432e-82ab-7fe040197223@app.fastmail.com> Comments: In-reply-to: void message dated "Sat, 27 Jan 2024 13:11:50 +0000." From: "Simon J. Gerraty" X-Mailer: MH-E 8.6+git; nmh 1.8; Emacs 29.1 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <68190.1706406125.1@kaos.jnpr.net> Date: Sat, 27 Jan 2024 17:42:05 -0800 Message-ID: <71141.1706406125@kaos.jnpr.net> X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM12FT017:EE_|DS7PR05MB7254:EE_ X-MS-Office365-Filtering-Correlation-Id: c55be511-16b1-42cc-3a4c-08dc1fa26855 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mIlgdKSZlmE7kcld3wsrEAdRVT/5KPiDBY1xxO3kxy5N69duoiGKLX9ayqdy0boLEQ3kDkqkWszZ4B5UoOQKQTq9bkS5wuqrX3GuzCSy0B5ymRU/9gqhTPexSiluUiP4X/AT2TmHrLIiqYPRYUQyyEZ2qZ+4f7vwCMbYDABMW4pGwXhgMnNqZkkpFXnZcyZhmT1sqXWWVJG01d3qizusxUIgdUyOaNgMVEg1y9L6DqXPBi58rE5yDw/QFHvUMRycs+aFMS3rJGAlQ9xaOMwdUQyH74FZ2HF35eddNCLimJ8V83Cu56bBEbdEZcnu8mtwdl6hiUhVEb4hO7u+SRSvuJrHEapMC2ysi1/261Oj31sNpAV2dlS6Ck3DHaYmiXn5ymATTEFkdb4LOmzbp51q/ojZPuxIk8vER5Td9V7J9sPjLPBUreMFaor4CDqTK1P3LI15Lq1LXhy8UHgWXWnZy5OWFzE4vFVySZviE95C0maK2Z/sxaWzvYATg1IpRfTPRMwtXnFPlKE9UBj3PE4mgdg9Z4uydWk5vPnqPJy7E1E/5Ncfz3PXt887RZmcUkkh0wdNaIuH7gV3+vqX5cbH1uazXYqkfM/NEbz2imCjVdAlZ5Wz0iD/LlbMYgEXhu3k9VqP/0BQVROoQuYE9lrDk8xrHViHv6mP0zc9NDSiICE2VK0Mdqvd8gwKgJWcLzWitlO4NIu26884M8bjGn7vHd1IkRWeLRQmg6PPT35FGcZ1e8t7F1jL2EXNwRPfroa6kW+E/BAfgJFp/UCmIRYzaw== X-Forefront-Antispam-Report: CIP:66.129.242.15;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:p-exchfe-eqx-02.jnpr.net;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(396003)(376002)(39860400002)(346002)(136003)(230922051799003)(186009)(451199024)(1800799012)(64100799003)(82310400011)(46966006)(36840700001)(40470700004)(6266002)(336012)(26005)(478600001)(9686003)(7696005)(107886003)(7126003)(356005)(41300700001)(40460700003)(40480700001)(5660300002)(82740400003)(8676002)(4326008)(8936002)(7116003)(55016003)(70586007)(70206006)(86362001)(316002)(6916009)(54906003)(2906002)(3480700007)(81166007)(47076005)(36860700001)(36900700001);DIR:OUT;SFP:1102; X-OriginatorOrg: juniper.net X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jan 2024 01:42:37.3784 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c55be511-16b1-42cc-3a4c-08dc1fa26855 X-MS-Exchange-CrossTenant-Id: bea78b3c-4cdb-4130-854a-1d193232e5f4 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bea78b3c-4cdb-4130-854a-1d193232e5f4;Ip=[66.129.242.15];Helo=[p-exchfe-eqx-02.jnpr.net] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM12FT017.eop-nam12.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR05MB7254 X-Proofpoint-GUID: S58A14mSHG5vdconjXnki6IM4CjpJJ7Y X-Proofpoint-ORIG-GUID: S58A14mSHG5vdconjXnki6IM4CjpJJ7Y X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-01-25_14,2024-01-25_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_spam_notspam policy=outbound_spam score=0 phishscore=0 impostorscore=0 mlxscore=0 suspectscore=0 clxscore=1011 priorityscore=1501 spamscore=0 lowpriorityscore=0 mlxlogscore=399 bulkscore=0 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2401190000 definitions=main-2401280011 X-Rspamd-Queue-Id: 4TMvM80rkgz4f0V X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:22843, ipnet:67.231.152.0/24, country:US] > I use meta-mode in /etc/src-env.conf so that if (for example) a small > change in the kernel config is made, the machine doesn't take hours > recompiling. > But, from time to time, one might be required to make > cleanworld && make cleandir (to be sure) && make clean (to be *really* sure) Almost never (as Warner said). I have trees that go for years without ever being cleaned. Unless I'm collecting timing data for clean tree builds. If you use DIRDEPS_BUILD as well as META_MODE, there can be cases where you need the stage tree cleaned (staging is like auto-install to DESTDIR). The most common case is when a library has switched from staging its headers from $STAGE_ROOT/$MACHINE/usr/include to $STAGE_ROOT/common/usr/include (so they only get staged once), if you don't clean out $STAGE_ROOT/$MACHINE/usr/include, builds will continue to find headers there that should be found in $STAGE_ROOT/common/usr/include and thus revert Makefile.depend changes. We added a mechanism to allow triggering auto-clean of stage tree when such changes are made. --sjg From nobody Sun Jan 28 04:52:06 2024 X-Original-To: freebsd-current@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 4TMzYw27jqz57kV2 for ; Sun, 28 Jan 2024 04:52:20 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-lj1-x22e.google.com (mail-lj1-x22e.google.com [IPv6:2a00:1450:4864:20::22e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TMzYv72d6z40h9 for ; Sun, 28 Jan 2024 04:52:19 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2cf4a845a76so20514161fa.3 for ; Sat, 27 Jan 2024 20:52:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706417537; x=1707022337; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RPo5L1YF5+7dQmFRCge+Tff+QA7/aYx9jEGzqG/eeRA=; b=RfTLDxwk5NPkl9WbjP7WuPyR0NzFXs+Qh9rddPrYz1xeSCvJR4KRntDl8mSayHJcUM jGRzmZ47rfqa+Vkcjrlsy/OL13wX1dwgE8qe2rcv6f8yuC4y4TsVfEEqmdTPRD7BuK9r iN/uV5Y3hO0MgirUh7HcvwqtakIdmSKNNy+bgg5YPoIR9QApyyqqANjCqIgANGK6kHuO PfOOzppZ4U0Dv9pj7uV2eTOtnrSmFiLyCldHzI4xbW+6XFYpoIHzeruS/eZCNaGqtv+S 8YQJzVL6J2wwTJtharbmys2txbJUD3VcSNQrVUPlSrWzV3FX06++unUGlaAc8oeMi9bV HPYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706417537; x=1707022337; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RPo5L1YF5+7dQmFRCge+Tff+QA7/aYx9jEGzqG/eeRA=; b=fY5V37Mz22BOCr9V4UGlikL/zrOYNMVWuH68FNTcCVebJBF28goEi2djz2l8Mzjphf m9rpBpIbbxrycfgeiogbG7eIhfOdue2BFPaU1PlD1EorpQA/adEBiPVkMAhy3Het4+Ng pT48+6IKt6uh4Au+wP9gWuRU2Jisayvl2d5skSjAYWqsZbcMqqFaP7UGXfhN3dMXVUsI pzCc+EWTIz2+I8aEoVg3XPsQSZNOJL2zxDi/vWqMF+cvAiCvPxVDT+zbH7uio2gE7oGs aW3x50qTL8G5Igku69Z/8PLrTg1LomrCb72RE/a3k4dvtGkguoak81Mvm4+CBuectgVl 62uw== X-Gm-Message-State: AOJu0YwMoF4Dc6tKJmKlC4cU+kvFDnUGB3hCpUdj64mzFdosJVysQlKK B1EpiCKORWhNJo8/L+tdKgkZI/f2GJzpiiMWuSM25uxg5XlbtcpODIdCsYrBX42ckWQSjiSy7xI num7iPPYe5sFYUxjwcIY6FQGCZquy8pd3FeaCbA== X-Google-Smtp-Source: AGHT+IHu4cZPMjc1cv+lR5draHOqN2d/V7gL68djko++0nsMkF8EwUMw2LcR4KpKJMPo+0VWxOPoHazyCFr6s3IGgqQ= X-Received: by 2002:a2e:8310:0:b0:2cc:d889:8d97 with SMTP id a16-20020a2e8310000000b002ccd8898d97mr1637288ljh.14.1706417537247; Sat, 27 Jan 2024 20:52:17 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401242042.40OKgv8P087348@dell.no.berklix.net> <0C644400-6E75-4137-8E37-C3CF632381D0@cschubert.com> In-Reply-To: <0C644400-6E75-4137-8E37-C3CF632381D0@cschubert.com> From: Warner Losh Date: Sat, 27 Jan 2024 21:52:06 -0700 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Cy Schubert Cc: FreeBSD Current , Ed Maste , "Julian H. Stacey" Content-Type: multipart/alternative; boundary="000000000000257efd060ffa4bf1" X-Rspamd-Queue-Id: 4TMzYv72d6z40h9 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000257efd060ffa4bf1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 27, 2024, 1:26=E2=80=AFPM Cy Schubert wrote: > On January 26, 2024 7:13:15 PM PST, Ed Maste wrote: > >On Wed, 24 Jan 2024 at 15:43, Julian H. Stacey wrote: > >> > >> Probably many do, clueless there's a proposal to remove them, > >> as many wont be tracking lists (I havent been tracking lately, > >> focused on moving home, other will have other distractions) > > > >As Rod suggested I'll have the tools emit a warning when they are run, > >so that those users will become aware. > >https://reviews.freebsd.org/D43585 > >https://reviews.freebsd.org/D43586 > > > > We can also point people to the two new ports. > The other thing we learned was that people use the installer to do interesting things in the emergency holographic shell or the installer w/o installing a system. We should look at ways we can shift to "mfs" so pkg add can work in that env. Then the basis of the objections collapse. Then it won't matter it isn't in base. Pkg add whatever recovery tools you think you need or like to use, formerly in base or no... sure, it will go away... but 99% of things are useful right away w/o a reboot... I don't think it would be a hard project... likely one that could be done by creating a miniroot that can create the mfs, extract a tarnall to it then pivot root to that.... pkg could be bootsrrapped and it would be easy from there... Warner --=20 > Cheers, > Cy Schubert > FreeBSD UNIX: Web: https://FreeBSD.org > NTP: Web: https://nwtime.org > e^(i*pi)+1=3D0 > > Pardon the typos. Small keyboard in use. > > --000000000000257efd060ffa4bf1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Sat, Jan 27, 2024, 1:26=E2=80=AFPM Cy Schubert <= Cy.Schubert@cschubert.com&= gt; wrote:
On January 26, 2024 7:13= :15 PM PST, Ed Maste <emaste@freebsd.org> wrote:
>On Wed, 24 Jan 2024 at 15:43, Julian H. Stacey <jhs@berklix.com>= wrote:
>>
>> Probably many do, clueless there's a proposal to remove them,<= br> >> as many wont be tracking lists (I havent been tracking lately,
>> focused on moving home, other will have other distractions)
>
>As Rod suggested I'll have the tools emit a warning when they are r= un,
>so that those users will become aware.
>https://reviews.freebsd.org/D43585
>https://reviews.freebsd.org/D43586
>

We can also point people to the two new ports.
=

The other thing we learned wa= s that people use the installer to do interesting things in the emergency h= olographic shell or the installer w/o installing a system. We should look a= t ways we can shift to "mfs" so pkg add can work in that env. The= n the basis of the objections collapse. Then it won't matter it isn'= ;t in base. Pkg add whatever recovery tools you think you need or like to u= se, formerly in base or no... sure, it will go away... but 99% of things ar= e useful right away w/o a reboot...

I don't think it would be a hard project... likely one that= could be done by creating a miniroot that can create the mfs, extract a ta= rnall to it then pivot root to that.... pkg could be bootsrrapped and it wo= uld be easy from there...

Warner


--000000000000257efd060ffa4bf1-- From nobody Sun Jan 28 05:22:59 2024 X-Original-To: freebsd-current@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 4TN0FS62tSz57mfq for ; Sun, 28 Jan 2024 05:23:08 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (troutmask.apl.washington.edu [128.95.76.21]) (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 4TN0FR4dVGz43F7; Sun, 28 Jan 2024 05:23:06 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Authentication-Results: mx1.freebsd.org; none Received: from troutmask.apl.washington.edu (localhost [127.0.0.1]) by troutmask.apl.washington.edu (8.17.1/8.17.1) with ESMTP id 40S5Mxon067649; Sat, 27 Jan 2024 21:22:59 -0800 (PST) (envelope-from sgk@troutmask.apl.washington.edu) DKIM-Filter: OpenDKIM Filter v2.10.3 troutmask.apl.washington.edu 40S5Mxon067649 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=troutmask.apl.washington.edu; s=troutmask; t=1706419379; bh=UgvBIwlQmQn2feX46ZfW1XF3WNc9lTdMxp6DPyHPN6c=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To:From; b=KM91RIfJ0dAiTshmOVyxuC+CN0VL2Ql/DbRojG6fkgQfHVMZNtihahOUoZJTg5JJm tnQCIWpQgpNUA2zdRFyJ3Pb57OIUeTYUNixD6ss84n6XtoPU6j4uMbRgNhNIT1IbsS eDf9cW3QMY5h7YsCuDk5pcHtZqxK6zoJxq3ecVKBQZr/XlVIcLFyrQ2xOPewoU5XZ/ errCTOHNOa7Uv5CCFFjL3wvMDb5848qOo81ygEgWsfYUvOrUjmg8V1aGb0v7ron/xb 7Kd4kp5EdywHn7T0S+TdNM62J4Cd5HE/dHxYHgcFgwC6gPko+ifPNhXs3gYPmLdHxO dvrtNvLJIPH5w== Received: (from sgk@localhost) by troutmask.apl.washington.edu (8.17.1/8.17.1/Submit) id 40S5Mx7G067648; Sat, 27 Jan 2024 21:22:59 -0800 (PST) (envelope-from sgk) Date: Sat, 27 Jan 2024 21:22:59 -0800 From: Steve Kargl To: Dimitry Andric Cc: FreeBSD CURRENT Subject: Re: llvm ld vs binutils ld Message-ID: Reply-To: sgk@troutmask.apl.washington.edu References: List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 4TN0FR4dVGz43F7 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:73, ipnet:128.95.0.0/16, country:US] On Sat, Jan 27, 2024 at 10:29:34PM +0100, Dimitry Andric wrote: > On 27 Jan 2024, at 18:08, Steve Kargl wrote: > > > > In an attempt to cleanup a bit of src/lib/msun, I ran into > > a small issue that I cannot explain at the moment. If I have > > /usr/bin/ld in my path prior to /usr/local/bin/ld everything > > works > > > > % which ld > > /usr/bin/ld > > % make clean && make cleandepend > > % make > > > > and I have a libm.so.5. But if /usr/local/bin/ld is found, I > > see > > > > % cd msun > > % make clean && make cleandepend > > % make > > .. > > ld: error: version script assignment of 'FBSD_1.0' to symbol 'fabs' \ > > failed: symbol not defined > > cc: error: linker command failed with exit code 1 (use -v to see invocation) > > *** Error code 1 > > > > Stop. > > make: stopped in /usr/src/lib/msun > > > > % grep fabs /usr/src/lib/msun/Symbol.map > > fabs; > > fabsf; > > fabsl; > > > > But, if one looks in msun/Makefile, one see > > > > # FreeBSD's C library supplies these functions: > > #COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c > > > > so fabs is not built with libm. > > > > % nm --dynamic /lib/libc.so.7 | grep fabs > > 00000000000ba600 T fabs > > % nm --dynamic /lib/libm.so.5 | grep fabs > > 000000000001fa90 T fabsf > > 00000000000252e0 T fabsl > > > > > > Is this a known issue? Should fabs be removed from Symbol.map? > > Yes, fabs is excluded in msun's Makefile: > > # FreeBSD's C library supplies these functions: > #COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c Thanks for the quick response. I knew this, but > so it should not have been in Symbol.map at all. it has been this way for a very long time. > The comment is also > incorrect, since s_frexp.c and s_isnan.c *are* actually in COMMON_SRCS, > see lines 79 and 80 of the Makefile. (They are indeed also in libc, so > which one is chosen is only known by the linker. :) I would it depends on the search order of the libraries. For static linking, it's the order on the commandline. For rtld, it's the order of the libraries in the cache. % nm --dynamic /lib/libc.so.7 | grep snan 00000000000ace30 T __isnan@@FBSD_1.0 00000000000ace60 T __isnanf@@FBSD_1.0 00000000000ace30 W isnan@@FBSD_1.0 00000000000ace60 W isnanf@@FBSD_1.0 % nm --dynamic /lib/libm.so.5 | grep snan 00000000000220a0 T __isnanf@@FBSD_1.2 00000000000220d0 T __isnanl@@FBSD_1.0 00000000000220a0 W isnanf@@FBSD_1.0 Not quite. isnan is in libc but libm. isnanf seems to be in both, and isnanl is only in libm. Does FBSD_1.2 trump FBSD_1.0 for __isnanf? > It doesn't complain with lld >= 16 because of > https://cgit.freebsd.org/src/commit/?id=2ba84b4bcdd60, where it add > -Wl,--undefined-version to suppress such warnings. I added that rather > big hammer to be able to continue importing llvm 16, but I see now that > it may be better to attempt to fix all individual failures due to > missing symbols. > > The reason that it still goes wrong if you put /usr/local/bin in front > of your PATH (or if you set LD explicitly to /usr/local/bin/ld) is that > /usr/bin/cc will pick /usr/bin/ld over whatever it finds in the PATH or > in the LD variable, while bsd.linker.mk still uses PATH or LD to find > the linker type and version. E.g., it concludes that the linker type is > BFD and the version is 2.40, then does not add the > -Wl,--undefined-version to allow undefined symbols. Thanks for the details. This had me stumped. -- Steve From nobody Sun Jan 28 06:26:34 2024 X-Original-To: freebsd-current@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 4TN1g93p5Rz57tdf for ; Sun, 28 Jan 2024 06:27:01 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Received: from www121.sakura.ne.jp (www121.sakura.ne.jp [153.125.133.21]) (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 4TN1g86dfxz49CJ; Sun, 28 Jan 2024 06:27:00 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Authentication-Results: mx1.freebsd.org; none Received: from kalamity.joker.local (123-1-91-49.area1b.commufa.jp [123.1.91.49]) (authenticated bits=0) by www121.sakura.ne.jp (8.17.1/8.17.1/[SAKURA-WEB]/20201212) with ESMTPA id 40S6QYao009214; Sun, 28 Jan 2024 15:26:34 +0900 (JST) (envelope-from junchoon@dec.sakura.ne.jp) Date: Sun, 28 Jan 2024 15:26:34 +0900 From: Tomoaki AOKI To: Warner Losh Cc: Cy Schubert , FreeBSD Current , Ed Maste , "Julian H. Stacey" Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) Message-Id: <20240128152634.828f5031245786b2e1a3bef9@dec.sakura.ne.jp> In-Reply-To: References: <202401242042.40OKgv8P087348@dell.no.berklix.net> <0C644400-6E75-4137-8E37-C3CF632381D0@cschubert.com> Organization: Junchoon corps X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.33; amd64-portbld-freebsd14.0) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4TN1g86dfxz49CJ X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:7684, ipnet:153.125.128.0/18, country:JP] On Sat, 27 Jan 2024 21:52:06 -0700 Warner Losh wrote: > On Sat, Jan 27, 2024, 1:26 PM Cy Schubert wrote: > > > On January 26, 2024 7:13:15 PM PST, Ed Maste wrote: > > >On Wed, 24 Jan 2024 at 15:43, Julian H. Stacey wrote: > > >> > > >> Probably many do, clueless there's a proposal to remove them, > > >> as many wont be tracking lists (I havent been tracking lately, > > >> focused on moving home, other will have other distractions) > > > > > >As Rod suggested I'll have the tools emit a warning when they are run, > > >so that those users will become aware. > > >https://reviews.freebsd.org/D43585 > > >https://reviews.freebsd.org/D43586 > > > > > > > We can also point people to the two new ports. > > > > The other thing we learned was that people use the installer to do > interesting things in the emergency holographic shell or the installer w/o > installing a system. We should look at ways we can shift to "mfs" so pkg > add can work in that env. Then the basis of the objections collapse. Then > it won't matter it isn't in base. Pkg add whatever recovery tools you think > you need or like to use, formerly in base or no... sure, it will go away... > but 99% of things are useful right away w/o a reboot... > > I don't think it would be a hard project... likely one that could be done > by creating a miniroot that can create the mfs, extract a tarnall to it > then pivot root to that.... pkg could be bootsrrapped and it would be easy > from there... > > Warner IIUC, there were opinions that "moving fidsk/bsdlabel to ports is not good, because it could require internet access even when it is not available". For there, IIRC, dvd1.iso included pre-built pkgs. So it coul be the best candidate. But IIRC, memstick.img doesn't include pre-built pkgs. Having another version of memstick.img something like full-memstick.img which contains full sets (or selected pkgs) would be nice for specific cases that hybrid media doesn't boot (maybe because of broken or too old BIOS). > -- > > Cheers, > > Cy Schubert > > FreeBSD UNIX: Web: https://FreeBSD.org > > NTP: Web: https://nwtime.org > > e^(i*pi)+1=0 > > > > Pardon the typos. Small keyboard in use. -- Tomoaki AOKI From nobody Sun Jan 28 07:57:29 2024 X-Original-To: freebsd-current@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 4TN3gd5cglz584J7 for ; Sun, 28 Jan 2024 07:57:33 +0000 (UTC) (envelope-from gbe@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TN3gd4sYWz4L6l; Sun, 28 Jan 2024 07:57:33 +0000 (UTC) (envelope-from gbe@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706428653; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=0Khj4jPV31Uu6w4jUuB2O7vmwhKdRYlXtxduCmgJ4oE=; b=GDPdbyOPa6wz4z9T/pIcSR2gkDoz+443K4aJMa5BUdEQZhDu5Xu5NNuyEelFAJ04q94DJn 5GZ/tVd4UXEb7toQWJjEvCxYs0OJYSEYcguIzKSM9S6Sa4Z4hykYmU/E9ZO6c1pv33h/dv N9PZeQ/5dJwUlZDK+iaChapFMNAjYC0eELcJuhVebuGSo3NakJde8ny+MLXu4WmIv0oXDM X6zMejDjXAbeU2lTyJ1ieTLDMJRcqjX8peyWtZ71QBt/Nr/ANbIkDF/1Hz27JS+GtR84Tx /qZpoMk5Z8e21ypsArIHxypm0ZSC4nQlJaU6vf9SPGiid904sFLmI0pmlY6rBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1706428653; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=0Khj4jPV31Uu6w4jUuB2O7vmwhKdRYlXtxduCmgJ4oE=; b=KjdqRajzH4j3fJR4xgTJ3etv3yTPLRvZoIt9khF2pu1TR/fCSdQkGo9kwS7Bdoz7KO+5W1 Iklp3azR93QHtd26s0ZaLsEs8YLJYwkW22bGuCgxnGGknteAlX/bOBPSoDzJgiHruXg/BX nOpiAMTRF5X98aNrD0m1f0u1VJzPCDYvfBEYQs6AnQmIYXRsJcIGh9IJ0ByCJ7PiL51drq vPxEulOuwQyCfrovWsoC1nKAkF63l7+d+xu5cuhrkc3AAoGLgfoc47HDswgrl1ItmGVocr QI+Ip2Tr+ME+2LNtUg3br44R66V+xVrAS2qq9LGj4qunQxoMCweJ5kroqojzXg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1706428653; a=rsa-sha256; cv=none; b=pvQFG/N6yOFywjQsoB9qZ3YJe8J7uxMg9QaTOFtoExzgoJuX28WNOVNY3HA85XOGnd4dTW JQ2rpZpAgJIkJbWo0EBdf3cV3uz7krUE3zFezwl4IW+Oy7GZKkLhcftHXLrw0pq9VVfwT8 bLXHx7LHDdMkGXHWWR6Txhtzho3iteQxzgS8DdjIk/fF2inSiZKb8dMKpWwaEGL7IXulP+ JnG5Y3Ai5+d1QwjmgC1rvE341cVElAAHP6DvJmCu2JVnEVsrCxIA7MmOD5Qs42W8+mj5jr bLZ0OlesHDSLgSrJhf8xfplBu1O78g4KvcS+Kiqcleiz0zoMHoD5+/WrfODyXg== Received: from localhost (p200300cb8707821c49e039006e841fb6.dip0.t-ipconnect.de [IPv6:2003:cb:8707:821c:49e0:3900:6e84:1fb6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: gbe) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TN3gd0fNXzMPZ; Sun, 28 Jan 2024 07:57:32 +0000 (UTC) (envelope-from gbe@freebsd.org) Date: Sun, 28 Jan 2024 08:57:29 +0100 From: Gordon Bergling To: Steve Kargl Cc: freebsd-current@freebsd.org Subject: Re: RCS and $FreeBSD$ purge Message-ID: References: List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="HGL+tORvjByyjCLc" Content-Disposition: inline In-Reply-To: X-Url: X-Operating-System: FreeBSD 14.0-RELEASE-p4 amd64 X-Host-Uptime: 8:49AM up 2 days, 14:01, 3 users, load averages: 0.11, 0.16, 0.18 --HGL+tORvjByyjCLc Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi Steve, On Fri, Jan 26, 2024 at 06:32:26PM -0800, Steve Kargl wrote: > I'm currently syncing src/lib/msun with my private libm=20 > repository where I do much of my hacking on libm issues. > In looking at diffs, I see a few lingering RCS and > $FreeBSD$ tags. For example, lib/msun/amd64/s_scalbnl.S > contains >=20 > /* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $")= */ >=20 > Should this be cleaned up or ws intentional left in the=20 > source code? the $FreeBSD$ tags can definitely be removed. I just did a grep through my working tree and found a lot RCSIDs, so I would tend to keep them as reference in the source files. --Gordon --HGL+tORvjByyjCLc Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEEYbWI0KY5X7yH/Fy4OQX2V8rP09wFAmW2COcACgkQOQX2V8rP 09x3Kwf/byjkIyanHlCQGg6pJh/5SZ3m9YsfALA+lSnIE86g87EcuKpV3VHAQSy+ WAfuIKb/lScM/r/KKpfLmD0vvQ8kIKs/uPKvM8IZo6xjbYb94ioVnAO4qG/FRy8E FbfdZ5plf7e/TdHguu1ijm86OtCoMMDP2mZeuG7x+24xNiwz/QodGKh96DdPjnMk Vk9Kv94bgkaqRPW28c+8fZNc3D2uM9FrwgveV8O5miP+p7ciswbhPZ5ENepln2C4 kzcXe82ydEh2gpFGCJ8jZFK6F8IkYE5/jxVDZ1JrnuNfIKycgXq/giAd5spRw4K0 rQbz7kDKqSmt1vOaHZue0x0ySePPnw== =ERfw -----END PGP SIGNATURE----- --HGL+tORvjByyjCLc-- From nobody Sun Jan 28 08:46:59 2024 X-Original-To: freebsd-current@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 4TN4mz09YXz588XN for ; Sun, 28 Jan 2024 08:47:15 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TN4my0PfFz4QlP for ; Sun, 28 Jan 2024 08:47:13 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=bsdimp-com.20230601.gappssmtp.com header.s=20230601 header.b=pTYdibu4; dmarc=none; spf=none (mx1.freebsd.org: domain of wlosh@bsdimp.com has no SPF policy when checking 2a00:1450:4864:20::52f) smtp.mailfrom=wlosh@bsdimp.com Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-558f523c072so1438192a12.2 for ; Sun, 28 Jan 2024 00:47:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706431632; x=1707036432; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=xWwypNKwpDN37vCVOdZdqxHLIeo9eqYBkVwkfhJHlAU=; b=pTYdibu4Zld0TUUrm0gwRlWkaCGZkeiQpG2CvNQmdHPyoDogGPGbZWs6MhVApiij/5 F+EuWegwGUFakRi8V4dX9/Gc2Y1kHn9CNxvvdLrw35txLZSoLxTmWY/JEZsAh3QBu4FQ pbog0YOTCs07Rr/H0t64qmyxNZp+vbRQXO3MYywLOWHcq0GFTUc+6iYebhAnBcaj6LtN lJ+XSXO68EyIkWD4XCZl/vS/7o62LtUQNcS+dO/34nQz1tZrCk+xKn2EbzNToHldPi5A qfdV6YQqmmmnredcvaygD25uuLRXPfsO+HP7w7sc2cQWXaQY4dJRKe38u/WR7F3ncr0H 7i9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706431632; x=1707036432; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=xWwypNKwpDN37vCVOdZdqxHLIeo9eqYBkVwkfhJHlAU=; b=LpYqQom0yPyBtazkbnGagqVzsa/TzFQM4SQFG7mENAaDWcc9R7+hyS8nBx7MYDZhh3 kheRv5ZvP9o4AzfFPHWdatJMt0QYhHJzysDLzkpKyQGVM6WWkSFjRK93E2eJANQnlwDB //xWX/NXWHl2S0aqYG3QrxfFOCF/8dX4sF/2efTfXQDQoTbSEpasRhHnvOKHTfmUzUbt r0TmMNsgYXbO0Ph5XmRqKr/NBvy0nzE1HrJoeVl/Vqwy2ERUE561J+VHxN0tcMI8kbT8 zy11A5hmOkicXDnHPVJ1kzct+bloT5iprhcYnPP7QZlpl2E75+xw2oyARHRLpcd1Gy5Y PZGQ== X-Gm-Message-State: AOJu0YxY6f9TEipVxEx+NTKjWKSd9kM3am/eE28YZ3EwbCO+3hjn6iHj si/BGx/jJ6xTOTrIwRqPWnN0s008XSFoSWWS2KdKnPbKO4/E0ThgYMlxAg6J+1c+c6ODL9e/LEQ tpbAG5couTBAfq0I7GVGRUNhDgO1AuK+wKxQenqd2CkxhCmS9 X-Google-Smtp-Source: AGHT+IFqeMn++CwCZoJy4GYh6tLe8CYSJjVgjCYXjWtEsKVhaZfBe4JA1/5AipRLraAtXqYBYrgxB3p6eVQlHvH6VHw= X-Received: by 2002:aa7:cf87:0:b0:553:2ce6:1447 with SMTP id z7-20020aa7cf87000000b005532ce61447mr1708410edx.34.1706431631498; Sun, 28 Jan 2024 00:47:11 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Warner Losh Date: Sun, 28 Jan 2024 01:46:59 -0700 Message-ID: Subject: Re: RCS and $FreeBSD$ purge To: Steve Kargl Cc: FreeBSD Current Content-Type: multipart/alternative; boundary="0000000000003ab1e2060ffd939f" X-Spamd-Bar: - X-Spamd-Result: default: False [-2.00 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; SUBJECT_HAS_CURRENCY(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; FORGED_SENDER(0.30)[imp@bsdimp.com,wlosh@bsdimp.com]; R_DKIM_ALLOW(-0.20)[bsdimp-com.20230601.gappssmtp.com:s=20230601]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; R_SPF_NA(0.00)[no SPF record]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+,1:+,2:~]; MISSING_XM_UA(0.00)[]; ARC_NA(0.00)[]; RCVD_TLS_LAST(0.00)[]; DMARC_NA(0.00)[bsdimp.com]; RCPT_COUNT_TWO(0.00)[2]; FROM_NEQ_ENVFROM(0.00)[imp@bsdimp.com,wlosh@bsdimp.com]; FROM_HAS_DN(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::52f:from]; TO_MATCH_ENVRCPT_SOME(0.00)[]; TO_DN_ALL(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; DKIM_TRACE(0.00)[bsdimp-com.20230601.gappssmtp.com:+] X-Rspamd-Queue-Id: 4TN4my0PfFz4QlP --0000000000003ab1e2060ffd939f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jan 26, 2024, 7:32=E2=80=AFPM Steve Kargl wrote: > I'm currently syncing src/lib/msun with my private libm > repository where I do much of my hacking on libm issues. > In looking at diffs, I see a few lingering RCS and > $FreeBSD$ tags. For example, lib/msun/amd64/s_scalbnl.S > contains > > /* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") > */ > > Should this be cleaned up or ws intentional left in the > source code? > The NetBSD and OpenBSD ones were intentional. Warner > --0000000000003ab1e2060ffd939f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


I'm = currently syncing src/lib/msun with my private libm
repository where I do much of my hacking on libm issues.
In looking at diffs, I see a few lingering RCS and
$FreeBSD$ tags.=C2=A0 For example, lib/msun/amd64/s_scalbnl.S
contains

/* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp = $") */

Should this be cleaned up or ws intentional left in the
source code?

The NetBSD and OpenBSD ones were intentional.=C2=A0

Warner=C2=A0
--0000000000003ab1e2060ffd939f-- From nobody Sun Jan 28 10:04:48 2024 X-Original-To: freebsd-current@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 4TN6Vm1HYVz58GtF for ; Sun, 28 Jan 2024 10:05:04 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (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 4TN6Vk3bhZz4Zb3; Sun, 28 Jan 2024 10:05:02 +0000 (UTC) (envelope-from kostikbel@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none); spf=softfail (mx1.freebsd.org: 2001:470:d5e7:1::1 is neither permitted nor denied by domain of kostikbel@gmail.com) smtp.mailfrom=kostikbel@gmail.com Received: from tom.home (kib@localhost [127.0.0.1] (may be forged)) by kib.kiev.ua (8.17.1/8.17.1) with ESMTP id 40SA4m5w099760; Sun, 28 Jan 2024 12:04:51 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua 40SA4m5w099760 Received: (from kostik@localhost) by tom.home (8.17.1/8.17.1/Submit) id 40SA4mHg099759; Sun, 28 Jan 2024 12:04:48 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Sun, 28 Jan 2024 12:04:48 +0200 From: Konstantin Belousov To: Mike Karels Cc: Dimitry Andric , FreeBSD CURRENT Subject: Re: llvm ld vs binutils ld Message-ID: References: List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on tom.home X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.99 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.99)[-0.994]; MIME_GOOD(-0.10)[text/plain]; DMARC_POLICY_SOFTFAIL(0.10)[gmail.com : No valid SPF, No valid DKIM,none]; MIME_TRACE(0.00)[0:+]; FREEMAIL_FROM(0.00)[gmail.com]; ARC_NA(0.00)[]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US]; RCVD_TLS_LAST(0.00)[]; MISSING_XM_UA(0.00)[]; HAS_XAW(0.00)[]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; FREEMAIL_ENVFROM(0.00)[gmail.com]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; R_DKIM_NA(0.00)[]; R_SPF_SOFTFAIL(0.00)[~all:c]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_SOME(0.00)[]; TO_DN_ALL(0.00)[]; RCPT_COUNT_THREE(0.00)[3] X-Rspamd-Queue-Id: 4TN6Vk3bhZz4Zb3 On Sat, Jan 27, 2024 at 09:22:59PM -0800, Steve Kargl wrote: > On Sat, Jan 27, 2024 at 10:29:34PM +0100, Dimitry Andric wrote: > > On 27 Jan 2024, at 18:08, Steve Kargl wrote: > > > > > > In an attempt to cleanup a bit of src/lib/msun, I ran into > > > a small issue that I cannot explain at the moment. If I have > > > /usr/bin/ld in my path prior to /usr/local/bin/ld everything > > > works > > > > > > % which ld > > > /usr/bin/ld > > > % make clean && make cleandepend > > > % make > > > > > > and I have a libm.so.5. But if /usr/local/bin/ld is found, I > > > see > > > > > > % cd msun > > > % make clean && make cleandepend > > > % make > > > .. > > > ld: error: version script assignment of 'FBSD_1.0' to symbol 'fabs' \ > > > failed: symbol not defined > > > cc: error: linker command failed with exit code 1 (use -v to see invocation) > > > *** Error code 1 > > > > > > Stop. > > > make: stopped in /usr/src/lib/msun > > > > > > % grep fabs /usr/src/lib/msun/Symbol.map > > > fabs; > > > fabsf; > > > fabsl; > > > > > > But, if one looks in msun/Makefile, one see > > > > > > # FreeBSD's C library supplies these functions: > > > #COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c > > > > > > so fabs is not built with libm. > > > > > > % nm --dynamic /lib/libc.so.7 | grep fabs > > > 00000000000ba600 T fabs > > > % nm --dynamic /lib/libm.so.5 | grep fabs > > > 000000000001fa90 T fabsf > > > 00000000000252e0 T fabsl > > > > > > > > > Is this a known issue? Should fabs be removed from Symbol.map? > > > > Yes, fabs is excluded in msun's Makefile: > > > > # FreeBSD's C library supplies these functions: > > #COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c > > Thanks for the quick response. I knew this, but > > > so it should not have been in Symbol.map at all. > > it has been this way for a very long time. > > > The comment is also > > incorrect, since s_frexp.c and s_isnan.c *are* actually in COMMON_SRCS, > > see lines 79 and 80 of the Makefile. (They are indeed also in libc, so > > which one is chosen is only known by the linker. :) > > I would it depends on the search order of the libraries. For > static linking, it's the order on the commandline. For rtld, > it's the order of the libraries in the cache. > > % nm --dynamic /lib/libc.so.7 | grep snan > 00000000000ace30 T __isnan@@FBSD_1.0 > 00000000000ace60 T __isnanf@@FBSD_1.0 > 00000000000ace30 W isnan@@FBSD_1.0 > 00000000000ace60 W isnanf@@FBSD_1.0 > % nm --dynamic /lib/libm.so.5 | grep snan > 00000000000220a0 T __isnanf@@FBSD_1.2 > 00000000000220d0 T __isnanl@@FBSD_1.0 > 00000000000220a0 W isnanf@@FBSD_1.0 > > Not quite. isnan is in libc but libm. isnanf seems to be > in both, and isnanl is only in libm. Does FBSD_1.2 trump > FBSD_1.0 for __isnanf? No, the binary specifies which version of the symbol it wants, either __isnanf@FBSD_1.2 or __isnanf@FBSD_1.0, and the dynamic linker binds to the version. Which version is recorded into the consumer binary, is up to the static linker (ld), and there it is normally defined by the order of the libraries specified on the command line. > > > It doesn't complain with lld >= 16 because of > > https://cgit.freebsd.org/src/commit/?id=2ba84b4bcdd60, where it add > > -Wl,--undefined-version to suppress such warnings. I added that rather > > big hammer to be able to continue importing llvm 16, but I see now that > > it may be better to attempt to fix all individual failures due to > > missing symbols. > > > > The reason that it still goes wrong if you put /usr/local/bin in front > > of your PATH (or if you set LD explicitly to /usr/local/bin/ld) is that > > /usr/bin/cc will pick /usr/bin/ld over whatever it finds in the PATH or > > in the LD variable, while bsd.linker.mk still uses PATH or LD to find > > the linker type and version. E.g., it concludes that the linker type is > > BFD and the version is 2.40, then does not add the > > -Wl,--undefined-version to allow undefined symbols. > > Thanks for the details. This had me stumped. > > -- > Steve From nobody Sun Jan 28 16:28:05 2024 X-Original-To: freebsd-current@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 4TNH185Rqmz58sY1 for ; Sun, 28 Jan 2024 16:28:28 +0000 (UTC) (envelope-from void@f-m.fm) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TNH182JVJz4JhC for ; Sun, 28 Jan 2024 16:28:28 +0000 (UTC) (envelope-from void@f-m.fm) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=f-m.fm header.s=fm3 header.b=OwKMgTz+; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=PJJBRy3u; dmarc=pass (policy=none) header.from=f-m.fm; spf=pass (mx1.freebsd.org: domain of void@f-m.fm designates 64.147.123.25 as permitted sender) smtp.mailfrom=void@f-m.fm Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 6A92C3200AC9 for ; Sun, 28 Jan 2024 11:28:27 -0500 (EST) Received: from imap46 ([10.202.2.96]) by compute6.internal (MEProxy); Sun, 28 Jan 2024 11:28:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=f-m.fm; h=cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1706459306; x=1706545706; bh=jq6owST6u+ u4x6e0hRtth9IpJmZgWTfHsr1149dYco4=; b=OwKMgTz+qZEV9dk5ENefbygr8I 0TJ1Q9riBd7tluMPLEWMRbUV42GEj5JeVhucXb8vCcTmvNQ7Rfr0bhavFAwSzQW+ 0eSPz4k7nVsegueY2plpW132XXrygAdioXhFHtiN9vp9yjpQDilDzHRl5cg8Cjen Xyyya8YU9jqp8xmBMUEnJwSpD32ZO3cpkZFv9Euv9gpev/5pXrPrDryfycnEvO/G ETdUqtEVYA/mbzJpwfQ/0cqCNkbUu5jGslflk+FehGeOGNvlIFFMfJt+vabnSUcv tbaLXQZZ54LsuOChNg993GWJbR1eXMLVzLuOYd2haBLvBwIl/QyKkUVZ0eHw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1706459306; x=1706545706; bh=jq6owST6u+u4x6e0hRtth9IpJmZg WTfHsr1149dYco4=; b=PJJBRy3u3FRbkrwXLnkXqaWlazTw8qUtq+kyz1eRPo4b UEc2vuuuc0WTSfGuxIKOoVPwBluwbm0u5H4J6je4n8akoJgjZ8jA7bAljApItaxP sIocwCT0/aGsZLghaP13dHuHEzVFLO/yzlXW1atNvGp1aIb8wxhutbeNyXN0E2px JCkKqg4vPgMZULPt+9YzcX3G3b6H6lHRnzvmmqQ7BYY4BbehRjvgiIlgKSsd4lg1 F4Mp/xg/aCcQJ4h+Pw+EiHUCQwmGYdzn/bXvMg9ag987S2Zu9HojJ4Lhmlc09Rml eb/knI2hYcHhKAD4RDeqlgLJpHEK4/nmBl1juSF4xw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrfedtvddgkeekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfgjfhffhffvufgtsehttd ertderredtnecuhfhrohhmpehvohhiugcuoehvohhiugesfhdqmhdrfhhmqeenucggtffr rghtthgvrhhnpeeitedvueehtdehtddvhfeuhfevhedvieelvdeiffehveelheegfedule ejudekvdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhm pehvohhiugesfhdqmhdrfhhm X-ME-Proxy: Feedback-ID: i2541463c:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id 9E3A22A2008B; Sun, 28 Jan 2024 11:28:26 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-119-ga8b98d1bd8-fm-20240108.001-ga8b98d1b List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 Message-Id: <71f78e7a-0d25-446a-951c-79482c242429@app.fastmail.com> In-Reply-To: References: Date: Sun, 28 Jan 2024 16:28:05 +0000 From: void To: freebsd-current Subject: Re: make buildworld failure on arm64 on -current n267777 Content-Type: text/plain X-Spamd-Bar: ----- X-Spamd-Result: default: False [-5.49 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; DWL_DNSWL_LOW(-1.00)[messagingengine.com:dkim]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[f-m.fm,none]; RWL_MAILSPIKE_EXCELLENT(-0.40)[64.147.123.25:from]; R_DKIM_ALLOW(-0.20)[f-m.fm:s=fm3,messagingengine.com:s=fm3]; R_SPF_ALLOW(-0.20)[+ip4:64.147.123.25:c]; RCVD_IN_DNSWL_LOW(-0.10)[64.147.123.25:from]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; RCVD_TLS_LAST(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; ASN(0.00)[asn:29838, ipnet:64.147.123.0/24, country:US]; FROM_HAS_DN(0.00)[]; TO_DN_ALL(0.00)[]; FREEMAIL_FROM(0.00)[f-m.fm]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; DKIM_TRACE(0.00)[f-m.fm:+,messagingengine.com:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FREEMAIL_ENVFROM(0.00)[f-m.fm] X-Rspamd-Queue-Id: 4TNH182JVJz4JhC On Fri, 26 Jan 2024, at 00:14, void wrote: > In /usr/src # git rev-list --count --first-parent HEAD > 267777 in /usr/src, a 'git reset --hard' followed by 'git pull' and then 'git checkout main' fixed this. For some reason, 'git pull --ff-only' didn't pull /usr/src/sys/contrib/dev/acpica/include/platform ! -- From nobody Sun Jan 28 18:29:32 2024 X-Original-To: freebsd-current@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 4TNKj81fQcz593vy for ; Sun, 28 Jan 2024 18:29:48 +0000 (UTC) (envelope-from tomek@cedro.info) Received: from mail-yw1-x1131.google.com (mail-yw1-x1131.google.com [IPv6:2607:f8b0:4864:20::1131]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TNKj76lZJz4gBQ for ; Sun, 28 Jan 2024 18:29:47 +0000 (UTC) (envelope-from tomek@cedro.info) Authentication-Results: mx1.freebsd.org; none Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-5ff821b9acfso17817617b3.1 for ; Sun, 28 Jan 2024 10:29:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cedro.info; s=google; t=1706466587; x=1707071387; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=JbtcJMp4REzNHFrLVYrVFrb/1yNt2n8HncSdDOEsSdY=; b=jEkt8OamDAE7RKQerIXk2TLtUT3TIvlccYniO+hffSFhWcKSgTz3+QLk3hhoCCaYUZ PY+K+9NqBmklLLsz4WvDd+RDUcVlfjDyggwZ7ExyJuPXHFbaOzAQkKmDbsKn8TAlnmW+ GsqAqwGhHqBPjGuDJJc/X0nz+YIA1UWKteLZR5W27VQ2OTrRIVPtXPghIuiUYg2U/L+o 537ocPo4WoQAws5b+cY41hTwEso+zxqoAHDfJWMPxJaoRFwVIU5rxm2ie1DLtxn7qzlj PaH3DRR19c/DSSYj53xAGlP/KakvS+IUd/psNQHUM8m3V4+foiP6ftNC1jw4lsldaaci gTvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706466587; x=1707071387; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JbtcJMp4REzNHFrLVYrVFrb/1yNt2n8HncSdDOEsSdY=; b=oA5cFwqKBSkQlqEdqveh7/6bZDE4Ld54Cbl4sFa3EQBUU/eFQHM7+DWlg4h/MeisdS 4BAFMQVzvf+dGVbYIjDNrWJrAqnRgYX+LRe0FskYP8kLupRNqezOuhLKzJbe920fC+hX hbbfggDkG4hNL3tJeAUGetsIBFWyip3UM/KxQQ3ITTtRPZLRz/ebjq1LTOCZldi3llqb BZIxR1rL2XhQS8mf6hHS3NKPLlJP/BOfHAvECUQo6FQUE4OLg52CyBbMEfOe4/a5Ea1w wcf3WUknnbbGuvhdo+p11yOdRdArudbEtmrRSL3XNGwg2pK0gFmopAmzE0NIqKuVJSY/ bB4w== X-Gm-Message-State: AOJu0YygVSrOeh6fimIgyWTX9hd+0OHGtwLd5OTl5GuNG6U2qG2VAMZ6 zL4Egc7tUktM2jywef2LwdauXPrU3JWrLBMWxE60HtKYzCE4e5ipsMPE+8ioGYfkaiTfDjJwCCU = X-Google-Smtp-Source: AGHT+IEOPsqOay63mxfjsvIo6YS8TA1QIK5YFa6K5CDfrkBc2DB8PmrKtSIwpoh2kiZL8N7B5Oft2Q== X-Received: by 2002:a25:adc7:0:b0:dc6:4a88:bd4a with SMTP id d7-20020a25adc7000000b00dc64a88bd4amr1345185ybe.48.1706466586835; Sun, 28 Jan 2024 10:29:46 -0800 (PST) Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com. [209.85.128.176]) by smtp.gmail.com with ESMTPSA id d82-20020a254f55000000b00dbd9eee633dsm1772229ybb.59.2024.01.28.10.29.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 28 Jan 2024 10:29:46 -0800 (PST) Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-602cab8d7c9so20666277b3.0; Sun, 28 Jan 2024 10:29:45 -0800 (PST) X-Received: by 2002:a0d:e214:0:b0:602:ce52:6218 with SMTP id l20-20020a0de214000000b00602ce526218mr2459177ywe.66.1706466585573; Sun, 28 Jan 2024 10:29:45 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401242042.40OKgv8P087348@dell.no.berklix.net> <0C644400-6E75-4137-8E37-C3CF632381D0@cschubert.com> <20240128152634.828f5031245786b2e1a3bef9@dec.sakura.ne.jp> In-Reply-To: <20240128152634.828f5031245786b2e1a3bef9@dec.sakura.ne.jp> From: Tomek CEDRO Date: Sun, 28 Jan 2024 19:29:32 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Tomoaki AOKI Cc: Warner Losh , Cy Schubert , FreeBSD Current , Ed Maste , "Julian H. Stacey" Content-Type: multipart/alternative; boundary="000000000000a78230061005b6a1" X-Rspamd-Queue-Id: 4TNKj76lZJz4gBQ X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] --000000000000a78230061005b6a1 Content-Type: text/plain; charset="UTF-8" Yes! Installer is always used in emergency it would be great to provide some servicing tools there too :-) For years I was using bootable Linux to fix people computers and it would be nice to have that in FreeBSD :-) +1 for memstick full with additional service utilities (fix partitions, mount fs, undelete, ntfs support, etc) :-) -- CeDeROM, SQ7MHZ, http://www.tomek.cedro.info --000000000000a78230061005b6a1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Yes! Installer is always used in emergency it would = be great to provide some servicing tools there too :-)

For years I was using bootable Linux to fix = people computers and it would be nice to have that in FreeBSD :-)

+1 for memstick full with additio= nal service utilities (fix partitions, mount fs, undelete, ntfs support, et= c) :-)

--
Ce= DeROM, SQ7MHZ, http://www.tomek.ced= ro.info
--000000000000a78230061005b6a1-- From nobody Sun Jan 28 19:24:20 2024 X-Original-To: freebsd-current@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 4TNLwM27BJz598Gj for ; Sun, 28 Jan 2024 19:24:35 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-lj1-x234.google.com (mail-lj1-x234.google.com [IPv6:2a00:1450:4864:20::234]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TNLwM0LRQz4nYT for ; Sun, 28 Jan 2024 19:24:35 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2cf1288097aso27664721fa.0 for ; Sun, 28 Jan 2024 11:24:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1706469871; x=1707074671; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4sXCE/MP2CpShlm0yr5BCs0IGfkbxJEEvMmoOnooJFI=; b=ktJ52E9e/WEqEWeYNKbEfbCIdxyhgzT+RmIydmEC/hdeRQUoUMw4CMH+ZNhHjihLwO UHMIuLEhxsNCzpzO946xhMFJ2sf1NO8Apv40urIN1WU5tL58zzLobBm4Tywh9Ck4L7cV e7IADtRLdxvDyv+a0I6I1HsMnCNwd7LcqdF/Q2bEt5F9wm7b0Kun0uKiPrIPMY0j0PPj 9bPffuIBPRxe2SfTzkVqZkcrG3GitcHPfCgaiFCPeLcT4jAbRX0pxkc2oQBV0yQq2GrP Ckbu2ywXfuRvPiP0HjPOJ5DbDY7d8iJ648xXHvF9Crjhrq+WJVE350gavvRbq3/Q2KjW 3zqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706469871; x=1707074671; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4sXCE/MP2CpShlm0yr5BCs0IGfkbxJEEvMmoOnooJFI=; b=Jd8fSxee17tRI3V6kQHFQTic5etxNNoLDvdRgFKPVKfGL5WosUAwS4Mb30MmV34Co9 v/yUpIbsWJNyKVraPe/vspUslCg3nU4sDE/zM9xjfsGfQn0qRd0Jo6aWS0WyJaf3XAPO DMKogs2v/2RPQgwHdTeOAm9mPIMy9DNN/JnelTc7o94tt8Jkh+fdxrnYRK5vlG6TIW4Y tRZ/Rv8sqQ3Ei3U3TL/kqMa2i+qzg50Vld+tJFfjWv3cb9IUa6hKk8BSvvKCxvHFbD7E TPJg79CdPra1nAZVnr0OhZhdAj5txNtuFZSUInKOHvEQpDRmk7uWbu39ZX177tUaJdMo 33EQ== X-Gm-Message-State: AOJu0YyhY+XtzdmZFDE3mtxp2mh5V61/lGuDcLigy9HOF9cTK/+AlrID M0mloUxXUlFHxKIfzscAVONpdla3chDQ7UrIH7jVhtf6A/hlmrbuejheQnKAzbdrUcPQJvb2YCW 9qYvSoPw4arxTrlWH8ve5gYBYeJjG14jIxSr8jlQEWFfd2nnTxb8= X-Google-Smtp-Source: AGHT+IE+uZPkeKS55YZIJZoyXymnBxBBcu2HhbmARkgACRSf92qHcJ57k7PIfsvc5qDHBA3wCRrjDdno4BR7KIdwXgg= X-Received: by 2002:a2e:989a:0:b0:2cf:1b23:f8bf with SMTP id b26-20020a2e989a000000b002cf1b23f8bfmr2677682ljj.2.1706469871325; Sun, 28 Jan 2024 11:24:31 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <202401242042.40OKgv8P087348@dell.no.berklix.net> <0C644400-6E75-4137-8E37-C3CF632381D0@cschubert.com> <20240128152634.828f5031245786b2e1a3bef9@dec.sakura.ne.jp> In-Reply-To: From: Warner Losh Date: Sun, 28 Jan 2024 12:24:20 -0700 Message-ID: Subject: Re: Removing fdisk and bsdlabel (legacy partition tools) To: Tomek CEDRO Cc: Tomoaki AOKI , Cy Schubert , FreeBSD Current , Ed Maste , "Julian H. Stacey" Content-Type: multipart/alternative; boundary="0000000000008032340610067a5f" X-Rspamd-Queue-Id: 4TNLwM0LRQz4nYT X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --0000000000008032340610067a5f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I'll add it to the gsoc list, unless someone submits a pull request to make it so in the mean time :) Warner On Sun, Jan 28, 2024 at 11:29=E2=80=AFAM Tomek CEDRO wro= te: > Yes! Installer is always used in emergency it would be great to provide > some servicing tools there too :-) > > For years I was using bootable Linux to fix people computers and it would > be nice to have that in FreeBSD :-) > > +1 for memstick full with additional service utilities (fix partitions, > mount fs, undelete, ntfs support, etc) :-) > > -- > CeDeROM, SQ7MHZ, http://www.tomek.cedro.info > --0000000000008032340610067a5f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I'll add it to the gsoc list, unless someone subm= its a pull request to make it so in the mean time :)

Warner

On Sun, Jan 28, 2024 at 11:29=E2=80=AFAM Tomek CEDRO <= ;tomek@cedro.info> wrote:
Yes! Installer is always used in emergency it would be great to provide so= me servicing tools there too :-)

For years I was using bootable Linux to fix people computers and = it would be nice to have that in FreeBSD :-)

+1 for memstick full with additional service utilities= (fix partitions, mount fs, undelete, ntfs support, etc) :-)

=
--
CeDeROM, SQ7MHZ, http://www.tomek.cedro.info
--0000000000008032340610067a5f--