diff options
42 files changed, 755 insertions, 35 deletions
@@ -1 +1 @@ -joeyconfig.hs
\ No newline at end of file +config-simple.hs
\ No newline at end of file diff --git a/debian/changelog b/debian/changelog index 3da0622f..c9d86e1a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ propellor (5.2.0) UNRELEASED; urgency=medium + [ Joey Hess ] * bootstrappedFrom: Set up local privdata file. * Parted: Fix names used for FAT and VFAT partitions. * Parted: Add an Alignment parameter. (API change) @@ -13,6 +14,11 @@ propellor (5.2.0) UNRELEASED; urgency=medium chroot. * Fix bug in unmountBelow that caused unmounting of nested mounts to fail. + * Grub.boots, Grub.bootsMounted: Pass --target to grub-install. + + [ Sean Whitton ] + * Sbuild: add notes about Debian jessie hosts and backports of sbuild and + autopkgtest. -- Joey Hess <id@joeyh.name> Wed, 29 Nov 2017 11:45:08 -0400 diff --git a/doc/forum/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment b/doc/forum/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment new file mode 100644 index 00000000..12dfbaac --- /dev/null +++ b/doc/forum/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="spwhitton" + avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb" + subject="Patch mailed to propellor@joeyh.name" + date="2017-12-22T18:11:07Z" + content=""" +I started preparing a patch so that `Sbuild.userConfig` would install the backport on Jessie, but realised that what is probably going on is that you have a backport of sbuild installed -- I assume that the sbuild that comes with jessie tries to invoke `adt-run` not `autopkgtest`. So `Sbuild.userConfig` would have to check the installed version of sbuild before it could determine whether to install the backport of autopkgtest. + +I think it would be unwise to incorporate that complexity into Sbuild.hs for the sake of an old release of Debian, so I've mailed a patch to Joey simply documenting the issue. +"""]] diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_10_4cfd25f81e2ed3a0cc491558038e347b._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_10_4cfd25f81e2ed3a0cc491558038e347b._comment new file mode 100644 index 00000000..a6eb510a --- /dev/null +++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_10_4cfd25f81e2ed3a0cc491558038e347b._comment @@ -0,0 +1,7 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 10""" + date="2017-12-21T04:05:40Z" + content=""" +Implemented --target passing based on Grub.installed's Info. +"""]] diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_9_b0ebdfabdc973c7e4a24825d5ab327d2._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_9_b0ebdfabdc973c7e4a24825d5ab327d2._comment new file mode 100644 index 00000000..683e7989 --- /dev/null +++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_9_b0ebdfabdc973c7e4a24825d5ab327d2._comment @@ -0,0 +1,9 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 9""" + date="2017-12-21T03:32:59Z" + content=""" +I forgot -- Grub.installed already sets Info to say what BIOS +it was installed for. So, bootsMounted can just get that Info and +pass the appropriate --target. +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_10_00b4f5d4fd445b8041a2744c2dd755f0._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_10_00b4f5d4fd445b8041a2744c2dd755f0._comment new file mode 100644 index 00000000..e38825e1 --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_10_00b4f5d4fd445b8041a2744c2dd755f0._comment @@ -0,0 +1,36 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 10" + date="2017-12-22T10:21:28Z" + content=""" +Ouch, that does not seem like it was easy to debug... Thanks for looking into this! + + src/Propellor/Property/Parted.hs:114:27: warning: [-Wtype-defaults] + • Defaulting the following constraints to type ‘Double’ + (Show a0) + arising from a use of ‘show’ + at src/Propellor/Property/Parted.hs:114:27-57 + (Fractional a0) + arising from a use of ‘/’ + at src/Propellor/Property/Parted.hs:114:33-56 + (Num a0) + arising from a use of ‘fromIntegral’ + at src/Propellor/Property/Parted.hs:114:33-46 + • In the first argument of ‘(++)’, namely + ‘show (fromIntegral n / 1000000)’ + In the expression: show (fromIntegral n / 1000000) ++ \"MB\" + In an equation for ‘partposfuzzy’: + partposfuzzy n + | n > 0 = show (fromIntegral n / 1000000) ++ \"MB\" + | otherwise = \"1MB\" + +I now get: + + mount: /tmp/mntzZ3vjF: wrong fs type, bad option, bad superblock on /dev/mapper/loop0p2, missing codepage or helper program, or other error. + umount: /tmp/mntzZ3vjF: not mounted. + ** fatal error: failed unmounting /tmp/mntzZ3vjF + propellor: StopPropellorException \"Cannot continue!\" + +:(. I'll try to reboot, I don't get how to remove/unmount this /dev/mapper/loop0p2 (I tried \"dmsetup remove\", \"losetup -d\" without success...) +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_11_6f691ea981679e92d7c0ae6cf1cfce6f._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_11_6f691ea981679e92d7c0ae6cf1cfce6f._comment new file mode 100644 index 00000000..8d39744b --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_11_6f691ea981679e92d7c0ae6cf1cfce6f._comment @@ -0,0 +1,29 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 11" + date="2017-12-22T12:10:37Z" + content=""" +So, I rebooted, but I still had the /dev/mapper/loop problem. I was able to \"dmsetup remove\" these, though... + +I deleted router.img and router.img.parttable... + + creating /srv/router.img of size 1.66 gigabytes + loop deleted : /dev/loop0 + mkfs.fat 4.1 (2017-01-24) + loop deleted : /dev/loop0 + 26,456,191 100% 29.82MB/s 0:00:00 (xfr#5, to-chk=0/7) + 770,763,841 99% 2.16MB/s 0:05:40 (xfr#26256, to-chk=0/33583) + update-initramfs: Generating /boot/initrd.img-4.9.0-4-amd64 + Generating grub configuration file ... + Found linux image: /boot/vmlinuz-4.9.0-4-amd64 + Found initrd image: /boot/initrd.img-4.9.0-4-amd64 + done + grub-install: error: /usr/lib/grub/i386-efi/modinfo.sh doesn't exist. Please specify --target or --directory. + loop deleted : /dev/loop0 + laptop built disk image /srv/router.img ... failed + laptop overall ... failed + + +...and I'm back to the grub-install/grub-update problem, which seems to apply to grub-efi-amd64. It's weird, because it's the version I have on my laptop, and I did not notice this issue (but I installed debian on it a long time ago, so, the bug may have appeared since then). +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_12_8717ae3d2e60d07025a11c930cf26b84._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_12_8717ae3d2e60d07025a11c930cf26b84._comment new file mode 100644 index 00000000..caaa5713 --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_12_8717ae3d2e60d07025a11c930cf26b84._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 12" + date="2017-12-22T12:16:50Z" + content=""" +Or not? I found this one: you inverted EFI64 and EFI32 in Grub.targetParam :) +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_13_10b9bf6e92a80dff2c14f41c22347b3f._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_13_10b9bf6e92a80dff2c14f41c22347b3f._comment new file mode 100644 index 00000000..6d8a33eb --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_13_10b9bf6e92a80dff2c14f41c22347b3f._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 13" + date="2017-12-22T12:20:57Z" + content=""" + 17,514,598 66% 53.61MB/s 0:00:00 (xfr#1, to-chk=0/7) + 129 0% 0.06kB/s 0:00:01 (xfr#3, to-chk=0/33583) + update-initramfs: Generating /boot/initrd.img-4.9.0-4-amd64 + Generating grub configuration file ... + Found linux image: /boot/vmlinuz-4.9.0-4-amd64 + Found initrd image: /boot/initrd.img-4.9.0-4-amd64 + done + Installing for x86_64-efi platform. + Installation finished. No error reported. + loop deleted : /dev/loop0 + laptop built disk image /srv/router.img ... done + laptop overall ... done + + +\o/. Let's see if it boots... I just have one try, then I'll have to move for a few days... +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_14_d7948bf285cc4769ccd1802a1fa86eee._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_14_d7948bf285cc4769ccd1802a1fa86eee._comment new file mode 100644 index 00000000..88870d0d --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_14_d7948bf285cc4769ccd1802a1fa86eee._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 14" + date="2017-12-22T12:44:18Z" + content=""" +Unfortunately it didn't... But I think it's probably a problem of choosing the right grub version. I did boot a grml64 sdcard, and I think they use hybrid bios/uefi boot. I have to investigate, let's see this in a few days :) + +Thanks a lot for your help! +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_15_05bdf475e1a8b5d8d36f88fef0210383._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_15_05bdf475e1a8b5d8d36f88fef0210383._comment new file mode 100644 index 00000000..5bf364ac --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_15_05bdf475e1a8b5d8d36f88fef0210383._comment @@ -0,0 +1,7 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 15""" + date="2017-12-22T13:24:44Z" + content=""" +Oops, fixed the Grub.targetParam inversion. +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_16_53ec0ff959e60af5382f2b6fd54ced26._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_16_53ec0ff959e60af5382f2b6fd54ced26._comment new file mode 100644 index 00000000..e471dfc2 --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_16_53ec0ff959e60af5382f2b6fd54ced26._comment @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="the working config" + date="2017-12-27T21:26:21Z" + content=""" +Is the working config somewhere available? + +If yes, where?? + + +Yes, I what to reproduce it. + + +Cheers +Geert Stappers +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_3_f2ec6998ed728f42cdb23116dbce8ade._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_3_f2ec6998ed728f42cdb23116dbce8ade._comment new file mode 100644 index 00000000..8bf91368 --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_3_f2ec6998ed728f42cdb23116dbce8ade._comment @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 3" + date="2017-12-21T09:11:23Z" + content=""" +OK. +I tried to run propellor again, I got a new error (probably related to the recent alignment changes): + + ... + creating /srv/router.img of size 1.66 gigabytes + Error: You requested a partition from 168MB to 1661MB (sectors 327680..3244031). + The closest location we can manage is 168MB to 1661MB (sectors 327680..3243998). + laptop built disk image /srv/router.img ... failed + laptop overall ... failed + +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_4_021311b587601d76c64afe06638e1fef._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_4_021311b587601d76c64afe06638e1fef._comment new file mode 100644 index 00000000..ae5f6463 --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_4_021311b587601d76c64afe06638e1fef._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 4""" + date="2017-12-21T16:06:56Z" + content=""" +That's definitely due to the alignment changes, I knew those changes +could run afoul of parted's checks, but in my tests they seemed to work. + +Could you paste /srv/router.img.parttable, that should have enough +infromation for me to reproduce the problem. +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_5_95af19d3f8e01525a616b48e376c3326._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_5_95af19d3f8e01525a616b48e376c3326._comment new file mode 100644 index 00000000..6eaa60ab --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_5_95af19d3f8e01525a616b48e376c3326._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 5" + date="2017-12-21T16:21:50Z" + content=""" + PartTable GPT (Alignment 4194304) [Partition {partType = Primary, partSize = MegaBytes 10, partFs = VFAT, partMkFsOpts = [], partFlags = [(EspFlag,True)], partName = Nothing},Partition {partType = Primary, partSize = MegaBytes 150, partFs = EXT2, partMkFsOpts = [], partFlags = [], partName = Nothing},Partition {partType = Primary, partSize = MegaBytes 1489, partFs = EXT4, partMkFsOpts = [], partFlags = [], partName = Nothing}] +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_6_8c454f014e0cf4e6b3af9b8f68f987fa._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_6_8c454f014e0cf4e6b3af9b8f68f987fa._comment new file mode 100644 index 00000000..711fc21e --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_6_8c454f014e0cf4e6b3af9b8f68f987fa._comment @@ -0,0 +1,7 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 6""" + date="2017-12-21T18:51:01Z" + content=""" +Oh also need the size of /srv/router.img in bytes. +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9._comment new file mode 100644 index 00000000..f273d3b0 --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 7" + date="2017-12-21T18:54:32Z" + content=""" +1660944384 +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_8_ad50abb937a9801a4db2293765137b75._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_8_ad50abb937a9801a4db2293765137b75._comment new file mode 100644 index 00000000..4e102a26 --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_8_ad50abb937a9801a4db2293765137b75._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 8" + date="2017-12-21T20:40:56Z" + content=""" +parted seems pretty hairy with partition alignment. In case it's too hard to integrate parted with propellor, maybe fdisk would be easier? +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment new file mode 100644 index 00000000..fd5b25e4 --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment @@ -0,0 +1,62 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2017-12-21T19:44:45Z" + content=""" +Reproduced it with that information. + + ghci> calcPartedParamsSize guexPartTable + (["mklabel","gpt","mkpart","primary","fat32","4194304B","16777215B","set","1","esp","on","mkpart","primary","ext2","16777216B","167772159B","mkpart","primary","ext4","167772160B","1660944383B"],1660944384) + joey@darkstar:~>dd if=/dev/zero of=test bs=1M count=1584 + joey@darkstar:~>parted test + (parted) p + Model: (file) + Disk /home/joey/test: 1661MB + Sector size (logical/physical): 512B/512B + (parted) mklabel gpt + (parted) mkpart primary fat32 4194304B 16777215B + (parted) mkpart primary ext2 16777216B 167772159B + (parted) mkpart primary ext4 167772160B 1660944383B + Warning: You requested a partition from 168MB to 1661MB (sectors 327680..3244031). + The closest location we can manage is 168MB to 1661MB (sectors 327680..3243998). + +The problem only occurs with the gpt partition table. With "mklabel msdos", +the mkpart command succeeds. + +So, gpt must have an additional restriction +of some kind. I don't know what. The highest end position that parted +will accept for that partition is 1660927487B; slightly smaller partitions +are accepted. It's not a requirement that the position or size be divisible +by anything in particular. Perhaps gpt needs some amount of reserved space +at the end of the disk or something. + +Before 4MiB alignment was added, here's what +propellor did for the same PartTable, which worked. + + mkpart primary ext4 160MB 1649MB + +It would be good for propellor to not need to know about all the minutia of +partition tables. Seems that the way it used to call parted gave it enough +wiggle room that it avoided this kind of problem. + +To make parititions well aligned, propellor needs to precisely control where +they begin (since parted does not have a way to configure modern +alignment requirments). Perhaps propellor could precisely specify where a +partition begins, but use the "MB" to leave wiggle room in where it ends +so parted can pick a suitable end point. + +Let's see.. this works with the gpt example: + + (parted) mkpart primary fat32 4194304B 16.777215MB + (parted) mkpart primary ext2 16777216B 167.772159MB + (parted) mkpart primary ext4 167772160B 1660.944383MB + +That lets parted end the last partition right at the ideal 1660927487B. +The previous two partitions end right where propellor expects. +(Hopefully parted never rounds a MB value *up*!) + +Ok, I've convinced myself to make propellor use this wacky technique +of B for the start position and fractional MB for the end position! +I've implemented it, hopefully my analysis above is good to make +this work with all the different kinds of partition tables. +"""]] diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__..mdwn b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__..mdwn new file mode 100644 index 00000000..ca665c3c --- /dev/null +++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__..mdwn @@ -0,0 +1,25 @@ +Hi, + +While attempting to build "secret-project" I encountered this + + [ 7 of 10] Compiling Installer.UI ( Installer/UI.hs, .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/propellor-config/propellor-config-tmp/Installer/UI.o ) + + /home/stappers/src/secret-project/Installer/UI.hs:228:14: error: + Not in scope: ‘UI.loadFile’ + Module ‘Graphics.UI.Threepenny’ does not export ‘loadFile’. + + -- While building custom Setup.hs for package secret-project-0.0 using: + /root/.stack/setup-exe-cache/x86_64-linux-nopie/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0 build exe:propellor-config --ghc-options " -ddump-hi -ddump-to-file" + Process exited with code: ExitFailure 1 + + +From <http://propellor.branchable.com/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/#comment-179662ace1bc9a24782d60e73f2a5a4e> +I understand that a UI patch to threepenny-gui is needed. +But I don't understand that request. + +How to patch the threepenny-gui?? + + +Cheers + +Geert Stappers diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_1_4dea8fc15186923aeffcd0272a8c14c0._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_1_4dea8fc15186923aeffcd0272a8c14c0._comment new file mode 100644 index 00000000..58543ee5 --- /dev/null +++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_1_4dea8fc15186923aeffcd0272a8c14c0._comment @@ -0,0 +1,38 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="additional information" + date="2017-12-28T12:44:23Z" + content=""" +There was another error before the error reported above. It was + + Error: While constructing the build plan, the following exceptions were encountered: + + In the dependencies for secret-project-0.0: + threepenny-gui-0.7.0.1 from stack configuration does not match (==0.8.0.0) (latest matching version + is 0.8.0.0) + needed since secret-project is a build target. + +My workaround was + + --- a/secret-project.cabal + +++ b/secret-project.cabal + @@ -21,7 +21,7 @@ Executable propellor-config + Build-Depends: + base (>= 4.9 && < 5.0) + , propellor >= 4.7.6 + - , threepenny-gui (== 0.8.0.0) + + , threepenny-gui (== 0.7.0.1) + , random (>= 1.1) + , random-shuffle (>= 0.0.4) + , filepath (>= 1.4) + +That because `stack.yaml` has a package line + + - http://github.com/joeyh/threepenny-gui/archive/59242cf93bdb8eaa805f5c2b0241e9a1cba9a70f.zip + +where I think/assume the 0.7.0.1 comes from. + + +"""]] diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_2_10e8132f96e66a4c215ed275e22d1bda._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_2_10e8132f96e66a4c215ed275e22d1bda._comment new file mode 100644 index 00000000..f25b614b --- /dev/null +++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_2_10e8132f96e66a4c215ed275e22d1bda._comment @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2017-12-28T17:01:21Z" + content=""" +The zip file pointed to by the stack.yaml file contains a patched version +of threepenny-gui 0.8.0.0, the same as the cabal file requires. + +Downgrading the dependency won't work, thus your build problems. All I can +tell you is it's built successfully with stack every time I've tried to +build it, and stack pins all package versions to ensure a reproducible +build. + +It may be that you're using too old a version of stack or +something like that; I've used stack 1.1.2. +"""]] diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_3_e288978072a6f38539150be1ebf4b0f2._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_3_e288978072a6f38539150be1ebf4b0f2._comment new file mode 100644 index 00000000..5dc314de --- /dev/null +++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_3_e288978072a6f38539150be1ebf4b0f2._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="my stack version" + date="2017-12-28T22:13:21Z" + content=""" + $ stack --version + Version 1.6.3, Git revision b27e629b8c4ce369e3b8273f04db193b060000db (5454 commits) x86_64 hpack-0.20.0 + +"""]] diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_4_074a7c14425635ddb25b7d3046337533._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_4_074a7c14425635ddb25b7d3046337533._comment new file mode 100644 index 00000000..4ea04076 --- /dev/null +++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_4_074a7c14425635ddb25b7d3046337533._comment @@ -0,0 +1,38 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="threepenny-ui in cabal" + date="2017-12-29T08:46:19Z" + content=""" +Without a version for threepenny-ui in secret-project.cabal gets 0.7.0.1 installed by `stack build`. + +Where 0.7.0.1 comes from is unclear to me. +Downloading and unzipping <https://github.com/joeyh/threepenny-gui/archive/59242cf93bdb8eaa805f5c2b0241e9a1cba9a70f.zip> didn't reveal any 0.7.0.1. + +Having `threepenny-gui (>= 0.8.0.0)` in secret-project.cabal gives this compile error: + + + Error: While constructing the build plan, the following exceptions were encountered: + + In the dependencies for secret-project-0.0: + threepenny-gui-0.7.0.1 from stack configuration does not match (>=0.8.0.0) (latest matching version + is 0.8.2.0) + needed since secret-project is a build target. + + Some potential ways to resolve this: + + * Recommended action: try adding the following to your extra-deps + in /home/stappers/src/secret-project/stack.yaml: + + - threepenny-gui-0.8.2.0 + + * Set 'allow-newer: true' to ignore all version constraints and build anyway. + + * You may also want to try using the 'stack solver' command. + + Plan construction failed. + + + +"""]] diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_5_4cda097e7650c4ba46e26c6e3dbbdc75._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_5_4cda097e7650c4ba46e26c6e3dbbdc75._comment new file mode 100644 index 00000000..608e0bb1 --- /dev/null +++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_5_4cda097e7650c4ba46e26c6e3dbbdc75._comment @@ -0,0 +1,65 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="stack extra dep threepenny-gui-0.8.2.0 compile error" + date="2017-12-29T09:22:34Z" + content=""" +With having + + extra-deps: + - propellor-5.1.0 + - threepenny-gui-0.8.2.0 + +in `stack.yaml` gives me this compile error: + + Preprocessing executable 'propellor-config' for secret-project-0.0... + [ 7 of 10] Compiling Installer.UI ( Installer/UI.hs, .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/propellor-config/propellor-config-tmp/Installer/UI.o ) + + /home/stappers/src/secret-project/Installer/UI.hs:282:32: error: + • Couldn't match type ‘(t1, (Int, Int))’ with ‘[Char]’ + Expected type: UI.DragData + Actual type: (t1, (Int, Int)) + • In the pattern: (_d, (x, y)) + In the second argument of ‘($)’, namely + ‘\ (_d, (x, y)) + -> void + $ do { now <- getTime clock; + liftIO $ writeIORef draginfo (x, y, now); + .... }’ + In a stmt of a 'do' block: + on UI.dragStart elt + $ \ (_d, (x, y)) + -> void + $ do { now <- getTime clock; + liftIO $ writeIORef draginfo (x, y, now); + .... } + + /home/stappers/src/secret-project/Installer/UI.hs:487:27: error: + • Couldn't match type ‘(t0 a0, (Int, Int))’ with ‘[Char]’ + Expected type: UI.DragData + Actual type: (t0 a0, (Int, Int)) + • In the pattern: (d, (x, y)) + In the second argument of ‘($)’, namely + ‘\ (d, (x, y)) + -> when (not (null d)) + $ liftIO $ writeIORef dropSuccess (True, (x, y))’ + In a stmt of a 'do' block: + on UI.drop elt + $ \ (d, (x, y)) + -> when (not (null d)) + $ liftIO $ writeIORef dropSuccess (True, (x, y)) + + -- While building custom Setup.hs for package secret-project-0.0 using: + /root/.stack/setup-exe-cache/x86_64-linux-nopie/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0 build exe:propellor-config --ghc-options \" -ddump-hi -ddump-to-file\" + Process exited with code: ExitFailure 1 + +I hope it is reproduceable and that it can be fixed. + +Thank you + +Groeten + +Geert Stappers + +"""]] diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_6_249337c7f647cca8f4e23c99897458d9._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_6_249337c7f647cca8f4e23c99897458d9._comment new file mode 100644 index 00000000..9d540993 --- /dev/null +++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_6_249337c7f647cca8f4e23c99897458d9._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 6""" + date="2017-12-29T15:56:21Z" + content=""" +You need this for it to build with the newer stack: + + --- a/stack.yaml + +++ b/stack.yaml + @@ -4,4 +4,5 @@ packages: + resolver: lts-8.12 + extra-deps: + - propellor-5.1.0 + +- archive: http://github.com/joeyh/threepenny-gui/archive/59242cf93bdb8eaa805f5c2b0241e9a1cba9a70f.zip + explicit-setup-deps: + +However, that won't work with the +[stack currently in debian](http://package.debian.org/haskell-stack) +and since secret-project later installs that version of stack and runs +it against the same stack.yaml file, I can't commit that change until +Debian gets around to [upgrading haskell-stack](http://bugs.debian.org/877256) +"""]] diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__.mdwn b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__.mdwn new file mode 100644 index 00000000..94d58f2b --- /dev/null +++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__.mdwn @@ -0,0 +1,43 @@ +Hi, + +After + git clone https://git.joeyh.name/git/secret-project.git + +plus + --- a/secret-project.cabal + +++ b/secret-project.cabal + @@ -21,7 +21,7 @@ Executable propellor-config + Build-Depends: + base (>= 4.9 && < 5.0) + , propellor >= 4.7.6 + - , threepenny-gui (== 0.8.0.0) + + , threepenny-gui (>= 0.8.0.0) + , random (>= 1.1) + , random-shuffle (>= 0.0.4) + , filepath (>= 1.4) + + +Gives `propellor spin` me this + +[ 5 of 10] Compiling Installer.Target ( Installer/Target.hs, dist/build/propellor-config/propellor-config-tmp/Installer/Target.o ) + +Installer/Target.hs:28:51: error: + Not in scope: type constructor or class ‘PartSpec’ + +Installer/Target.hs:97:30: error: + Not in scope: type constructor or class ‘PartSpec’ + +Installer/Target.hs:178:51: error: + Not in scope: type constructor or class ‘PartSpec’ +propellor: cabal build failed +CallStack (from HasCallStack): + error, called at src/Propellor/Bootstrap.hs:259:25 in main:Propellor.Bootstrap + + + +How to get beyond that compile error? + + +Cheers +Geert Stappers + diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_1_492a5c5297a80f18282361fb5c27ad8a._comment b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_1_492a5c5297a80f18282361fb5c27ad8a._comment new file mode 100644 index 00000000..5fbd00ff --- /dev/null +++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_1_492a5c5297a80f18282361fb5c27ad8a._comment @@ -0,0 +1,20 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="patch, sorry for the previous line wraps" + date="2017-12-27T23:14:22Z" + content=""" + --- a/secret-project.cabal + +++ b/secret-project.cabal + @@ -21,7 +21,7 @@ Executable propellor-config + Build-Depends: + base (>= 4.9 && < 5.0) + , propellor >= 4.7.6 + - , threepenny-gui (== 0.8.0.0) + + , threepenny-gui (>= 0.8.0.0) + , random (>= 1.1) + , random-shuffle (>= 0.0.4) + , filepath (>= 1.4) + +"""]] diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_2_4e2f36fc1de2644c22d69ab9a2d7e94a._comment b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_2_4e2f36fc1de2644c22d69ab9a2d7e94a._comment new file mode 100644 index 00000000..a5e48372 --- /dev/null +++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_2_4e2f36fc1de2644c22d69ab9a2d7e94a._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 2""" + date="2017-12-27T23:42:50Z" + content=""" +You need to build secret-project using stack, to get the right version +of propellor and also a UI patch to threepenny-gui. +"""]] diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_3_b436b5eb909dd4b228bb36546f593547._comment b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_3_b436b5eb909dd4b228bb36546f593547._comment new file mode 100644 index 00000000..3380be42 --- /dev/null +++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_3_b436b5eb909dd4b228bb36546f593547._comment @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="README.mdwn" + date="2017-12-28T12:02:17Z" + content=""" + +Use `stack` for building. +Find stack at <https://docs.haskellstack.org/en/stable/README/> + +After installing `stack` do + + stack build + +in this directory. +"""]] diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_4_568bda577a15f1ef405dd20eec24aa9b._comment b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_4_568bda577a15f1ef405dd20eec24aa9b._comment new file mode 100644 index 00000000..52726dc1 --- /dev/null +++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_4_568bda577a15f1ef405dd20eec24aa9b._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="patch" + date="2017-12-28T13:08:12Z" + content=""" +patch against the now existing README file + + --- a/README + +++ b/README + @@ -4,3 +4,5 @@ based GUI. I ran it live in my \"Life After Debian\" talk at DebConf 17. + http://meetings-archive.debian.net/pub/debian-meetings/2017/debconf17/life-after-debian.vp8.webm + + If you would like to build this, use stack, eg \"stack build\" + + + +FYI stack homepage is https://docs.haskellstack.org/en/stable/README/ + +"""]] diff --git a/doc/todo/etckeeper/comment_2_69484bfac40de156a4b877f27aa69eca._comment b/doc/todo/etckeeper/comment_2_69484bfac40de156a4b877f27aa69eca._comment new file mode 100644 index 00000000..dfb9f9df --- /dev/null +++ b/doc/todo/etckeeper/comment_2_69484bfac40de156a4b877f27aa69eca._comment @@ -0,0 +1,14 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="why still on todo list" + date="2017-12-27T23:00:58Z" + content=""" +the 'all needed apt.installed[\"etckeeper\"]' seems to me that the etckeeper is available. + +Why is this still on the todo list? + +What kind of patches are wanted?? + +"""]] diff --git a/doc/todo/etckeeper/comment_3_5f62128bdb550de475d22abb35730949._comment b/doc/todo/etckeeper/comment_3_5f62128bdb550de475d22abb35730949._comment new file mode 100644 index 00000000..7d2f8d43 --- /dev/null +++ b/doc/todo/etckeeper/comment_3_5f62128bdb550de475d22abb35730949._comment @@ -0,0 +1,7 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 3""" + date="2017-12-27T23:35:16Z" + content=""" +Yeah, just been waiting to hear back from the issue submitter. +"""]] diff --git a/doc/todo/removable_drive_partitioning_and_install.mdwn b/doc/todo/removable_drive_partitioning_and_install.mdwn new file mode 100644 index 00000000..891c3b92 --- /dev/null +++ b/doc/todo/removable_drive_partitioning_and_install.mdwn @@ -0,0 +1,40 @@ +I want to be able to temporarily plug in the root drive of another host +to my laptop and run propellor to re-image the drive with the properties of +the host it belongs to. This is especially useful when the drive is too +large to make a DiskImage on my laptop. + +Open design questions: + +* How to uniquely identify which removable drive belongs to which Host? + Could use partition uuids for updating an already imaged drive, but not + for the initial build. + + /dev/disk/by-id/ seems a good way to go. Eg for a USB drive I have, + "/dev/disk/by-id/usb-LaCie_iamaKey_37637172f536ba-0:0" probably uniquely + identifies it, at least as long as the manufacturer is not reusing serial + numbers. + + One problem with /dev/disk/by-id/ is, if a removable drive is attached + on a different bus (ie, a SATA drive might be connected via SATA or a USB + dock), it won't appear the same there. + + Could instead use eg `udevadm info --query=all -n /dev/sdb`, which + breaks out `ID_SERIAL`. However, this would be harder for the user to + look up. Or, could parse the /dev/disk/by-id/ name, excluding the bus + part of it. + + Question: When using microsd card adapter, does the serial number pass + through so different microsds can be distinguished? + > Checked this, and two microsd card adapters from different + > manufacturers with different microsd cards have the same by-id. + > Those must have no serial number.. + +* Should an already imaged drive be updated incrementally or re-imaged? + Seems both cases would be useful, the former especially for incrementally + configuring it, the latter to bring it up from a clean state. + If it defaults to updating, the user could force a re-image by deleting + the partitions from the drive manually. + +secret-project has some code for /target which might be reusable here. + +--[[Joey]] diff --git a/privdata/relocate b/privdata/relocate deleted file mode 100644 index 271692d8..00000000 --- a/privdata/relocate +++ /dev/null @@ -1 +0,0 @@ -.joeyconfig diff --git a/src/Propellor/Property/DiskImage.hs b/src/Propellor/Property/DiskImage.hs index 1f4f8118..24459476 100644 --- a/src/Propellor/Property/DiskImage.hs +++ b/src/Propellor/Property/DiskImage.hs @@ -17,7 +17,7 @@ module Propellor.Property.DiskImage ( imageRebuiltFor, imageBuiltFrom, imageExists, - Grub.BIOS(..), + GrubTarget(..), ) where import Propellor.Base @@ -221,7 +221,7 @@ imageBuilt' rebuild img mkchroot tabletype partspec = -- installed. final = case fromInfo (containerInfo chroot) of [] -> unbootable "no bootloader is installed" - [GrubInstalled] -> grubFinalized + [GrubInstalled grubtarget] -> grubFinalized grubtarget [UbootInstalled p] -> ubootFinalized p [FlashKernelInstalled] -> flashKernelFinalized [UbootInstalled p, FlashKernelInstalled] -> @@ -454,9 +454,10 @@ unbootable msg = \_ _ _ -> property desc $ do where desc = "image is not bootable" -grubFinalized :: Finalization -grubFinalized _img mnt loopdevs = Grub.bootsMounted mnt wholediskloopdev - `describe` "disk image boots using grub" +grubFinalized :: GrubTarget -> Finalization +grubFinalized grubtarget _img mnt loopdevs = + Grub.bootsMounted mnt wholediskloopdev grubtarget + `describe` "disk image boots using grub" where -- It doesn't matter which loopdev we use; all -- come from the same disk image, and it's the loop dev diff --git a/src/Propellor/Property/Grub.hs b/src/Propellor/Property/Grub.hs index d0516dc8..5cb9077d 100644 --- a/src/Propellor/Property/Grub.hs +++ b/src/Propellor/Property/Grub.hs @@ -1,4 +1,15 @@ -module Propellor.Property.Grub where +module Propellor.Property.Grub ( + GrubDevice, + OSDevice, + GrubTarget(..), + installed, + mkConfig, + installed', + boots, + bootsMounted, + TimeoutSecs, + chainPVGrub +) where import Propellor.Base import qualified Propellor.Property.File as File @@ -14,40 +25,36 @@ type GrubDevice = String -- | Eg, \"\/dev/sda\" type OSDevice = String -type TimeoutSecs = Int - --- | Types of machines that grub can boot. -data BIOS = PC | EFI64 | EFI32 | Coreboot | Xen - -- | Installs the grub package. This does not make grub be used as the -- bootloader. -- -- This includes running update-grub, unless it's run in a chroot. -installed :: BIOS -> Property (HasInfo + DebianLike) -installed bios = installed' bios +installed :: GrubTarget -> Property (HasInfo + DebianLike) +installed grubtarget = installed' grubtarget `onChange` (check (not <$> inChroot) mkConfig) --- Run update-grub, to generate the grub boot menu. It will be +-- | Run update-grub, to generate the grub boot menu. It will be -- automatically updated when kernel packages are installed. mkConfig :: Property DebianLike mkConfig = tightenTargets $ cmdProperty "update-grub" [] `assume` MadeChange -- | Installs grub; does not run update-grub. -installed' :: BIOS -> Property (HasInfo + DebianLike) -installed' bios = setInfoProperty aptinstall - (toInfo [GrubInstalled]) +installed' :: GrubTarget -> Property (HasInfo + DebianLike) +installed' grubtarget = setInfoProperty aptinstall + (toInfo [GrubInstalled grubtarget]) `describe` "grub package installed" where aptinstall = Apt.installed [debpkg] - debpkg = case bios of + debpkg = case grubtarget of PC -> "grub-pc" EFI64 -> "grub-efi-amd64" EFI32 -> "grub-efi-ia32" Coreboot -> "grub-coreboot" Xen -> "grub-xen" --- | Installs grub onto a device, so the system can boot from that device. +-- | Installs grub onto a device's boot loader, +-- so the system can boot from that device. -- -- You may want to install grub to multiple devices; eg for a system -- that uses software RAID. @@ -57,9 +64,24 @@ installed' bios = setInfoProperty aptinstall -- to arrange for this property to only run once, by eg making it be run -- onChange after OS.cleanInstallOnce. boots :: OSDevice -> Property Linux -boots dev = tightenTargets $ cmdProperty "grub-install" [dev] - `assume` MadeChange - `describe` ("grub boots " ++ dev) +boots dev = property' ("grub boots " ++ dev) $ \w -> do + grubtarget <- askInfo + let ps = case grubtarget of + [GrubInstalled t] -> [targetParam t] + _ -> [] + ensureProperty w $ + cmdProperty "grub-install" (ps ++ [dev]) + `assume` MadeChange + +targetParam :: GrubTarget -> String +targetParam t = "--target=" ++ case t of + PC -> "i386-pc" + EFI32 -> "i386-efi" + EFI64 -> "x86_64-efi" + Coreboot -> "i386-coreboot" + Xen -> "x86_64-xen" + +type TimeoutSecs = Int -- | Use PV-grub chaining to boot -- @@ -95,8 +117,8 @@ chainPVGrub rootdev bootdev timeout = combineProperties desc $ props -- at a particular directory. The OSDevice should be the underlying disk -- device that grub will be installed to (generally a whole disk, -- not a partition). -bootsMounted :: FilePath -> OSDevice -> Property Linux -bootsMounted mnt wholediskdev = combineProperties desc $ props +bootsMounted :: FilePath -> OSDevice -> GrubTarget -> Property Linux +bootsMounted mnt wholediskdev grubtarget = combineProperties desc $ props -- remove mounts that are done below to make sure the right thing -- gets mounted & cleanupmounts @@ -112,7 +134,7 @@ bootsMounted mnt wholediskdev = combineProperties desc $ props & inchroot "update-grub" [] `assume` MadeChange & check haveosprober (inchroot "chmod" ["+x", osprober]) - & inchroot "grub-install" [wholediskdev] + & inchroot "grub-install" [targetParam grubtarget, wholediskdev] `assume` MadeChange & cleanupmounts -- sync all buffered changes out to the disk in case it's diff --git a/src/Propellor/Property/Mount.hs b/src/Propellor/Property/Mount.hs index e8f3f092..71f1733e 100644 --- a/src/Propellor/Property/Mount.hs +++ b/src/Propellor/Property/Mount.hs @@ -151,4 +151,4 @@ unmountBelow d = do submnts <- mountPointsBelow d -- sort so sub-mounts are unmounted before the mount point -- containing them - forM_ (sort submnts) umountLazy + forM_ (reverse (sort submnts)) umountLazy diff --git a/src/Propellor/Property/Parted.hs b/src/Propellor/Property/Parted.hs index 38c55b93..97cf815e 100644 --- a/src/Propellor/Property/Parted.hs +++ b/src/Propellor/Property/Parted.hs @@ -85,8 +85,8 @@ calcPartedParamsSize (PartTable tabletype alignment parts) = [ "mkpart" , pval (partType p) , pval (partFs p) - , partpos startpos - , partpos endpos + , partposexact startpos + , partposfuzzy endpos ] ++ case partName p of Just n -> ["name", show partnum, n] Nothing -> [] @@ -95,14 +95,29 @@ calcPartedParamsSize (PartTable tabletype alignment parts) = in calcparts (partnum+1) endpos ps (c ++ mkpart partnum startpos (endpos-1) p : map (mkflag partnum) (partFlags p)) calcparts _ endpos [] c = (c, endpos) - partpos n - | n > 0 = val n ++ "B" + + -- Exact partition position value for parted. + -- For alignment to work, the start of a partition must be + -- specified exactly. + partposexact n + | n > 0 = show n ++ "B" -- parted can't make partitions smaller than 1MB; -- avoid failure in edge cases | otherwise = "1MB" + + -- Fuzzy partition position valie for parted. + -- This is used to specify the end of the partition, + -- parted takes the "MB" as license to slightly reduce the + -- partition size when something about the partition table + -- does not allow the partition to end exactly at the position. + partposfuzzy n + | n > 0 = show (fromIntegral n / 1000000 :: Double) ++ "MB" + | otherwise = "1MB" + -- Location of the start of the first partition, -- leaving space for the partition table, and aligning. firstpos = align partitionTableOverhead + align = alignTo alignment -- | Runs parted on a disk with the specified parameters. diff --git a/src/Propellor/Property/Sbuild.hs b/src/Propellor/Property/Sbuild.hs index d323ee67..8cc2e3be 100644 --- a/src/Propellor/Property/Sbuild.hs +++ b/src/Propellor/Property/Sbuild.hs @@ -48,6 +48,14 @@ To take advantage of the piuparts and autopkgtest support, add to your > > $autopkgtest_root_args = ""; > $autopkgtest_opts = ["--", "schroot", "%r-%a-sbuild"]; + +On Debian jessie hosts, you should ensure that sbuild and autopkgtest come from +the same suite. This is because the autopkgtest binary changed its name between +jessie and stretch. If you have not installed backports of sbuild or +autopkgtest, you don't need to do anything. But if you have installed either +package from jessie-backports (with Propellor or otherwise), you should install +the other from jessie-backports, too. + -} module Propellor.Property.Sbuild ( @@ -376,6 +384,13 @@ ccachePrepared = propertyList "sbuild group ccache configured" $ props -- -- You probably want a custom ~/.sbuildrc on your workstation, but -- this property is handy for quickly setting up build boxes. +-- +-- On Debian jessie hosts, you should ensure that sbuild and autopkgtest come +-- from the same suite. This is because the autopkgtest binary changed its name +-- between jessie and stretch. If you have not installed backports of sbuild or +-- autopkgtest, you don't need to do anything. But if you have installed either +-- package from jessie-backports (with Propellor or otherwise), you should +-- install the other from jessie-backports, too. userConfig :: User -> Property DebianLike userConfig user@(User u) = go `requires` usableBy user diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 03e9c3f7..019d2209 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -646,7 +646,7 @@ dkimInstalled = go `onChange` Service.restarted "opendkim" & Apt.serviceInstalledRunning "opendkim" & File.dirExists "/etc/mail" & File.hasPrivContent "/etc/mail/dkim.key" (Context "kitenet.net") - & File.ownerGroup "/etc/mail/dkim.key" (User "opendkim") (Group "opendkim") + & File.ownerGroup "/etc/mail/dkim.key" (User "root") (Group "root") & "/etc/default/opendkim" `File.containsLine` "SOCKET=\"inet:8891@localhost\"" `onChange` diff --git a/src/Propellor/Types/Bootloader.hs b/src/Propellor/Types/Bootloader.hs index fd929d7e..65117bd2 100644 --- a/src/Propellor/Types/Bootloader.hs +++ b/src/Propellor/Types/Bootloader.hs @@ -7,13 +7,16 @@ import Propellor.Types.Info -- | Boot loader installed on a host. data BootloaderInstalled - = GrubInstalled + = GrubInstalled GrubTarget | FlashKernelInstalled | UbootInstalled (FilePath -> FilePath -> Property Linux) deriving (Typeable) +-- | Platforms that grub can boot. +data GrubTarget = PC | EFI64 | EFI32 | Coreboot | Xen + instance Show BootloaderInstalled where - show GrubInstalled = "GrubInstalled" + show (GrubInstalled _) = "GrubInstalled" show FlashKernelInstalled = "FlashKernelInstalled" show (UbootInstalled _) = "UbootInstalled" |
