From owner-freebsd-hackers@freebsd.org Tue Feb 5 23:35:36 2019 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 076A114D41B7 for ; Tue, 5 Feb 2019 23:35:36 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from hz.grosbein.net (hz.grosbein.net [IPv6:2a01:4f8:d12:604::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "hz.grosbein.net", Issuer "hz.grosbein.net" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 2132A6FAC4 for ; Tue, 5 Feb 2019 23:35:24 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from eg.sd.rdtc.ru (eg.sd.rdtc.ru [IPv6:2a03:3100:c:13:0:0:0:5]) by hz.grosbein.net (8.15.2/8.15.2) with ESMTPS id x15NZ2Qk096113 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 6 Feb 2019 00:35:08 +0100 (CET) (envelope-from eugen@grosbein.net) X-Envelope-From: eugen@grosbein.net X-Envelope-To: contact@emersion.fr Received: from [10.58.0.4] ([10.58.0.4]) by eg.sd.rdtc.ru (8.15.2/8.15.2) with ESMTPS id x15NZ10P074395 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Wed, 6 Feb 2019 06:35:01 +0700 (+07) (envelope-from eugen@grosbein.net) Subject: Re: Unattended FreeBSD installation To: Simon Ser , "freebsd-hackers@freebsd.org" , Drew DeVault References: From: Eugene Grosbein Message-ID: Date: Wed, 6 Feb 2019 06:34:52 +0700 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=0.3 required=5.0 tests=BAYES_00,LOCAL_FROM,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Report: * -2.3 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * -0.0 SPF_PASS SPF: sender matches SPF record * 2.6 LOCAL_FROM From my domains X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on hz.grosbein.net X-Rspamd-Queue-Id: 2132A6FAC4 X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; spf=permerror (mx1.freebsd.org: domain of eugen@grosbein.net uses mechanism not recognized by this client) smtp.mailfrom=eugen@grosbein.net X-Spamd-Result: default: False [-4.03 / 15.00]; ARC_NA(0.00)[]; TO_DN_EQ_ADDR_SOME(0.00)[]; MX_INVALID(0.50)[greylisted]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; TO_DN_SOME(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[grosbein.net]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; RCVD_COUNT_THREE(0.00)[3]; TO_MATCH_ENVRCPT_SOME(0.00)[]; R_SPF_PERMFAIL(0.00)[]; NEURAL_HAM_SHORT(-0.99)[-0.985,0]; IP_SCORE(-1.45)[ip: (-2.55), ipnet: 2a01:4f8::/29(-2.42), asn: 24940(-2.26), country: DE(-0.01)]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/29, country:DE]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_TLS_ALL(0.00)[] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Feb 2019 23:35:36 -0000 06.02.2019 6:12, Simon Ser wrote: > Hi all, > > For the purposes of a CI service [1], I want to write a script that > generates a fresh qcow2 FreeBSD image. So far I've been using > bsdinstall(8) and this has been working well when testing locally [2]. > However this doesn't work when run from SSH because bsdinstall(8) uses > dialog(1), which requires a TTY (or fails). > > I've been wondering: you offer qcow2 images available for download on > your website, but how are these generated? I don't think I can use these > directly since I need to enable sshd, but I could probably re-use your > image generation script. > > If it's not possible to use the same script, do you have suggestions to > make it work? In fact, there is absolutely nothing sacral in generating bootable FreeBSD image. Just create empty directory and use tar to extract two files from ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/11.2-RELEASE/ there: kernel.txz, base.txz (and optionally ports.txz). Add local files and configs, maybe packages. chroot(8) is handy if target arch is same as of build box Don't forget to mount devfs before running commands with chroot: mount -t devfs devfs $mountpoint Determine total size with "du -s" and create UFS image with makefs(8) using -s flag to specify size of an image adding some spare space for future use. Attach generated UFS image using mdconfig to get /dev/md0 and add bootstrap code to the image: gpart bootcode -b /boot/boot /dev/md0 Finally, wrap generated image into your container of choice (qcow2 or MBR or GPT partitioning etc.) Maybe you'll need to add primary bootstrap code depending on container type. That would be "gpart bootcode -b /boot/mbr ..." in face of disk image with MBR partitioning that also would need extra "gpart set -a active -i 1" call to mark partition bootable. That's all.