From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hartmut Goebel Subject: Do we really need our own installer? Date: Tue, 19 Sep 2017 18:05:37 +0200 Message-ID: <9a7b0563-806c-fb95-f110-16ab42e2bff7@crazy-compilers.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------0385F656CA0AACA1D79689E2" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:41568) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1duL1u-0002Ay-Gu for guix-devel@gnu.org; Tue, 19 Sep 2017 12:05:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1duL1p-0000Yt-Oi for guix-devel@gnu.org; Tue, 19 Sep 2017 12:05:46 -0400 Received: from mail-out.m-online.net ([212.18.0.9]:54515) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1duL1p-0000Xv-By for guix-devel@gnu.org; Tue, 19 Sep 2017 12:05:41 -0400 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 3xxSQW4wbCz1rLPx for ; Tue, 19 Sep 2017 18:05:39 +0200 (CEST) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 3xxSQW3PFKz1r0wZ for ; Tue, 19 Sep 2017 18:05:39 +0200 (CEST) Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id OS7CRHnqRDp6 for ; Tue, 19 Sep 2017 18:05:38 +0200 (CEST) Received: from hermia.goebel-consult.de (ppp-93-104-72-123.dynamic.mnet-online.de [93.104.72.123]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPS for ; Tue, 19 Sep 2017 18:05:38 +0200 (CEST) Received: from [192.168.110.2] (lenashee.goebel-consult.de [192.168.110.2]) by hermia.goebel-consult.de (Postfix) with ESMTP id B106860582 for ; Tue, 19 Sep 2017 18:05:37 +0200 (CEST) Content-Language: en-US List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel This is a multi-part message in MIME format. --------------0385F656CA0AACA1D79689E2 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello, I would like to bring this topic to discussion: Do we really need our own installer? No offense meant, I strongly appreciate John's and Danny's work on the installer. I just have some doubts if this is the way to follow further. Foreword: One of the really cool things about guix is that everything is at hand: Building packages, VM, disk-images, even the iso-images for installation. Where for other distributions you need additional tooling, for guix you need just to type a command. That's really great. But do we really need our own installer? Why can't we "just" adopt an existing one to our needs? Does the installer need to be part of the "guix system" command? As you may have read the last days, I tried installing GuixSd from the installation medium the first time =E2=80=93 and had quite some trouble l= et alone the partitioning. Because of this I demanded the graphical installe= r. Today I tried the graphical installer and got a bit shocked. Not about the installer being in a quite early stage (that's what I'd expected), but about the enormous pile of stuff still need to be implemented: LVM, encrypted disks, a partitioning-tool friendly to beginners, filtering unusual keyboards, pre-setting the keyboard based on language selection, setting up the graphic display, and so on. And after this is done, we still have a old-fashioned ncurses installer, not a GUI. This is not attracting people. A possible solution would be to adopt an existing installer to our needs. This *may* not allow to fully leverage the features of guix within the installer (but IFAIR guile can be accesses from C), but my assumption is we only need parts of it. On the pro-side we may get a much more capable installer much quicker. On the down-side, we can no longer integrate the installer into "guix system". Which brings me to the next question: Should there be something like "guix system installer"? IMHO there should not be something like "guix system installer" for these reasons: - To complete the installer (to be par with other tools), a lot of code needs to be added. But this stuff is only used for installing a system, which means a very short time in the life-time of a system. It is not used for disk-images, virtual machines and containers. - It adds ncurses to the requirements and thus increases the minimal system footprint of guix. - If we (later) want to implement a X11-based installer, we can not include this into "guix system installer", so we need to implement something different =E2=80=93 which will either lead inconsistency and tr= ouble. What do you think? FYI: I *briefly* looked at Anaconda [1] (used by RH/Fedora, implemented in Python3, C, and GTK+, which also as a text-based interface, and Clamares [2] ("a distribution-independent system installer", implemented in C++, Python and Qt). There also are * Ubiquity [3] (used by Ubuntu, written in Python and GTK+) and the Debian installer [4] (written in C and *may* still have a ncurses interface). Calamares seems to be most actively developed, supports branding and seems to have a nice design, splitting between "Vies" and "Jobs". Anaconda as a text-ui, which is a good thing, but documentation is terse. From the Debian installer I would retire since C IMHO is too low level =E2=80=93 and I mind to remember Debian is lagging a lot. [1]https://en.wikipedia.org/wiki/Anaconda_installer [2] https://calamares.io/ [3] https://en.wikipedia.org/wiki/Ubiquity_(software) [4] https://en.wikipedia.org/wiki/Debian-Installer --=20 Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | --------------0385F656CA0AACA1D79689E2 Content-Type: application/pgp-keys; name="0xBF773B65.asc" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0xBF773B65.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- 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 MKO95dDUGyQf00JGQUCZ =7jty -----END PGP PUBLIC KEY BLOCK----- --------------0385F656CA0AACA1D79689E2--