unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Looking to contribute
@ 2017-06-27 22:16 cinder88
  2017-06-28 13:49 ` Danny Milosavljevic
                   ` (2 more replies)
  0 siblings, 3 replies; 28+ messages in thread
From: cinder88 @ 2017-06-27 22:16 UTC (permalink / raw)
  To: guix-devel

Hello. I recently learned about GuixSD, and it seems like a distro
I would actually _enjoy_ using. Essentially, my questions are:

What is the current state of GuixSD? Is it currently too buggy or
feature-deficient to use as a day-to-day os?

How can I best contribute?

-Andrew

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-27 22:16 Looking to contribute cinder88
@ 2017-06-28 13:49 ` Danny Milosavljevic
  2017-06-28 15:01   ` Leo Famulari
                     ` (2 more replies)
  2017-06-28 13:56 ` Looking to contribute Alex Vong
  2017-06-28 17:41 ` James Richardson
  2 siblings, 3 replies; 28+ messages in thread
From: Danny Milosavljevic @ 2017-06-28 13:49 UTC (permalink / raw)
  To: cinder88; +Cc: guix-devel

Hi and welcome,

On Tue, 27 Jun 2017 18:16:08 -0400
cinder88@hushmail.com wrote:

> What is the current state of GuixSD? Is it currently too buggy or
> feature-deficient to use as a day-to-day os?

I'm using it every day, also for professional programming.

It's quite okay to use.  There are occassional problems - which can be mitigated by the feature below:

If there are bugs on system update, you can roll back by selecting another entry in the bootloader menu (a new one is created everytime you reconfigure the system).  This includes all the installed packages (!!!!).  So it's pretty much indestructible - I think that this is the killer feature of GuixSD.

Check the package list https://www.gnu.org/software/guix/packages/ for information on which packages are available.

Note that a normal GuixSD system takes at least 80 GB of disk space (it will suck), better 160 GB (that will work very nicely).  That mostly because of the rollback feature.

> How can I best contribute?

If you want to install GuixSD there's a "wip-installer" (WIP means "work in progress") branch on git <https://git.savannah.gnu.org/git/guix.git>.  If you just want to test the finished installer please download http://web.fdn.fr/~lcourtes/software/guix/guixsd-graphical-installer-x86-64-linux.lz and unpack it by invoking "lzip -d guixsd*.lz".  This results in a disk image that you can flash onto a USB flash drive (don't copy it as a file unto the filesystem on the flash USB drive - rather replace the entire drive by it).

It has quite a few rough edges so don't expect Ubuntu-style usability (yet).

If you do try the installer, it would be good if you noted which areas suck :)

I think you should contribute in an area that you care about.  There's plenty to do.  For example:

Installer:
- Currently, the installer invokes the parted executable for partitioning which is quite jarring (it looks very different).  It would be nice if it just used the parted library.  But there's no good guile-parted yet.  I've started hacking on one and it's starting to look OK but it's not done.  If you are interested in that I can upload it somewhere (github, gitlab etc).
- No mouse support yet.
- We have ISO9660 CD support code so it would be quite easy to make it so that the image file for the graphical installer (see link above) also worked if you burned it to a CD.  See threads mentioning "grub-mkrescue" on the mainling list.

Bootloader:
- The bootloader support code doesn't support booting Windows systems etcetc.
- There's no u-boot installer yet.  (There's support for using existing u-boot but it doesn't install the u-boot bootloader itself yet.  That's because doing that safely is very difficult)

Packages:
- Texlive for a long time was a 2 GB download which was done every time one of the dependencies changed.  It's better now but there are still situations where it does that.  It should be more modular so the downloads aren't that large (and not done as often).
- Rust is not the newest version because they changed the build system they use (sigh...) and I didn't get it to work yet.
- Our packaging is such that each package goes into its own directory /gnu/store/3523523643262hashvaluehere WHICH IS READ-ONLY, you can't possibly write there.  But dub, the D package manager, sometimes tries to do that and fails.  This is a design limitation in the D package manager (it has so-called "configurations" and if you switch configurations it will try to switch symlinks) but it means you can't run many of the D tests.  Fixing that in dub would be great.
- The GUI hooks for desktop files and mime types suck.  Usually, the desktop file database is updated much too late (mostly by accident).  I've looked into fixing it but it would entail rebuilding almost all the graphical packages we have - and I think KDE would still not do it correctly.

Some of the areas I work in are mostly bootloader, filesystem and partitioning stuff - which happen to be the areas where I have to be quite careful about not breaking the killer feature.  If you like that anyway, please help us with it :)

What are your interests?

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-27 22:16 Looking to contribute cinder88
  2017-06-28 13:49 ` Danny Milosavljevic
@ 2017-06-28 13:56 ` Alex Vong
  2017-06-28 17:41 ` James Richardson
  2 siblings, 0 replies; 28+ messages in thread
From: Alex Vong @ 2017-06-28 13:56 UTC (permalink / raw)
  To: cinder88; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 455 bytes --]

Hi Cinder,

Welcome to Guix!

cinder88@hushmail.com writes:

> Hello. I recently learned about GuixSD, and it seems like a distro
> I would actually _enjoy_ using. Essentially, my questions are:
>
> What is the current state of GuixSD? Is it currently too buggy or
> feature-deficient to use as a day-to-day os?
>
> How can I best contribute?
>
This webpage contains a lot of useful information:
<https://www.gnu.org/software/guix/contribute/>

> -Andrew

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-28 13:49 ` Danny Milosavljevic
@ 2017-06-28 15:01   ` Leo Famulari
  2017-06-29 15:49     ` Danny Milosavljevic
  2017-06-29 13:22   ` Looking to contribute cinder88
  2017-07-05 13:20   ` Looking to contribute Danny Milosavljevic
  2 siblings, 1 reply; 28+ messages in thread
From: Leo Famulari @ 2017-06-28 15:01 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: cinder88, guix-devel

[-- Attachment #1: Type: text/plain, Size: 476 bytes --]

On Wed, Jun 28, 2017 at 03:49:43PM +0200, Danny Milosavljevic wrote:
> Note that a normal GuixSD system takes at least 80 GB of disk space
> (it will suck), better 160 GB (that will work very nicely).  That
> mostly because of the rollback feature.

This seems very high to me. I had >100 system generations over 6 months
with less than 100 GB, although that was not a graphical system. So, it
depends on how "big" you make each generation, and how many generations
you keep.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-27 22:16 Looking to contribute cinder88
  2017-06-28 13:49 ` Danny Milosavljevic
  2017-06-28 13:56 ` Looking to contribute Alex Vong
@ 2017-06-28 17:41 ` James Richardson
  2 siblings, 0 replies; 28+ messages in thread
From: James Richardson @ 2017-06-28 17:41 UTC (permalink / raw)
  To: cinder88; +Cc: guix-devel


cinder88@hushmail.com writes:

> Hello. I recently learned about GuixSD, and it seems like a distro
> I would actually _enjoy_ using. Essentially, my questions are:
>
> What is the current state of GuixSD? Is it currently too buggy or
> feature-deficient to use as a day-to-day os?
>
I use it on my laptop and my wife's laptop. feature-deficient is a
rather subjective term. I have xfce on my wife's laptop. Occasionally
she'll complain about lack of flash or that a website doesn't like
icecat. I have a few boxen that I haven't converted (from Debian) yes as
I rely heavily on lvm and don't want to sort out how to do without
lvm. On those boxen I use guix as a foreign package manager which
actually works out quite well.


> How can I best contribute?
>
I've found the people on the #guix channel and on this list to be very
helpful. The website has a section on how to contribute. I've started by
just packaging programs that I use that were net yet in Guix. Knowing
guile is not (IHMO) a prerequisite, although willingness to learn
probably is ;).

HTH, James.
-- 
I prefer encrypted email.
GPG Fingerprint = 8FD2 7619 C19A 2201 CB1D  E131 EA1C F14B D846 7AFB
https://jamestechnotes.com/gpgkey
https://jamestechnotes.com

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-28 13:49 ` Danny Milosavljevic
  2017-06-28 15:01   ` Leo Famulari
@ 2017-06-29 13:22   ` cinder88
  2017-06-29 13:46     ` Katherine Cox-Buday
                       ` (3 more replies)
  2017-07-05 13:20   ` Looking to contribute Danny Milosavljevic
  2 siblings, 4 replies; 28+ messages in thread
From: cinder88 @ 2017-06-29 13:22 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel



On 6/28/2017 at 9:49 AM, "Danny Milosavljevic" <dannym@scratchpost.org> wrote:
>
>Hi and welcome,

Thanks for for the excellent post. It looks like there's a good community here.

>If there are bugs on system update, you can roll back by selecting 
>another entry in the bootloader menu (a new one is created 
>everytime you reconfigure the system).  This includes all the 
>installed packages (!!!!).  So it's pretty much indestructible - I 
>think that this is the killer feature of GuixSD.

Exactly. Currently I run Gentoo with systemd. To manage packages
and configuration, I wrote a script which tracks config files throughout
the system. Then a system-wide recompile with Gentoo updates any
reconfigured software to meet the new config specifications. Effectively
what I'm doing is specifying the state of the system with the config, and
telling Portage (the package manager) to meet the specs. Then I
remembered using NixOS a while back, which had exactly solved that
problem! And when I heard of a Nix-based, libre system using Scheme,
I knew I was home.

>> How can I best contribute?
>
>If you want to install GuixSD there's a "wip-installer" (WIP means 
>"work in progress") branch on git 
><https://git.savannah.gnu.org/git/guix.git>.  If you just want to 
>test the finished installer please download 
>http://web.fdn.fr/~lcourtes/software/guix/guixsd-graphical-
>installer-x86-64-linux.lz and unpack it by invoking "lzip -d 
>guixsd*.lz".  This results in a disk image that you can flash onto 
>a USB flash drive (don't copy it as a file unto the filesystem on 
>the flash USB drive - rather replace the entire drive by it).
>
>It has quite a few rough edges so don't expect Ubuntu-style 
>usability (yet).
>
>If you do try the installer, it would be good if you noted which 
>areas suck :)

Alright, I will try that and let you all know how it goes.

>I think you should contribute in an area that you care about.  
>There's plenty to do.  For example:
>
>Installer:
>- Currently, the installer invokes the parted executable for 
>partitioning which is quite jarring (it looks very different).  It 
>would be nice if it just used the parted library.  But there's no 
>good guile-parted yet.  I've started hacking on one and it's 
>starting to look OK but it's not done.  If you are interested in 
>that I can upload it somewhere (github, gitlab etc).

I would be happy to work on this.

>Packages:
>- Texlive for a long time was a 2 GB download which was done every 
>time one of the dependencies changed.  It's better now but there 
>are still situations where it does that.  It should be more 
>modular so the downloads aren't that large (and not done as often).

I'd be happy to work on this as well, as I use TeX extensively.

>Some of the areas I work in are mostly bootloader, filesystem and 
>partitioning stuff - which happen to be the areas where I have to 
>be quite careful about not breaking the killer feature.  If you 
>like that anyway, please help us with it :)
>

> What are your interests?

Professionally I do higher-level software design and implementation.
I'm not too used to lower level system details, but by using Gentoo
I've learned a decent amount about how GNU/Linux operates.

I'm a mathematician, which means I'm lazy and want to do things the
right way once so I don't have to do them again. The way that modern
operating systems work, with their one huge environment and no
tracking of state, is insane and unsustainable. (How many times have
I wasted a Saturday morning trying to get audio work on a new Gentoo
install?) Stateless, declarative systems seem to be the obvious way forward.

I'm a big fan of Alan Kay, and one thing he always made clear is that
there should be no separation between the language and the operating
system. I've found that many of the problems which plague modern OSes
are the same which plague C. Which is why a system which sits on top
of Scheme, one of the most powerful programming paradigms we have,
is so appealing.

More concretely, I can be of the most help with:
- Texlive and dealing with pdf stuff (cairo, etc)
- Emacs
- Networking
But realy I'll try to help wherever it's needed, because this project
should be a reality.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-29 13:22   ` Looking to contribute cinder88
@ 2017-06-29 13:46     ` Katherine Cox-Buday
  2017-06-29 15:25     ` Alex Vong
                       ` (2 subsequent siblings)
  3 siblings, 0 replies; 28+ messages in thread
From: Katherine Cox-Buday @ 2017-06-29 13:46 UTC (permalink / raw)
  To: cinder88; +Cc: guix-devel

cinder88@hushmail.com writes:

> I'm a mathematician, which means I'm lazy and want to do things the
> right way once so I don't have to do them again. The way that modern
> operating systems work, with their one huge environment and no
> tracking of state, is insane and unsustainable. (How many times have
> I wasted a Saturday morning trying to get audio work on a new Gentoo
> install?) Stateless, declarative systems seem to be the obvious way
> forward.
>
> I'm a big fan of Alan Kay, and one thing he always made clear is that
> there should be no separation between the language and the operating
> system. I've found that many of the problems which plague modern OSes
> are the same which plague C. Which is why a system which sits on top
> of Scheme, one of the most powerful programming paradigms we have,
> is so appealing.
>
> More concretely, I can be of the most help with:
> - Texlive and dealing with pdf stuff (cairo, etc)
> - Emacs
> - Networking
> But realy I'll try to help wherever it's needed, because this project
> should be a reality.

I have nothing meaningful to contribute except to say that I appreciate
and agree with this line of thinking.

I have also found this to be a wonderful, warm, and welcoming community
doing great work. The only thing I don't like is that I haven't been
able to find time to contribute :)

Welcome!

-- 
Katherine

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-29 13:22   ` Looking to contribute cinder88
  2017-06-29 13:46     ` Katherine Cox-Buday
@ 2017-06-29 15:25     ` Alex Vong
  2017-06-29 16:42     ` Pjotr Prins
  2017-07-02 23:30     ` Binding generator, for Guile, to C libraries Danny Milosavljevic
  3 siblings, 0 replies; 28+ messages in thread
From: Alex Vong @ 2017-06-29 15:25 UTC (permalink / raw)
  To: cinder88; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 991 bytes --]

cinder88@hushmail.com writes:
[...]
> I'm a big fan of Alan Kay, and one thing he always made clear is that
> there should be no separation between the language and the operating
> system. I've found that many of the problems which plague modern OSes
> are the same which plague C. Which is why a system which sits on top
> of Scheme, one of the most powerful programming paradigms we have,
> is so appealing.
>
Since you mentioned you see analogy between language and OS (they face
similar problems), I think you will find this[0] interesting. It
discusses how delimted continuations are often used in OS without
explicit mentioning it.

Also, this reminds me of the joke: Emacs is an operating system

> More concretely, I can be of the most help with:
> - Texlive and dealing with pdf stuff (cairo, etc)
> - Emacs
> - Networking
> But realy I'll try to help wherever it's needed, because this project
> should be a reality.

[0]: http://okmij.org/ftp/continuations/zipper.html#context-OS

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-28 15:01   ` Leo Famulari
@ 2017-06-29 15:49     ` Danny Milosavljevic
  2017-06-29 17:02       ` Mekeor Melire
  0 siblings, 1 reply; 28+ messages in thread
From: Danny Milosavljevic @ 2017-06-29 15:49 UTC (permalink / raw)
  To: Leo Famulari; +Cc: cinder88, guix-devel

Hi Leo,

On Wed, 28 Jun 2017 11:01:45 -0400
Leo Famulari <leo@famulari.name> wrote:

> This seems very high to me. I had >100 system generations over 6 months
> with less than 100 GB, although that was not a graphical system. 

I have a graphical system with fluxbox, some electrical engineering & FPGA programs, D, Rust, Haskell, gimp, a (Guix) cross compilation environment for armhf - and a lot of Python packages.  It's basically what I need for work and some play.  That's reeeeally annoying to use with 80 GB (I should know, my old system partition has that...).

I have 568 system generations, I win ;-)  But it's mostly because of excessive bootloader testing - no normal person should have that many system generations... so I guess it's an overestimate.

>So, it depends on how "big" you make each generation, and how many generations you keep.

Wait.  AFAIK one cannot delete system generations [yet].  Has that changed?

But deleting user [package] generations works, yes.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-29 13:22   ` Looking to contribute cinder88
  2017-06-29 13:46     ` Katherine Cox-Buday
  2017-06-29 15:25     ` Alex Vong
@ 2017-06-29 16:42     ` Pjotr Prins
  2017-07-02 23:30     ` Binding generator, for Guile, to C libraries Danny Milosavljevic
  3 siblings, 0 replies; 28+ messages in thread
From: Pjotr Prins @ 2017-06-29 16:42 UTC (permalink / raw)
  To: cinder88; +Cc: guix-devel

On Thu, Jun 29, 2017 at 09:22:46AM -0400, cinder88@hushmail.com wrote:
> telling Portage (the package manager) to meet the specs. Then I
> remembered using NixOS a while back, which had exactly solved that
> problem! And when I heard of a Nix-based, libre system using Scheme,
> I knew I was home.

Yep, that is me too. Nix is great; Guix is even better.

Pj.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-29 15:49     ` Danny Milosavljevic
@ 2017-06-29 17:02       ` Mekeor Melire
  2017-07-01 13:15         ` Deleting system generations Ludovic Courtès
  0 siblings, 1 reply; 28+ messages in thread
From: Mekeor Melire @ 2017-06-29 17:02 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel


Danny Milosavljevic <dannym@scratchpost.org> writes:

> Wait.  AFAIK one cannot delete system generations [yet].  Has that changed?
>
> But deleting user [package] generations works, yes.

Somewhere on the mailing-list I found out that you can delete a system
generation like this:

    $ rm /var/guix/profiles/system-N-link
    $ guix gc

(as root?)

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Deleting system generations
  2017-06-29 17:02       ` Mekeor Melire
@ 2017-07-01 13:15         ` Ludovic Courtès
  2017-07-01 15:32           ` Thomas Danckaert
  0 siblings, 1 reply; 28+ messages in thread
From: Ludovic Courtès @ 2017-07-01 13:15 UTC (permalink / raw)
  To: Mekeor Melire, Thomas Danckaert; +Cc: guix-devel

Mekeor Melire <mekeor.melire@gmail.com> skribis:

> Danny Milosavljevic <dannym@scratchpost.org> writes:
>
>> Wait.  AFAIK one cannot delete system generations [yet].  Has that changed?
>>
>> But deleting user [package] generations works, yes.
>
> Somewhere on the mailing-list I found out that you can delete a system
> generation like this:
>
>     $ rm /var/guix/profiles/system-N-link
>     $ guix gc
>
> (as root?)

Yes, that’s all it takes.

Thomas: I think you (was it you?) started working on a ‘guix system
delete-generations’ sub-command so make it more accessible.  Any update?
:-)

We should definitely add that command.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Deleting system generations
  2017-07-01 13:15         ` Deleting system generations Ludovic Courtès
@ 2017-07-01 15:32           ` Thomas Danckaert
  2017-07-02 20:22             ` Ludovic Courtès
  0 siblings, 1 reply; 28+ messages in thread
From: Thomas Danckaert @ 2017-07-01 15:32 UTC (permalink / raw)
  To: ludo; +Cc: guix-devel

From: ludo@gnu.org (Ludovic Courtès)
Subject: Deleting system generations
Date: Sat, 01 Jul 2017 15:15:23 +0200

> Thomas: I think you (was it you?) started working on a ‘guix system
> delete-generations’ sub-command so make it more accessible.  Any 
> update?
> :-)

Yes, that's correct :-)  No update, unfortunately, though it's still 
on my todo-list ...  If anyone wants to take over, here's the last 
message about it:

https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00194.html

(the point is to add extra boot configurations to <boot-parameters> 
so we can handle them properly in guix system switch-generation or 
delete-generations)

Thomas

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Deleting system generations
  2017-07-01 15:32           ` Thomas Danckaert
@ 2017-07-02 20:22             ` Ludovic Courtès
  0 siblings, 0 replies; 28+ messages in thread
From: Ludovic Courtès @ 2017-07-02 20:22 UTC (permalink / raw)
  To: Thomas Danckaert; +Cc: guix-devel

Thomas Danckaert <post@thomasdanckaert.be> skribis:

> From: ludo@gnu.org (Ludovic Courtès)
> Subject: Deleting system generations
> Date: Sat, 01 Jul 2017 15:15:23 +0200
>
>> Thomas: I think you (was it you?) started working on a ‘guix system
>> delete-generations’ sub-command so make it more accessible.  Any
>> update?
>> :-)
>
> Yes, that's correct :-)  No update, unfortunately, though it's still
> on my todo-list ...  If anyone wants to take over, here's the last
> message about it:
>
> https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00194.html
>
> (the point is to add extra boot configurations to <boot-parameters> so
> we can handle them properly in guix system switch-generation or
> delete-generations)

Oh right, thanks for the link!

Ludo’.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Binding generator, for Guile, to C libraries
  2017-06-29 13:22   ` Looking to contribute cinder88
                       ` (2 preceding siblings ...)
  2017-06-29 16:42     ` Pjotr Prins
@ 2017-07-02 23:30     ` Danny Milosavljevic
  2017-07-04  0:41       ` Installer development Danny Milosavljevic
  2017-07-05 21:53       ` Binding generator, for Guile, to C libraries Ludovic Courtès
  3 siblings, 2 replies; 28+ messages in thread
From: Danny Milosavljevic @ 2017-07-02 23:30 UTC (permalink / raw)
  To: cinder88; +Cc: guix-devel

Hi,

> >- Currently, the installer invokes the parted executable for 
> >partitioning which is quite jarring (it looks very different).  It 
> >would be nice if it just used the parted library.  But there's no 
> >good guile-parted yet.  I've started hacking on one and it's 
> >starting to look OK but it's not done.  If you are interested in 
> >that I can upload it somewhere (github, gitlab etc).  

> I would be happy to work on this.

Okay, I've cleaned up what I have and put it on github, under:

https://github.com/daym/guile-gcc-unit

What this does is it allows you to read gcc output files which specify all the prototypes - in our case in order to extract the prototypes and generate Guile bindings (of parted, or whatever).

The next steps:
- Provide the actual binding generator (I started a version of it - I'll commit a cleaned-up version in a few days I guess).
- Get it to work with non-toy examples (see file "tests/huge/input" for the parted non-toy example - the goal is to read this file, find all the record decls and all the function decls in it and generate the Guile pendants of them).  If you happen to know LALR parsing theory, I have a question :)
- Find out whether that can be integrated as a Guile "language".  Just being able to do something like ',load "foo.h"' and have it register all the functions from it would be way cool.  On the other hand, on non-Guix systems the header files aren't usually installed when the library is installed.  So maybe an offline version would be good as well.

Example Makefile:

---------------------------------------------------
.PHONY: clean all distclean

CC = gcc

all: parted.lu
	guile -L . main.scm $^

a.c:
	echo "#include <parted/parted.h>" > a.c.new && mv a.c.new a.c

parted.lu: a.c
	$(CC) -fsyntax-only -fdump-tree-all-graph=$@ $^

clean:
	rm -f a.c

distclean: clean
	rm -f parted.lu
--------------------------------------------------

To test it, put this file into guile-gcc-unit (as "Makefile") and then invoke "guix package -i parted" and then invoke "make".

(I didn't commit it to the repo yet because maybe we can put guile-parted into an extra repo?  Or even just have a helper script that does it all without any extra repo?)

For the bindings generator, if you want to play with it, what I already can share is:

(use-modules (system foreign))

(define-public %parted-library (dynamic-link "/gnu/store/ddpg6rlr5f3xv8fjh8812ll9g584x51z-parted-3.2/lib/libparted"))

(define-public enum-_PedPartitionType
  (make-enumeration '(
    PED_PARTITION_NORMAL ; 0
    PED_PARTITION_LOGICAL ; 1
    PED_PARTITION_EXTENDED ; 2
    reserved3 ; 3
    PED_PARTITION_FREESPACE ; 4
    reserved5 ; 5
    reserved6 ; 6
    reserved7 ; 7
    PED_PARTITION_METADATA ; 8
    reserved9
    reserved10 ; 10
    reserved11 ; 11
    reserved12 ; 12
    reserved13 ; 13
    reserved14 ; 14
    reserved15 ; 15
    PED_PARTITION_PROTECTED ; 16
)))

(define-public long-long uint64)
(define-public PedSector long-long)

(define ped_disk_set_partition_geom (pointer->procedure int (dynamic-func "ped_disk_set_partition_geom" %parted-library) '* '* '* PedSector PedSector))

So that's the kind of code that should be generated in the end (not sure whether in Tree-IL or whether to go via the Scheme intermediary).

For the binding generator, I'm thinking of having a global hashtable containing what symbols are known from C header files - and what is known about them.

So (hypothetical) usage would be like:

; Magically registers all the external function declarations in some global hashtable (only the declarations, no shared object)
,load "parted/parted.h"

(define-public %parted-library (dynamic-link "/gnu/store/ddpg6rlr5f3xv8fjh8812ll9g584x51z-parted-3.2/lib/libparted"))
(define ped_disk_set_partition_geom (dynamic-callable-func "ped_disk_set_partition_geom" %parted-library))
(ped_disk_set_partition_geom ...)

Wouldn't that be cool?

If that's too lowlevel, check out guix wip-installer and try using gurses, John's ncurses frontend.  The installer is under "gnu/system/installer/"  :)

We eventually would like to have a nice partitioning interface in the installer.  So if you'd like to you can also add some pages there.

In order to do that, see gnu/system/installer/guixsd-installer.scm . It contains the list of pages that are used in the installer.  You can add your own pages there.

See gnu/system/installer/mount-point.scm for a simple page.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Installer development
  2017-07-02 23:30     ` Binding generator, for Guile, to C libraries Danny Milosavljevic
@ 2017-07-04  0:41       ` Danny Milosavljevic
  2017-07-05 21:53       ` Binding generator, for Guile, to C libraries Ludovic Courtès
  1 sibling, 0 replies; 28+ messages in thread
From: Danny Milosavljevic @ 2017-07-04  0:41 UTC (permalink / raw)
  To: cinder88; +Cc: guix-devel

Hi,

if you want, in order to start developing the installer, the easiest way is to run as NORMAL USER (not root):

$ mkdir guix-installer
$ cd guix-installer
$ git clone -b wip-installer-2 https://git.savannah.gnu.org/git/guix.git
$ cd guix
$ ./pre-inst-env guix environment guix --fallback --pure --ad-hoc guile-ncurses
[env] $ ./pre-inst-env guix system installer

The "environment --pure" makes sure that parted, mkfs etc is not available and you don't kill your existing system by accident.

In order to cancel the installer, press Ctrl-z and then invoke:

guix [env] $ kill -9 %1

I pushed a wip-installer-2 branch, starting from master.  Into the former I cherry-picked all the wip-installer-only commits and massaged them until the installer worked.  I hope that's OK with everyone.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Looking to contribute
  2017-06-28 13:49 ` Danny Milosavljevic
  2017-06-28 15:01   ` Leo Famulari
  2017-06-29 13:22   ` Looking to contribute cinder88
@ 2017-07-05 13:20   ` Danny Milosavljevic
  2017-07-07 11:34     ` Installer, ISO9660, etc Ludovic Courtès
  2 siblings, 1 reply; 28+ messages in thread
From: Danny Milosavljevic @ 2017-07-05 13:20 UTC (permalink / raw)
  To: guix-devel

Here's an update :)

>> Installer:
>> - Currently, the installer invokes the parted executable for partitioning which is quite jarring (it looks very different).  It would be nice if it just used the parted library.

>>But there's no good guile-parted yet.  I've started hacking on one and it's starting to look OK but it's not done.  If you are interested in that I can upload it somewhere (github, gitlab etc).

>I would be happy to work on this.

guile-gcc-unit is 80% done now (it also works on the real parted headers by now).  See <https://github.com/daym/guile-gcc-unit>.  (I think I'll not use records after all and just keep the result as huge trees that you can (ice-9 match) on).

What it allows you is to:
- invoke gcc (with a special option) on a tiny source file which only "#include"s stuff and then
- feed the output to guile-gcc-unit and then
- get out a Scheme list of all the C prototypes, records, enums etc that are available.

The next step would be to map the generated declaration tree (output of main.scm) to the wrapper forms I posted - to have actual callable parted procedures.

> - No mouse support yet.

Now the installer does have mouse support :)

Updated installer dev usage (branch "wip-installer-2" on <https://git.savannah.gnu.org/git/guix.git>):

$ ./pre-inst-env guix environment guix --fallback --pure --ad-hoc guile-ncurses kbd pciutils util-linux wireless-tools
[env]$ ./pre-inst-env guix system installer
... press Ctrl-z when you are fed up with it :)

Be careful that it doesn't nuke your system (it does ask before formatting or installing anything - so it's not that bad).

Also, don't run it as root...

> - We have ISO9660 CD support code so it would be quite easy to make it so that the image file for the graphical installer (see link above) also worked if you burned it to a CD.  See threads mentioning "grub-mkrescue" on the mainling list.

95% done.  If would actually work if we came to a consensus about the volume label (it must be uppercase; see bug# 27520 in guix-patches).  Also, UUID boot support is still mostly missing - same as in the non-iso9660 case.

> Bootloader:
> - The bootloader support code doesn't support booting Windows systems etcetc.

Started to provide scaffolding on this - let's see what we decide about using <menu-entry> (see bug# 27529 in guix-patches).  I don't really have a use for it so I won't go much further than providing the scaffolding.

> - There's no u-boot installer yet.  (There's support for using existing u-boot but it doesn't install the u-boot bootloader itself yet.  That's because doing that safely is very difficult)

Depends on the parted bindings.

> Packages:
> - The GUI hooks for desktop files and mime types suck.  Usually, the desktop file database is updated much too late (mostly by accident).  I've looked into fixing it but it would entail rebuilding almost all the graphical packages we have - and I think KDE would still not do it correctly.

宋文武 fixed it :)

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Binding generator, for Guile, to C libraries
  2017-07-02 23:30     ` Binding generator, for Guile, to C libraries Danny Milosavljevic
  2017-07-04  0:41       ` Installer development Danny Milosavljevic
@ 2017-07-05 21:53       ` Ludovic Courtès
  2017-07-06 19:57         ` Danny Milosavljevic
  1 sibling, 1 reply; 28+ messages in thread
From: Ludovic Courtès @ 2017-07-05 21:53 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Hello,

Danny Milosavljevic <dannym@scratchpost.org> skribis:

> Okay, I've cleaned up what I have and put it on github, under:
>
> https://github.com/daym/guile-gcc-unit
>
> What this does is it allows you to read gcc output files which specify all the prototypes - in our case in order to extract the prototypes and generate Guile bindings (of parted, or whatever).
>
> The next steps:
> - Provide the actual binding generator (I started a version of it - I'll commit a cleaned-up version in a few days I guess).
> - Get it to work with non-toy examples (see file "tests/huge/input" for the parted non-toy example - the goal is to read this file, find all the record decls and all the function decls in it and generate the Guile pendants of them).  If you happen to know LALR parsing theory, I have a question :)
> - Find out whether that can be integrated as a Guile "language".  Just being able to do something like ',load "foo.h"' and have it register all the functions from it would be way cool.  On the other hand, on non-Guix systems the header files aren't usually installed when the library is installed.  So maybe an offline version would be good as well.

Matt Wette, the author of nyacc, was apparently in the process of
writing a similar tool using nyacc’s C99 parser.  Might be worth looking
at.

Besides and FWIW, I’m skeptical of binding generators.  Things like
SWIG, for instance, generate interfaces that are often not quite what
you’d like, so you end up writing a layer on top of the generated glue
anyway, not to mention annotation in headers.  (Bindings generated from
high-level descriptions like GIR and XCB are a different story; those
seem to work quite well.)

That said, you might want to share on guile-user@gnu.org to get feedback!

Ludo’.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Binding generator, for Guile, to C libraries
  2017-07-05 21:53       ` Binding generator, for Guile, to C libraries Ludovic Courtès
@ 2017-07-06 19:57         ` Danny Milosavljevic
  2017-07-07 11:41           ` Ludovic Courtès
  0 siblings, 1 reply; 28+ messages in thread
From: Danny Milosavljevic @ 2017-07-06 19:57 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Hi Ludo,

On Wed, 05 Jul 2017 23:53:36 +0200
ludo@gnu.org (Ludovic Courtès) wrote:

> Danny Milosavljevic <dannym@scratchpost.org> skribis:
> 
> > Okay, I've cleaned up what I have and put it on github, under:
> >
> > https://github.com/daym/guile-gcc-unit
> >
> > What this does is it allows you to read gcc output files which specify all the prototypes - in our case in order to extract the prototypes and generate Guile bindings (of parted, or whatever).
> >
> > The next steps:
> > - Provide the actual binding generator (I started a version of it - I'll commit a cleaned-up version in a few days I guess).

> > - Get it to work with non-toy examples (see file "tests/huge/input" for the parted non-toy example - the goal is to read this file, find all the record decls and all the function decls in it

This part is working now, also for parted.

> and generate the Guile pendants of them).  If you happen to know LALR parsing theory, I have a question :)
> > - Find out whether that can be integrated as a Guile "language".  Just being able to do something like ',load "foo.h"' and have it register all the functions from it would be way cool.  On the other hand, on non-Guix systems the header files aren't usually installed when the library is installed.  So maybe an offline version would be good as well.  
> 
> Matt Wette, the author of nyacc, was apparently in the process of
> writing a similar tool using nyacc’s C99 parser.  Might be worth looking
> at.

Nice!  I've actually thought about using nyacc and mes for that - but since we use gcc to compile everything, we can also use gcc to find out what it compiled - it's more probable that that actually matches up.  What I like is that gcc actually dumps the declarations even when you *don't* call the function.  So you can actually create a mostly-empty source file with #include in it and gcc will give you everything that is in scope.

But it's definitely worth taking a look at Matt Wette's actual Guile dynamic-* generator, maybe that can be shared between the projects.

> Besides and FWIW, I’m skeptical of binding generators.  Things like
> SWIG, for instance, generate interfaces that are often not quite what
> you’d like, so you end up writing a layer on top of the generated glue
> anyway, not to mention annotation in headers. 

Yeah, probably the bindings will suck a bit.  But one can always write a wrapper and not export all the original functions from there.  Rust for example has a "...-sys" convention where the package "foo-sys" contains the easily-generated bindings and the package "foo" contains the actually simple high-level bindings.

What I don't want is to manually maintain all the bindings.  It's a computer, it should automate it :P

Writing "override" declarations (or maybe even just literally overwriting the definition in Scheme) once every few months I'm fine with.  Adapting the bindings every time upstream adds a function?  No.

If I plan to use something like the "...-sys" convention in Guile, can I somehow re-export all the same names as the "-sys" package did, in a non-sys package?

For example:

(define-module (foo-sys)
  #:export (a b c))

...
------
(define-module (foo)
  #:re-export (same-names-as-in foo-sys, but use newer versions from below if applicable))

(define (b ...)
  fix it up)
-----
Hmm, I guess I can use (include-from-path "foo-sys") in the second module before I overwrite anything.

> (Bindings generated from
> high-level descriptions like GIR and XCB are a different story; those
> seem to work quite well.)

Yeah, I like glib's approach with the def files which specify also the object lifetimes etc.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Installer, ISO9660, etc.
  2017-07-05 13:20   ` Looking to contribute Danny Milosavljevic
@ 2017-07-07 11:34     ` Ludovic Courtès
  2017-07-07 16:13       ` Danny Milosavljevic
  0 siblings, 1 reply; 28+ messages in thread
From: Ludovic Courtès @ 2017-07-07 11:34 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Hi!

Danny Milosavljevic <dannym@scratchpost.org> skribis:

> 95% done.  If would actually work if we came to a consensus about the volume label (it must be uppercase; see bug# 27520 in guix-patches).  Also, UUID boot support is still mostly missing - same as in the non-iso9660 case.

Dose the ‘string-upcase’ suggestion work for you?  I thought we had come
up with a solution, I hope I’m not holding anything back in this area!

>> - There's no u-boot installer yet.  (There's support for using existing u-boot but it doesn't install the u-boot bootloader itself yet.  That's because doing that safely is very difficult)
>
> Depends on the parted bindings.

FWIW GNU fdisk has (outdated) Parted bindings in C, not sure if that’s
worth reusing; perhaps we’d be better off rolling our own with the FFI.

Ludo’.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Binding generator, for Guile, to C libraries
  2017-07-06 19:57         ` Danny Milosavljevic
@ 2017-07-07 11:41           ` Ludovic Courtès
  0 siblings, 0 replies; 28+ messages in thread
From: Ludovic Courtès @ 2017-07-07 11:41 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Hi Danny,

Danny Milosavljevic <dannym@scratchpost.org> skribis:

>>  Matt Wette, the author of nyacc, was apparently in the process of
>> writing a similar tool using nyacc’s C99 parser.  Might be worth
>> looking at.
>
> Nice!  I've actually thought about using nyacc and mes for that - but
> since we use gcc to compile everything, we can also use gcc to find
> out what it compiled

Sure; I think Matt’s idea is just to use nyacc’s cpp/C99 parser to
extract function declarations, nothing more.

>> Besides and FWIW, I’m skeptical of binding generators.  Things like
>> SWIG, for instance, generate interfaces that are often not quite
>> what you’d like, so you end up writing a layer on top of the
>> generated glue anyway, not to mention annotation in headers.
>
> Yeah, probably the bindings will suck a bit.  But one can always write
> a wrapper and not export all the original functions from there.  Rust
> for example has a "...-sys" convention where the package "foo-sys"
> contains the easily-generated bindings and the package "foo" contains
> the actually simple high-level bindings.
>
> What I don't want is to manually maintain all the bindings.  It's a
> computer, it should automate it :P
>
> Writing "override" declarations (or maybe even just literally
> overwriting the definition in Scheme) once every few months I'm fine
> with.  Adapting the bindings every time upstream adds a function?  No.
>
> If I plan to use something like the "...-sys" convention in Guile, can
> I somehow re-export all the same names as the "-sys" package did, in a
> non-sys package?
>
> For example:
>
> (define-module (foo-sys) #:export (a b c))

Yes, that’s a workable plan.  I’m unsure this approach saves a lot of
time over “hand-written” FFI bindings (I write “hand-written” with
quotes because usually you’d come up with macros to do the heavy lifting
for the library you’re wrapping), but maybe you’re right!

Ludo’.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Installer, ISO9660, etc.
  2017-07-07 11:34     ` Installer, ISO9660, etc Ludovic Courtès
@ 2017-07-07 16:13       ` Danny Milosavljevic
  2017-07-09 20:08         ` Ludovic Courtès
  0 siblings, 1 reply; 28+ messages in thread
From: Danny Milosavljevic @ 2017-07-07 16:13 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Hi Ludo,

On Fri, 07 Jul 2017 13:34:52 +0200
ludo@gnu.org (Ludovic Courtès) wrote:

> Danny Milosavljevic <dannym@scratchpost.org> skribis:
> 
> > 95% done.  If would actually work if we came to a consensus about the volume label (it must be uppercase; see bug# 27520 in guix-patches).  Also, UUID boot support is still mostly missing - same as in the non-iso9660 case.  

>I hope I’m not holding anything back in this area!

Oh, not at all.  I'm just not clear on which way we chose (if any?).

What was the string-upcase solution?  Even if it's created with (string-upcase "GuixSD") (and it is - if you don't override it) the boot code as it is now will still fail to find the root - because it matches labels case-sensitively.  The string-upcase is buried deep within the image creation procedure.

Or do you mean I should put (string-upcase "GuixSD") in system-disk-image in gnu/system/vm.scm as well ? That would work, I guess... although the finished image (iso9660 or not!) would still have "GUIXSD" then.  I don't see that as a big deal, though :)

There's still the following places:

./gnu/build/vm.scm:                    search --set=root --label gnu-disk-image~@
./gnu/system/install.scm:              (device "gnu-disk-image")
./gnu/system/vm.scm:    "gnu-disk-image")

Or do you mean we should just match case-insensitively in gnu/build/file-systems.scm ?

I.e. use

 (define partition-label-predicate
  (partition-predicate read-partition-label string-ci=?))

That would mean match case-insensitively for both iso9660 and non-iso9660.  I would very much prefer this fix.

Whatever it is, we should just pick a way, any way :)

Now Hydra is building a 1 GB iso9660 image that won't boot.

I've pushed bug# 27521 so "iso9660-image" will now heed the root-label (from system-disk-image) just like the other filesystems do - and then uppercase it.  That finishes the creation part.  Now the booting part... how? :)

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Installer, ISO9660, etc.
  2017-07-07 16:13       ` Danny Milosavljevic
@ 2017-07-09 20:08         ` Ludovic Courtès
  2017-07-10 13:41           ` Danny Milosavljevic
  0 siblings, 1 reply; 28+ messages in thread
From: Ludovic Courtès @ 2017-07-09 20:08 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1760 bytes --]

Danny Milosavljevic <dannym@scratchpost.org> skribis:

> On Fri, 07 Jul 2017 13:34:52 +0200
> ludo@gnu.org (Ludovic Courtès) wrote:
>
>> Danny Milosavljevic <dannym@scratchpost.org> skribis:
>> 
>> > 95% done.  If would actually work if we came to a consensus about the volume label (it must be uppercase; see bug# 27520 in guix-patches).  Also, UUID boot support is still mostly missing - same as in the non-iso9660 case.  
>
>>I hope I’m not holding anything back in this area!
>
> Oh, not at all.  I'm just not clear on which way we chose (if any?).
>
> What was the string-upcase solution?  Even if it's created with (string-upcase "GuixSD") (and it is - if you don't override it) the boot code as it is now will still fail to find the root - because it matches labels case-sensitively.  The string-upcase is buried deep within the image creation procedure.

Right.

> Or do you mean I should put (string-upcase "GuixSD") in system-disk-image in gnu/system/vm.scm as well ? That would work, I guess... although the finished image (iso9660 or not!) would still have "GUIXSD" then.  I don't see that as a big deal, though :)
>
> There's still the following places:
>
> ./gnu/build/vm.scm:                    search --set=root --label gnu-disk-image~@
> ./gnu/system/install.scm:              (device "gnu-disk-image")
> ./gnu/system/vm.scm:    "gnu-disk-image")
>
> Or do you mean we should just match case-insensitively in gnu/build/file-systems.scm ?
>
> I.e. use
>
>  (define partition-label-predicate
>   (partition-predicate read-partition-label string-ci=?))
>
> That would mean match case-insensitively for both iso9660 and non-iso9660.  I would very much prefer this fix.

What about this not-so-bad solution:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 974 bytes --]

diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 3e722d081..662fd0085 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -335,11 +335,18 @@ the image."
 system described by OS.  Said image can be copied on a USB stick as is.  When
 VOLATILE? is true, the root file system is made volatile; this is useful
 to USB sticks meant to be read-only."
+  (define normalize-label
+    ;; ISO labels are all-caps (case-insensitive), but since
+    ;; 'find-partition-by-label' is case-sensitive, make it all-caps here.
+    (if (string=? "iso9660" file-system-type)
+        string-upcase
+        identity))
+
   (define root-label
     ;; Volume name of the root file system.  Since we don't know which device
     ;; will hold it, we use the volume name to find it (using the UUID would
     ;; be even better, but somewhat less convenient.)
-    "gnu-disk-image")
+    (normalize-label "gnu-disk-image"))
 
   (define file-systems-to-keep
     (remove (lambda (fs)

[-- Attachment #3: Type: text/plain, Size: 396 bytes --]


That way we preserve case-sensitivity for the other file systems.

If that’s fine with you, let’s do that!

Longer-term we should probably create <file-system> records for each
file system in (gnu build file-system); this would include, for each
file system, the ‘superblock?’ procedure, the ‘label’ procedure, and,
probably, a ‘label=?’ procedure.

Thanks,
Ludo’.

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: Installer, ISO9660, etc.
  2017-07-09 20:08         ` Ludovic Courtès
@ 2017-07-10 13:41           ` Danny Milosavljevic
  2017-07-10 21:02             ` Ludovic Courtès
  0 siblings, 1 reply; 28+ messages in thread
From: Danny Milosavljevic @ 2017-07-10 13:41 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Aha!

I finally found why I couldn't use the iso9660 image on an usb stick.

Fix:

diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index b6930497d..7f2c5dcb0 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -398,7 +398,7 @@ not valid header was found."
               (match (string-tokenize line)
                 (((= string->number major) (= string->number minor)
                   blocks name)
-                 (if (partition? name major minor)
+                 (if #t ;(partition? name major minor)
                      (loop (cons name parts))
                      (loop parts))))))))))

Then it works fine on CD, on USB stick, whereever.

Is there a reason why (disk-partitions) second-guesses the Linux kernel and filters out some entries from /proc/partitions ?

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: Installer, ISO9660, etc.
  2017-07-10 13:41           ` Danny Milosavljevic
@ 2017-07-10 21:02             ` Ludovic Courtès
  2017-07-10 21:27               ` Danny Milosavljevic
  0 siblings, 1 reply; 28+ messages in thread
From: Ludovic Courtès @ 2017-07-10 21:02 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Danny Milosavljevic <dannym@scratchpost.org> skribis:

> Aha!
>
> I finally found why I couldn't use the iso9660 image on an usb stick.
>
> Fix:
>
> diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
> index b6930497d..7f2c5dcb0 100644
> --- a/gnu/build/file-systems.scm
> +++ b/gnu/build/file-systems.scm
> @@ -398,7 +398,7 @@ not valid header was found."
>                (match (string-tokenize line)
>                  (((= string->number major) (= string->number minor)
>                    blocks name)
> -                 (if (partition? name major minor)
> +                 (if #t ;(partition? name major minor)
>                       (loop (cons name parts))
>                       (loop parts))))))))))
>
> Then it works fine on CD, on USB stick, whereever.
>
> Is there a reason why (disk-partitions) second-guesses the Linux kernel and filters out some entries from /proc/partitions ?

It has this:

  (define (partition? name major minor)
    ;; Select device names that end in a digit, like libblkid's 'probe_all'
    ;; function does.  Checking for "/sys/dev/block/MAJOR:MINOR/partition"
    ;; doesn't work for partitions coming from mapped devices.
    (and (char-set-contains? char-set:digit (last-character name))
         (> major 2)))                      ;ignore RAM disks and floppy disks

What’s the /dev name in your case?

Ludo’.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Installer, ISO9660, etc.
  2017-07-10 21:02             ` Ludovic Courtès
@ 2017-07-10 21:27               ` Danny Milosavljevic
  2017-07-11  9:23                 ` Ludovic Courtès
  0 siblings, 1 reply; 28+ messages in thread
From: Danny Milosavljevic @ 2017-07-10 21:27 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

> What’s the /dev name in your case?

In the working case as a CD, it's /dev/sr0.
In the non-working case on a USB flash drive, it's /dev/sda and /dev/sda1.

There's a dummy partition in the iso image as well, so I'm not sure why /dev/sda1 doesn't work as well... let's see...

When fdisk says that the starting sector is "1", does that mean the first sector (i.e. there's no sector before it) or does that mean the sector after the MBR?

On the guix rescue console, I tried comparing the first few bytes of /dev/sda and /dev/sda1 and it seems they are different.

That would mean that the ISO filesystem support code can't find the primary volume descriptor any more because it's reading it from the wrong position because it reads from the device file "/dev/sda1" and that file shifts it from where it would have been if it read "/dev/sda".

But this "partition?" thing would mean that having a partition table is now mandatory, right?  Is that really supposed to be the case?  The partition table has a magic mark (0x55 0xAA) in order for it *not* to be mandatory (i.e. if you want to use the whole disk without partitioning anything, go right ahead) and I can still remember using (floppy) disks which had no partition table.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Installer, ISO9660, etc.
  2017-07-10 21:27               ` Danny Milosavljevic
@ 2017-07-11  9:23                 ` Ludovic Courtès
  2017-07-11 10:13                   ` Danny Milosavljevic
  0 siblings, 1 reply; 28+ messages in thread
From: Ludovic Courtès @ 2017-07-11  9:23 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Heya,

Danny Milosavljevic <dannym@scratchpost.org> skribis:

> But this "partition?" thing would mean that having a partition table is now mandatory, right?  Is that really supposed to be the case?  The partition table has a magic mark (0x55 0xAA) in order for it *not* to be mandatory (i.e. if you want to use the whole disk without partitioning anything, go right ahead) and I can still remember using (floppy) disks which had no partition table.

‘partition?’ is meant to return true when given a partition, so yes, it
assumes there’s a partition table somewhere.  :-)

In general, I think that’s a reasonable assumption.  Is it really a
problem to always have a partition table?

Ludo’.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: Installer, ISO9660, etc.
  2017-07-11  9:23                 ` Ludovic Courtès
@ 2017-07-11 10:13                   ` Danny Milosavljevic
  0 siblings, 0 replies; 28+ messages in thread
From: Danny Milosavljevic @ 2017-07-11 10:13 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Hi Ludo,

On Tue, 11 Jul 2017 11:23:46 +0200
ludo@gnu.org (Ludovic Courtès) wrote:

> Is it really a problem to always have a partition table?

The ISO9660 filesystem code doesn't find its primary volume descriptor when it's looking for it on the (fake) partition.  (I'm not sure what the fake partition is for in the first place).

But /proc/partitions would have contained "sda" itself, Guix just filters it out.

Of course we could special-case ISO9660 - but even easier (and less surprising) would be to just use /proc/partitions as-is and not fiddle with it (ok, maybe filter out the ram disks - not sure what that's about).

WDYT?

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2017-07-11 10:13 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-27 22:16 Looking to contribute cinder88
2017-06-28 13:49 ` Danny Milosavljevic
2017-06-28 15:01   ` Leo Famulari
2017-06-29 15:49     ` Danny Milosavljevic
2017-06-29 17:02       ` Mekeor Melire
2017-07-01 13:15         ` Deleting system generations Ludovic Courtès
2017-07-01 15:32           ` Thomas Danckaert
2017-07-02 20:22             ` Ludovic Courtès
2017-06-29 13:22   ` Looking to contribute cinder88
2017-06-29 13:46     ` Katherine Cox-Buday
2017-06-29 15:25     ` Alex Vong
2017-06-29 16:42     ` Pjotr Prins
2017-07-02 23:30     ` Binding generator, for Guile, to C libraries Danny Milosavljevic
2017-07-04  0:41       ` Installer development Danny Milosavljevic
2017-07-05 21:53       ` Binding generator, for Guile, to C libraries Ludovic Courtès
2017-07-06 19:57         ` Danny Milosavljevic
2017-07-07 11:41           ` Ludovic Courtès
2017-07-05 13:20   ` Looking to contribute Danny Milosavljevic
2017-07-07 11:34     ` Installer, ISO9660, etc Ludovic Courtès
2017-07-07 16:13       ` Danny Milosavljevic
2017-07-09 20:08         ` Ludovic Courtès
2017-07-10 13:41           ` Danny Milosavljevic
2017-07-10 21:02             ` Ludovic Courtès
2017-07-10 21:27               ` Danny Milosavljevic
2017-07-11  9:23                 ` Ludovic Courtès
2017-07-11 10:13                   ` Danny Milosavljevic
2017-06-28 13:56 ` Looking to contribute Alex Vong
2017-06-28 17:41 ` James Richardson

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).