Commit Graph

3797 Commits

Author SHA1 Message Date
Michael Hudson-Doyle de82838c5e
Merge pull request #928 from mwhudson/kill-fg-process-on-restart
kill any foreground subprocess before restarting
2021-04-06 08:57:12 +12:00
Michael Hudson-Doyle b0af11ad02 kill any foreground subprocess before restarting
This fixes a problem where you drop to a shell and refresh subiquity
from that shell -- the client tries to restart but it is running in the
background and so crashes trying to modify the terminal settings. So
this kills the subprocess before restarting. This required the extremely
angry PR I sent before: forcefully killing the subprocess also crashes
the client before restart in a similar way.
2021-04-01 17:24:49 +13:00
Michael Hudson-Doyle 939c81920c do not crash when subshell exits via signal
Here is something you can try with a live server installer today: drop
into a subshell and type "kill -9 $$". The installer will crash with an
'Input/output error' from tcsetattr.

What's going on is some deep unix arcana: when the subshell exits via
signal somehow the shell's process group is still in the foreground
(even though there are no processes in it?) and calling tcsetattr() from
a background process is not allowed. So the fix for this is reasonably
simple (or at least: short): call tcsetpgrp() to put our process group
back into the foreground. A background process doing this gets sent
SIGTTOU, but if we ignore that, all is well.

Frankly this is all very strange and I would like a lie down now.
2021-04-01 16:27:05 +13:00
Dan Bungert a0e2e244bd
add setting policy for post-install updates via autoinstall (#920)
* Add element updates (non-UI)

This can be controlled with autoinstall
updates: security or all

Also an API for controlling this:
curl --silent --unix-socket .subiquity/socket a/updates ->
"security"
curl -d '"all"' --unix-socket .subiquity/socket a/updates

* Automated tests - log grep for default/none/all states

* Enforce possible values on Updates controller

Route all the various get/set thru 2 common functions.
Validate incoming data.
2021-03-31 13:57:53 -06:00
Michael Hudson-Doyle 7111efbd61
Merge pull request #926 from mwhudson/fix-ssh-option
fix --ssh option to client
2021-03-31 20:23:59 +13:00
Michael Hudson-Doyle afe21993d9 fix --ssh option to client 2021-03-31 20:18:22 +13:00
Michael Hudson-Doyle a3623e6051 add all documented fields to filesystem model classes
This lets autoinstall configs set them, even though nothing in subiquity
can set them yet.
2021-03-31 16:04:22 +13:00
Michael Hudson-Doyle 26593f4c16
Merge pull request #924 from mwhudson/lp-1921820-2
more reliably restart client when server restarts
2021-03-31 13:30:56 +13:00
Michael Hudson-Doyle 132440451d more reliably restart client when server restarts
Splitting subiquity into server and client means that in general
old versions of the client can still be running when the server is
updated (the client running on tty1 will be restarted by snapd/systemd
when the snap is updated but clients running via e.g. ssh will not). I
implemented a way for the client to detect this and restart itself: the
server sets a header in all responses that indicates if it has been
updated. So far so good. But the way it knows that it has been updated
is to check the presence of a file that is only created when subiquity
itself triggers the refresh, so it's not there in the case of manual
refresh, and as reported in https://bugs.launchpad.net/bugs/1921820 this
can lead to the client crashing because it cannot parse the new server's
response. This simply changes to creating the marker file in the snap
post-refresh hook, which will be executed for manual snap refreshes as
well.

While I'm at it, remove the rest of the post-install hook that restarted
subiquity clients running on the serial line as the generic machinery
will work for these too.
2021-03-31 13:15:06 +13:00
Michael Hudson-Doyle 83823515ca
Merge pull request #921 from mwhudson/no-mount-run
remove curtin hook to bind mount /run into target now curtin does this
2021-03-31 11:47:20 +13:00
Michael Hudson-Doyle 65e0984243
Merge pull request #923 from mwhudson/curtin-update
update curtin
2021-03-31 11:47:02 +13:00
Michael Hudson-Doyle 9e9d29f698
Merge pull request #901 from mwhudson/server-side-guided
create and use an API for guided disk usage
2021-03-30 14:53:30 +13:00
Michael Hudson-Doyle 764a4eeae8 move decision about whether a disk is "ok for guided" to server 2021-03-30 14:24:23 +13:00
Michael Hudson-Doyle db49d40f94 move implementations of guided options into server code 2021-03-30 14:24:21 +13:00
Michael Hudson-Doyle 64ac97aafe make subiquity client use new API for guided disk usage 2021-03-30 14:22:28 +13:00
Michael Hudson-Doyle f8a99721bc add server side API for guided storage configuration 2021-03-30 14:22:28 +13:00
Michael Hudson-Doyle 1f671db844 stop coalescing disks with the same multipath id
curtin now produces a single disk action for a multipathed disk
2021-03-30 09:30:26 +13:00
Michael Hudson-Doyle c6185075c7 update curtin 2021-03-30 09:30:03 +13:00
Michael Hudson-Doyle b0ac3960be
Merge pull request #918 from mwhudson/set-installer-password
have subiquity set password for installer user in live session
2021-03-29 15:46:36 +13:00
Michael Hudson-Doyle fac360b8e7 remove curtin hook to bind mount /run into target now curtin does this
Curtin added this in version 19.3 so we can stop doing it.
2021-03-29 14:49:59 +13:00
Michael Hudson-Doyle 7451f362b2
Merge pull request #919 from mwhudson/lp-1919076
fix submitting error reports
2021-03-26 09:56:40 +13:00
Michael Hudson-Doyle b44adfb022 fix submitting error reports
this is a bit embarassing!
2021-03-26 09:50:21 +13:00
Michael Hudson-Doyle e3361aa51c do not set installer user password if it has password or authorized keys
dearie me making a nice UI can involve a lot of typing.
2021-03-25 14:26:49 +13:00
Michael Hudson-Doyle 47eefa42fe do not re-set installer user password if it can be found in cloud-init.log
To avoid re-setting the password when refreshing from a subiquity that
does not have this change
2021-03-24 14:42:22 +13:00
Michael Hudson-Doyle 87c2e7539e only re-set installer password once per boot
Otherwise refreshing the snap would lead to a new password!
2021-03-24 14:26:43 +13:00
Michael Hudson-Doyle f641284d1f have the server re-set the installer user's password
cloud-init does a better job of hiding what it set it to now!
2021-03-24 14:26:43 +13:00
Michael Hudson-Doyle d1e43eb27e move most of the work of computing live session ssh info to server 2021-03-24 13:59:35 +13:00
Michael Hudson-Doyle b8eb88f7ce
Merge pull request #915 from mwhudson/lp-1919075
fix rebooting after a partially interactive install
2021-03-19 11:24:42 +13:00
Michael Hudson-Doyle 159523204c
Merge pull request #917 from mwhudson/lp-1919420
handle pers="auto" in lszdev output
2021-03-19 11:11:24 +13:00
Michael Hudson-Doyle 1c39ab90fd handle pers="auto" in lszdev output
I checked the lszdev source and for all the other fields that we are
assume are boolean, it can only output "yes" or "no". Today, at least --
not sure how to make sure this is not broken by future changes. Still
this is a help.

for https://bugs.launchpad.net/subiquity/+bug/1919420
2021-03-19 10:38:07 +13:00
Michael Hudson-Doyle 4e423d5b7d trivial DESIGN.md updates 2021-03-18 16:25:41 +13:00
Michael Hudson-Doyle 78856b3752 fix rebooting after a partially interactive install
If the install is part-interactive, the client still runs and still
POSTs to the /reboot endpoint, so do not reject all requests to its
methods
2021-03-18 16:06:06 +13:00
Michael Hudson-Doyle 32ee93e797
Merge pull request #914 from jmhunter/jmhunter-nameregex-1
Update NAME_REGEX as per bug #1916325
2021-03-18 15:56:12 +13:00
Michael Hudson-Doyle 84844c2a44
Merge pull request #912 from mwhudson/server-side-keyboard-api
move most keyboard logic to server
2021-03-18 10:01:16 +13:00
Jonathan Hunter c65c322fc6 Add variables to hold username and hostname regex
Also adjust displayed message to match.

Tested locally using 'make dryrun'
2021-03-17 20:09:41 +00:00
jmhunter 9cdd829299
Update NAME_REGEX as per bug #1916325
The NAME_REGEX currently used is "[a-z_][a-z0-9_-]*" which does correctly prevent hostnames starting with a hyphen.. but also prevents otherwise perfectly valid hostnames that start with a number. (Interestingly, an underscore is not defined as a valid hostname character, but is included as valid in the regex, I'm not sure why this is included but am leaving it in for backwards compatibility)

This patch adds 0-9 as valid characters at the start of a hostname, as per https://man7.org/linux/man-pages/man7/hostname.7.html#:~:text=Valid%20characters%20for%20hostnames%20are,to%20an%20address%20for%20use.
       Each element of the hostname must be from 1 to 63 characters long
       and the entire hostname, including the dots, can be at most 253
       characters long. Valid characters for hostnames are ASCII(7)
       letters from a to z, the digits from 0 to 9, and the hyphen (-).
       A hostname may not start with a hyphen.
2021-03-17 09:36:27 +00:00
Michael Hudson-Doyle 622aec8abf load keyboard layouts on the server side
this means decoding a fairly large (40k) blob of JSON in the client, but
it seems to be OK.
2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 697949c1d2 move code aroud now only the server calls set_keyboard 2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 449de0f374 move setting of keyboard to server side 2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 744e53b76b move checking if a layout needs a toggle to server side
subiquity inherits this behavior from d-i where if a the user selects a
layout that does not allow typing latin characters, the user is prompted
to choose a key to toggle between the one they selected and a related
one that does allow latin characters. This change moves the handling of
this to the server side, so the client just sees the keyboard layout the
user selects, and calls an API method to know if to ask the user about a
toggle key.
2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 7d98a77434 move keyboard detection to server side 2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 1b70a57d97 commit generated file 2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle fb649bf7d5 pre-process keyboard auto detection steps into API friendly format
Continuing the theme of previous work, this branch parses pc105.tree
into API-friendly attr-based classes at snap build time (which also lets
us check some constraints then and not at run time).
2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 252ec6d11e commit keyboard data in new format 2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 5d93eb824a process keyboard data into api friendly format when building snap
This is a bit sideways from the real thing I'm working on which is
moving most of the logic of keyboard handling to the server side but
anyway. This also lets me check some assumptions while processing the
data rather than in the view code.
2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle da14af1c65 add serialization support for unions of attr classes
unions are serialized as a tagged union by adding a '$type' field
indicating which member of the set of types is present.
2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 85ed9826e4 add support for serializing typing.Dict 2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle 0526b150c3 enforce that the serialization module rejects non-string-key dicts
I tend to forget that json dictionaries can only have string keys. I'll
add support for explicitly typed, non-string-keyed, dicts at some
point...
2021-03-16 16:02:23 +13:00
Michael Hudson-Doyle d77419e5c8
Merge pull request #905 from mwhudson/quick-test
add a couple of super hacky scripts for quickly testing subiquity changes
2021-03-16 16:01:23 +13:00
Michael Hudson-Doyle 7b954869ad
Merge pull request #906 from mwhudson/compact-serialization
add a more compact way of serializing objects
2021-03-16 09:32:38 +13:00