diff options
31 files changed, 477 insertions, 31 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 f4204e06..4545bcd1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,16 @@ +propellor (5.3.0) UNRELEASED; urgency=medium + + * Avoid bogus warning about new upstream version when /usr/bin/propellor + is run on a Debian system, but ~/.propellor was not cloned from the + Debian git bundle. + * Parted: Allow partitions to have no filesystem, for eg, GPT BIOS boot + partitions. (API change) + * Added rawPartition to PartSpec, for specifying partitions with no + filesystem. + * Added BiosGrubFlag to PartFlag. + + -- Joey Hess <id@joeyh.name> Tue, 02 Jan 2018 13:06:45 -0400 + propellor (5.2.0) unstable; urgency=medium [ Joey Hess ] diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date...mdwn b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date...mdwn new file mode 100644 index 00000000..7f912eb8 --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date...mdwn @@ -0,0 +1,20 @@ +Hi, + +After upgrading from propellor 5.1.0 to 5.2.0 I do get + + ** warning: ** Your ~/.propellor/ is out of date.. + + + +The `~/.propellor` directory was created with + + propellor --init + + + +Is there a + + propellor --update-my-home-propellor + + +?? diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_1_79e18b696ed18c998cd2605cccbf3750._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_1_79e18b696ed18c998cd2605cccbf3750._comment new file mode 100644 index 00000000..6c8d187a --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_1_79e18b696ed18c998cd2605cccbf3750._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2017-12-31T16:03:40Z" + content=""" +You'd update it by git merge with propellor upstream, since your ~/.propellor +in this case is forked from propellor's git repository, rather than the other +option of being a separate git repository that uses propellor as a library. + +I think there should be more to the message than what you showed, +explaining what you'd to do merge. + + warningMessage ("** Your ~/.propellor/ is out of date..") + let also s = hPutStrLn stderr (" " ++ s) + also ("A newer upstream version is available in " ++ distrepo) + if havebranch + then also ("To merge it, run: git merge " ++ upstreambranch) + else also ("To merge it, find the most recent commit in your repository's history that corresponds to an upstream release of propellor, and set refs/remotes/" ++ upstreambranch ++ " to it. Then run propellor again.") +"""]] diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_2_c8bfbc1eaa3565ed3e92a402c75b63dc._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_2_c8bfbc1eaa3565ed3e92a402c75b63dc._comment new file mode 100644 index 00000000..46028b1e --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_2_c8bfbc1eaa3565ed3e92a402c75b63dc._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="spwhitton" + avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb" + subject="comment 2" + date="2018-01-01T11:10:01Z" + content=""" +If you update by merging from Joey's repo but have the Debian propellor package installed you'll always get this because the bundle in `/usr/src/propellor` has a commit ID that is distinct from any of those in Joey's branch. + +I think it would be nice to have a git config option to disable the check for those of us in the situation I just described. +"""]] diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_3_ecd5b0d960f1eb92795c559736f92e25._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_3_ecd5b0d960f1eb92795c559736f92e25._comment new file mode 100644 index 00000000..a6a24f53 --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_3_ecd5b0d960f1eb92795c559736f92e25._comment @@ -0,0 +1,34 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="twice the warning" + date="2018-01-01T15:57:05Z" + content=""" +The warning is printed twice. + +One at the very beginning: + + stappers@paddy:~ + $ propellor paddy.gpm.stappers.nl + A newer upstream version is available in /usr/src/propellor/propellor.git + To merge it, run: git merge upstream/master + + [2018-01-01 16:42:54 CET] command line: Run \"paddy.gpm.stappers.nl\" + + +The other at the end of executing: + + loop deleted : /dev/loop0 + paddy.gpm.stappers.nl built disk image /srv/image/lime.img ... done + paddy.gpm.stappers.nl overall ... done + Shared connection to paddy.gpm.stappers.nl closed. + ** warning: ** Your ~/.propellor/ is out of date.. + stappers@paddy:~ + $ + +It was the last one that made me report this. +The one that is color highlighted, +the one that doesn't have the `git merge` advice. + +"""]] diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_4_93c97f8767a7ae3b9795aea051b0e77e._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_4_93c97f8767a7ae3b9795aea051b0e77e._comment new file mode 100644 index 00000000..73dd3fec --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_4_93c97f8767a7ae3b9795aea051b0e77e._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 4""" + date="2018-01-02T16:36:32Z" + content=""" +Ah I see, it was mixing concurrent output with unbuffered output, which in +this case caused the related messages to appear separated. Fixed that. +"""]] diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_5_af7919be09eb454b2dca235ede03008f._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_5_af7919be09eb454b2dca235ede03008f._comment new file mode 100644 index 00000000..157e7803 --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_5_af7919be09eb454b2dca235ede03008f._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 5""" + date="2018-01-02T17:08:07Z" + content=""" +@spwhitton ah, I had not noticed that case. I found a way to avoid the +unncessary warning in that case; since there's no upstream/master ref when +~/.propellor has not been cloned from the debian git bundle, it can detect +that and avoid warning. Done so. +"""]] diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_6_ee440c1ceab7875ad6375b38f4580f08._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_6_ee440c1ceab7875ad6375b38f4580f08._comment new file mode 100644 index 00000000..d867906e --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_6_ee440c1ceab7875ad6375b38f4580f08._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="spwhitton" + avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb" + subject="comment 6" + date="2018-01-03T14:46:48Z" + content=""" +Thanks for this fix! However, in my case I am going to have to do `git remote rename upstream joey` ;) +"""]] diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_7_f54ff51d2e413f0bbd534470b4b3b5a6._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_7_f54ff51d2e413f0bbd534470b4b3b5a6._comment new file mode 100644 index 00000000..5423db28 --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_7_f54ff51d2e413f0bbd534470b4b3b5a6._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 7""" + date="2018-01-04T18:49:14Z" + content=""" +@spwhitton, ah but in that case you have a remote named "upstream", so +it can assume you don't want it messing with upstream/master. Done! +"""]] diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_8_28c9fe9c8acef04998c885161748ad49._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_8_28c9fe9c8acef04998c885161748ad49._comment new file mode 100644 index 00000000..0317b488 --- /dev/null +++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_8_28c9fe9c8acef04998c885161748ad49._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="spwhitton" + avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb" + subject="comment 8" + date="2018-01-05T08:49:56Z" + content=""" +Sweet! Thanks again! +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_17_0c1349784ba28b6fbbd833e76d5075b3._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_17_0c1349784ba28b6fbbd833e76d5075b3._comment new file mode 100644 index 00000000..994d432c --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_17_0c1349784ba28b6fbbd833e76d5075b3._comment @@ -0,0 +1,24 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 17" + date="2018-01-05T17:57:40Z" + content=""" +As the config with Grub.EFI64 didn't boot, I'd like to be sure that Grub.MSDOS does not boot either. But GPT tables seem to need a BIOS Boot partition: + + creating /srv/router.img of size 1.67 gigabytes + mkfs.fat 4.1 (2017-01-24) + loop deleted : /dev/loop0 + 26,473,509 100% 206.69MB/s 0:00:00 (xfr#5, to-chk=0/7) + 772,611,350 99% 60.26MB/s 0:00:12 (xfr#26272, to-chk=0/33603) + update-initramfs: Generating /boot/initrd.img-4.9.0-5-amd64 + Generating grub configuration file ... + Found linux image: /boot/vmlinuz-4.9.0-5-amd64 + Found initrd image: /boot/initrd.img-4.9.0-5-amd64 + done + Installing for i386-pc platform. + grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible. + grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.. + grub-install: error: will not proceed with blocklists. + +"""]] diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_18_adea3a8a65cf954a5244bbb47a1636e4._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_18_adea3a8a65cf954a5244bbb47a1636e4._comment new file mode 100644 index 00000000..8a9a380e --- /dev/null +++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_18_adea3a8a65cf954a5244bbb47a1636e4._comment @@ -0,0 +1,26 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 18""" + date="2018-01-06T17:51:05Z" + content=""" +I don't know much about GPT boot stuff. I found mention of a BIOS boot +partition for GPT here: + +<https://help.ubuntu.com/community/DiskSpace> + +So, 1 mb partition with no filesystem and a "bios_grub" flag. + +Propellor's partitioning DSL will need to be extended in order to +support that. Currently, `Partition` has a `Fs` that is one of the common +filesystems or swap. Now we need no filesystem, so either add a NoFs to Fs, +or change it to use `Maybe Fs`. I chose the latter, because with NoFs, +Partition.formatted would be a no-op, which would be kinda surprising. + +I've made a commit adding all the stuff you should need, but I have not +tested making a BIOS boot partition with it. Should look +something like this: + + & hasPartition (rawPartition (MegaBytes 1) `setFlag` BiosGrubFlag) + +If you get it working, it would be good to add an example to propellor's docs. +"""]] diff --git a/doc/forum/secret-project_deliverable/comment_10_df12578135263d7e0a42415532cb04e3._comment b/doc/forum/secret-project_deliverable/comment_10_df12578135263d7e0a42415532cb04e3._comment new file mode 100644 index 00000000..a3d93892 --- /dev/null +++ b/doc/forum/secret-project_deliverable/comment_10_df12578135263d7e0a42415532cb04e3._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="unstuck" + date="2018-01-02T20:20:24Z" + content=""" +After removing the `.stack-work` directory I got beyond the Installer.Types error. + + +"""]] diff --git a/doc/forum/secret-project_deliverable/comment_11_9cbcee2364a499206d5329c5a88a1211._comment b/doc/forum/secret-project_deliverable/comment_11_9cbcee2364a499206d5329c5a88a1211._comment new file mode 100644 index 00000000..be3346e3 --- /dev/null +++ b/doc/forum/secret-project_deliverable/comment_11_9cbcee2364a499206d5329c5a88a1211._comment @@ -0,0 +1,73 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="two git repos and one /usr/local/propellor" + date="2018-01-02T20:43:54Z" + content=""" +Perhaps I don't understand the secret-project and its special buid with stack. + + +I have a git repo in `~/.propellor` and I have a git repo in `~/src/secret-project`. + + +In the ~/secret-project directory + + $ propellor + Pull from central git repository ... done + Copying from /home/stappers/src/secret-project/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin/propellor-config to /home/stappers/src/secret-project/.built/propellor-config + + Copied executables to /home/stappers/src/secret-project/.built: + - propellor-config + + Warning: Installation path /home/stappers/src/secret-project/.built + not found on the PATH environment variable. + Propellor build ... done + [master fb46460] propellor spin + Git commit ... done + error: Cannot access URL https://git.joeyh.name/git/secret-project.git/, return code 22 + fatal: git-http-push failed + error: failed to push some refs to 'https://git.joeyh.name/git/secret-project.git' + Push to central git repository ... failed + Pull from central git repository ... done + ** warning: git branch origin/master is not signed with a trusted gpg key; refusing to deploy it! (Running with previous configuration instead.) + Sending privdata (11 bytes) to paddy.gpm.stappers.nl ... done + remote: Counting objects: 6, done. + remote: Compressing objects: 100% (6/6), done. + remote: Total 6 (delta 4), reused 0 (delta 0) + Sending git update to paddy.gpm.stappers.nl ... done + From . + * branch HEAD -> FETCH_HEAD + fatal: refusing to merge unrelated histories + ** error: git merge from client failed + propellor: Cannot continue! + CallStack (from HasCallStack): + error, called at src/Propellor/Message.hs:143:9 in main:Propellor.Message + propellor: user error (ssh [\"-o\",\"ControlPath=/home/stappers/.ssh/propellor/paddy.gpm.stappers.nl.sock\", + \"-o\",\"ControlMaster=auto\", + \"-o\",\"ControlPersist=yes\", + \"root@paddy.gpm.stappers.nl\", + \"sh -c 'if [ ! -d /usr/local/propellor/.git ] ; + then (if ! git --version >/dev/null 2>&1; + then apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -qq --no-install-recommends --no-upgrade -y install git; + fi && echo STATUSNeedGitClone) || echo STATUSNeedPrecompiled ; + else cd /usr/local/propellor && if ! stack build --dry-run >/dev/null 2>&1; + then ( apt-get update ; + DEBIAN_FRONTEND=noninteractive apt-get -qq --no-upgrade --no-install-recommends -y install gnupg ; + DEBIAN_FRONTEND=noninteractive apt-get -qq --no-upgrade --no-install-recommends -y install haskell-stack ; + stack setup ; + stack build --only-dependencies :propellor-config) || true; + fi&& if ! test -x ./propellor; + then stack build :propellor-config && ln -sf $(stack path --dist-dir)/build/propellor-config/propellor-config propellor; + fi; + if test -x ./propellor && ! ./propellor --check; + then stack clean && stack build :propellor-config && ln -sf $(stack path --dist-dir)/build/propellor-config/propellor-config propellor; + fi && ./propellor --boot paddy.gpm.stappers.nl ; + fi'\"] exited 1) + stappers@paddy:~/src/secret-project + $ + + +The `/usr/local/propellor/` has already a .git directory from ~/.propellor ... + +"""]] diff --git a/doc/forum/secret-project_deliverable/comment_12_edebbe9056d9dad486c24f3ce226366c._comment b/doc/forum/secret-project_deliverable/comment_12_edebbe9056d9dad486c24f3ce226366c._comment new file mode 100644 index 00000000..43f2dff5 --- /dev/null +++ b/doc/forum/secret-project_deliverable/comment_12_edebbe9056d9dad486c24f3ce226366c._comment @@ -0,0 +1,15 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="buid should be build" + date="2018-01-02T20:46:53Z" + content=""" +The + + special buid with stack + +in previous comment should have been + + special build with stack +"""]] diff --git a/doc/forum/secret-project_deliverable/comment_13_bdb28cfa4990d60f6767fd857a7398d5._comment b/doc/forum/secret-project_deliverable/comment_13_bdb28cfa4990d60f6767fd857a7398d5._comment new file mode 100644 index 00000000..e7a110bc --- /dev/null +++ b/doc/forum/secret-project_deliverable/comment_13_bdb28cfa4990d60f6767fd857a7398d5._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 13""" + date="2018-01-02T21:21:49Z" + content=""" +Yes, I also found it kind of annoying to need to move /usr/local/propellor +out of the way when I was working on secret-project. This is why I'd like +it to be usable without propellor --spin so that directory would not be +used, but until the bug with that can be fixed, you can't work on +secret-project with an unrelated other propellor config at the same time. +"""]] diff --git a/doc/forum/secret-project_deliverable/comment_8_30bc5e081916688468e750de6c95aebf._comment b/doc/forum/secret-project_deliverable/comment_8_30bc5e081916688468e750de6c95aebf._comment new file mode 100644 index 00000000..401cd6a9 --- /dev/null +++ b/doc/forum/secret-project_deliverable/comment_8_30bc5e081916688468e750de6c95aebf._comment @@ -0,0 +1,36 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="Happy New Year" + date="2018-01-01T14:51:59Z" + content=""" + stappers@paddy:~/src/secret-project + $ git config propellor.buildsystem stack + stappers@paddy:~/src/secret-project + $ propellor --spin paddy.gpm.stappers.nl + Building all executables for `secret-project' once. After a successful build of all of them, only specified executables will be rebuilt. + secret-project-0.0: build (exe) + Preprocessing executable 'propellor-config' for secret-project-0.0... + [1 of 9] Compiling Installer.Types ( Installer/Types.hs, .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/propellor-config/propellor-config-tmp/Installer/Types.o ) + + /home/stappers/src/secret-project/Installer/Types.hs:3:1: error: + Failed to load interface for ‘Propellor.Property.Installer.Types’ + There are files missing in the ‘propellor-5.2.0’ package, + try running 'ghc-pkg check'. + Use -v to see a list of the files searched for. + + -- While building custom Setup.hs for package secret-project-0.0 using: + /home/stappers/.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 + Propellor build ... failed + ** error: Propellor build failed! + propellor: Cannot continue! + CallStack (from HasCallStack): + error, called at src/Propellor/Message.hs:143:9 in main:Propellor.Message + stappers@paddy:~/src/secret-project + $ + +"""]] diff --git a/doc/forum/secret-project_deliverable/comment_9_4a6e1a53f5bf5b72aaafba3a7dd45346._comment b/doc/forum/secret-project_deliverable/comment_9_4a6e1a53f5bf5b72aaafba3a7dd45346._comment new file mode 100644 index 00000000..c9f45ac3 --- /dev/null +++ b/doc/forum/secret-project_deliverable/comment_9_4a6e1a53f5bf5b72aaafba3a7dd45346._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 9""" + date="2018-01-02T17:14:23Z" + content=""" +Since propellor 5.2.0 certianly *does* include the Propellor.Property.Installer.Types +module, I guess you either have a somehow lost file on your local system +there, or perhaps you installed a unreleased version of propellor 5.2.0 +from git before that file was added to it. +"""]] diff --git a/doc/forum/to_teach_propellor_about_other_ARM_boards.mdwn b/doc/forum/to_teach_propellor_about_other_ARM_boards.mdwn new file mode 100644 index 00000000..aef3c59f --- /dev/null +++ b/doc/forum/to_teach_propellor_about_other_ARM_boards.mdwn @@ -0,0 +1,33 @@ +Inspirated by <http://joeyh.name/blog/entry/custom_ARM_disk_image_generation_with_propellor/> +I started to teach propellor about other ARM boards. +(After having a clean build for a supported ARM board) + + +Using two directories, a `~/.propellor` with my hosts and `src/propellor` with propellor source code. + +In the code directory I modified `src/Propellor/Property/Machine.hs`, +compiled with `debuild -uc -us` and installed with `dpkg -i ../propellor*.deb`. + +Then using my hosts directory to get a WTF moment + + $ propellor --spin paddy.gpm.stappers.nl + Auto-merging src/Propellor/Property/Machine.hs + Auto-merging propellor.cabal + Auto-merging debian/changelog + Auto-merging config.hs + CONFLICT (add/add): Merge conflict in config.hs + Automatic merge failed; fix conflicts and then commit the result. + propellor: Failed to run git ["merge","279b9267952b598914037983f74606d4f9c4ff6e","-s", + "recursive","-Xtheirs","--quiet","-m","merging upstream version" + ,"--allow-unrelated-histories"] + CallStack (from HasCallStack): + error, called at src/Propellor/DotDir.hs:425:17 in main:Propellor.DotDir + + +What did connect both directories and why? + + +More important: + +What directory setup and workflow to use +to teach propellor about other ARM boards? diff --git a/doc/forum/to_teach_propellor_about_other_ARM_boards/comment_1_70f9d9442616144d6f862c81516e721b._comment b/doc/forum/to_teach_propellor_about_other_ARM_boards/comment_1_70f9d9442616144d6f862c81516e721b._comment new file mode 100644 index 00000000..e1a7ee2c --- /dev/null +++ b/doc/forum/to_teach_propellor_about_other_ARM_boards/comment_1_70f9d9442616144d6f862c81516e721b._comment @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="stappers@eb96885816da287c29f6f699999434d532149234" + nickname="stappers" + avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65" + subject="Progress" + date="2018-01-02T14:19:53Z" + content=""" +Hi, + +FYI I'm making progress in teaching propellor about other ARM boards. + +What I have done is deleting `~/.propellor/` and creating a new one. + +The new one is a full .propellor repository. + + +See also <http://propellor.branchable.com/components/> +"""]] diff --git a/doc/todo/etckeeper/comment_4_f4f9f3e3d7c81e631aaec45fdd17dfe8._comment b/doc/todo/etckeeper/comment_4_f4f9f3e3d7c81e631aaec45fdd17dfe8._comment new file mode 100644 index 00000000..e6755e2c --- /dev/null +++ b/doc/todo/etckeeper/comment_4_f4f9f3e3d7c81e631aaec45fdd17dfe8._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="gueux" + avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8" + subject="comment 4" + date="2018-01-06T09:24:04Z" + content=""" +I think I was thinking at least about configuring git to prevent + + Your name and email address were configured automatically based + on your username and hostname. Please check that they are accurate. + You can suppress this message by setting them explicitly. Run the + following command and follow the instructions in your editor to edit + your configuration file: + git config --global --edit + After doing this, you may fix the identity used for this commit with: + git commit --amend --reset-author + +messages. I can live with these, though. So I guess you're right, `Apt.installed [\"etckeeper\"]` is enough. +"""]] diff --git a/doc/todo/etckeeper/comment_5_af3b29e3e066c05e4b5a0004f0e57926._comment b/doc/todo/etckeeper/comment_5_af3b29e3e066c05e4b5a0004f0e57926._comment new file mode 100644 index 00000000..11e59e2c --- /dev/null +++ b/doc/todo/etckeeper/comment_5_af3b29e3e066c05e4b5a0004f0e57926._comment @@ -0,0 +1,18 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 5""" + date="2018-01-06T17:38:34Z" + content=""" +I avoid those warnings with properties that clone dotfiles repos containing +.gitconfig for root and users who can sudo. + +It would be fine to have a property to configure them in +/etckeeper/.git/config, if you wanted to write it. +I think this would do it: + + Git.repoConfigured "/etc/" ("user.name", "whatever") + Git.repoConfigured "/etc/" ("user.email", "whatever@whatever") + +Those would only be used when the user running etckeeper has not configured +it in their own ~/.gitconfig +"""]] 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/DotDir.hs b/src/Propellor/DotDir.hs index e9253b87..f62b38f8 100644 --- a/src/Propellor/DotDir.hs +++ b/src/Propellor/DotDir.hs @@ -358,7 +358,7 @@ checkRepoUpToDate = whenM (gitbundleavail <&&> dotpropellorpopulated) $ do withQuietOutput createProcessSuccess $ proc "git" ["log", headrev] if (headknown == Nothing) - then setupUpstreamMaster headrev + then updateUpstreamMaster headrev else do theirhead <- getCurrentGitSha1 =<< getCurrentBranchRef when (theirhead /= headrev) $ do @@ -372,26 +372,30 @@ checkRepoUpToDate = whenM (gitbundleavail <&&> dotpropellorpopulated) $ do d <- dotPropellor doesFileExist (d </> "propellor.cabal") --- Makes upstream/master in dotPropellor be a usefully mergeable branch. +-- Updates upstream/master in dotPropellor so merging from it will update +-- to the latest distrepo. -- --- We cannot just use origin/master, because in the case of a distrepo, --- it only contains 1 commit. So, trying to merge with it will result --- in lots of merge conflicts, since git cannot find a common parent --- commit. +-- We cannot just fetch the distrepo because the distrepo contains only +-- 1 commit. So, trying to merge with it will result in lots of merge +-- conflicts, since git cannot find a common parent commit. -- --- Instead, the upstream/master branch is created by taking the --- upstream/master branch (which must be an old version of propellor, +-- Instead, the new upstream/master branch is updated by taking the +-- current upstream/master branch (which must be an old version of propellor, -- as distributed), and diffing from it to the current origin/master, -- and committing the result. This is done in a temporary clone of the -- repository, giving it a new master branch. That new branch is fetched -- into the user's repository, as if fetching from a upstream remote, -- yielding a new upstream/master branch. -setupUpstreamMaster :: String -> IO () -setupUpstreamMaster newref = do +-- +-- If there's no upstream/master, the user is not using the distrepo, +-- so do nothing. And, if there's a remote named "upstream", the user +-- must have set that up is not using the distrepo, so do nothing. +updateUpstreamMaster :: String -> IO () +updateUpstreamMaster newref = unlessM (hasRemote "upstream") $ do changeWorkingDirectory =<< dotPropellor go =<< catchMaybeIO getoldrev where - go Nothing = warnoutofdate False + go Nothing = return () go (Just oldref) = do let tmprepo = ".git/propellordisttmp" let cleantmprepo = void $ catchMaybeIO $ removeDirectoryRecursive tmprepo diff --git a/src/Propellor/Git.hs b/src/Propellor/Git.hs index 1d81c157..10b88ddd 100644 --- a/src/Propellor/Git.hs +++ b/src/Propellor/Git.hs @@ -23,9 +23,12 @@ getCurrentGitSha1 branchref = takeWhile (/= '\n') <$> readProcess "git" ["show-ref", "--hash", branchref] hasOrigin :: IO Bool -hasOrigin = catchDefaultIO False $ do +hasOrigin = hasRemote "origin" + +hasRemote :: String -> IO Bool +hasRemote remotename = catchDefaultIO False $ do rs <- lines <$> readProcess "git" ["remote"] - return $ "origin" `elem` rs + return $ remotename `elem` rs hasGitRepo :: IO Bool hasGitRepo = doesFileExist ".git/HEAD" diff --git a/src/Propellor/Property/DiskImage.hs b/src/Propellor/Property/DiskImage.hs index 24459476..289de151 100644 --- a/src/Propellor/Property/DiskImage.hs +++ b/src/Propellor/Property/DiskImage.hs @@ -420,7 +420,7 @@ imageFinalized final img mnts mntopts devs (PartTable _ _ parts) = orderedmntsdevs = sortBy (compare `on` fst) $ zip mnts (zip mntopts devs) swaps = map (SwapPartition . partitionLoopDev . snd) $ - filter ((== LinuxSwap) . partFs . fst) $ + filter ((== Just LinuxSwap) . partFs . fst) $ zip parts devs mountall top = forM_ orderedmntsdevs $ \(mp, (mopts, loopdev)) -> case mp of diff --git a/src/Propellor/Property/DiskImage/PartSpec.hs b/src/Propellor/Property/DiskImage/PartSpec.hs index 942cfa3e..b78e4280 100644 --- a/src/Propellor/Property/DiskImage/PartSpec.hs +++ b/src/Propellor/Property/DiskImage/PartSpec.hs @@ -9,6 +9,7 @@ module Propellor.Property.DiskImage.PartSpec ( partition, -- * PartSpec combinators swapPartition, + rawPartition, mountedAt, addFreeSpace, setSize, @@ -48,11 +49,15 @@ import Data.Ord -- The partition is not mounted anywhere by default; use the combinators -- below to configure it. partition :: Monoid t => Fs -> PartSpec t -partition fs = (Nothing, mempty, mkPartition fs, mempty) +partition fs = (Nothing, mempty, mkPartition (Just fs), mempty) -- | Specifies a swap partition of a given size. swapPartition :: Monoid t => PartSize -> PartSpec t -swapPartition sz = (Nothing, mempty, const (mkPartition LinuxSwap sz), mempty) +swapPartition sz = (Nothing, mempty, const (mkPartition (Just LinuxSwap) sz), mempty) + +-- | Specifies a partition without any filesystem, of a given size. +rawPartition :: Monoid t => PartSize -> PartSpec t +rawPartition sz = (Nothing, mempty, const (mkPartition Nothing sz), mempty) -- | Specifies where to mount a partition. mountedAt :: PartSpec t -> MountPoint -> PartSpec t diff --git a/src/Propellor/Property/Installer/Target.hs b/src/Propellor/Property/Installer/Target.hs index 62ec4082..80e660ad 100644 --- a/src/Propellor/Property/Installer/Target.hs +++ b/src/Propellor/Property/Installer/Target.hs @@ -246,10 +246,10 @@ fstabLists userinput (TargetPartTable _ partspecs) = setup <!> doNothing partitions = map (\(mp, _, mkpart, _) -> (mp, mkpart mempty)) partspecs mnts = mapMaybe fst $ - filter (\(_, p) -> partFs p /= LinuxSwap) partitions + filter (\(_, p) -> partFs p /= Just LinuxSwap && partFs p /= Nothing) partitions swaps targetdev = map (Fstab.SwapPartition . diskPartition targetdev . snd) $ - filter (\((_, p), _) -> partFs p == LinuxSwap) + filter (\((_, p), _) -> partFs p == Just LinuxSwap) (zip partitions partNums) -- | Make the target bootable using whatever bootloader is installed on it. diff --git a/src/Propellor/Property/Parted.hs b/src/Propellor/Property/Parted.hs index 97cf815e..81b84972 100644 --- a/src/Propellor/Property/Parted.hs +++ b/src/Propellor/Property/Parted.hs @@ -62,8 +62,10 @@ partitioned eep disk parttable@(PartTable _ _ parts) = property' desc $ \w -> do where desc = disk ++ " partitioned" formatl devs = combineProperties desc (toProps $ map format (zip parts devs)) - format (p, dev) = Partition.formatted' (partMkFsOpts p) - Partition.YesReallyFormatPartition (partFs p) dev + format (p, dev) = case partFs p of + Just fs -> Partition.formatted' (partMkFsOpts p) + Partition.YesReallyFormatPartition fs dev + Nothing -> doNothing -- | Gets the total size of the disk specified by the partition table. partTableSize :: PartTable -> ByteSize @@ -81,12 +83,12 @@ calcPartedParamsSize (PartTable tabletype alignment parts) = , pval f , pval b ] - mkpart partnum startpos endpos p = - [ "mkpart" - , pval (partType p) - , pval (partFs p) - , partposexact startpos - , partposfuzzy endpos + mkpart partnum startpos endpos p = catMaybes + [ Just "mkpart" + , Just $ pval (partType p) + , fmap pval (partFs p) + , Just $ partposexact startpos + , Just $ partposfuzzy endpos ] ++ case partName p of Just n -> ["name", show partnum, n] Nothing -> [] diff --git a/src/Propellor/Property/Parted/Types.hs b/src/Propellor/Property/Parted/Types.hs index e5c62739..cfd8760d 100644 --- a/src/Propellor/Property/Parted/Types.hs +++ b/src/Propellor/Property/Parted/Types.hs @@ -31,7 +31,7 @@ instance Monoid PartTable where data Partition = Partition { partType :: PartType , partSize :: PartSize - , partFs :: Partition.Fs + , partFs :: Maybe Partition.Fs , partMkFsOpts :: Partition.MkfsOpts , partFlags :: [(PartFlag, Bool)] -- ^ flags can be set or unset (parted may set some flags by default) , partName :: Maybe String -- ^ optional name for partition (only works for GPT, PC98, MAC) @@ -39,7 +39,7 @@ data Partition = Partition deriving (Show) -- | Makes a Partition with defaults for non-important values. -mkPartition :: Partition.Fs -> PartSize -> Partition +mkPartition :: Maybe Partition.Fs -> PartSize -> Partition mkPartition fs sz = Partition { partType = Primary , partSize = sz @@ -105,7 +105,7 @@ fromAlignment :: Alignment -> ByteSize fromAlignment (Alignment n) = n -- | Flags that can be set on a partition. -data PartFlag = BootFlag | RootFlag | SwapFlag | HiddenFlag | RaidFlag | LvmFlag | LbaFlag | LegacyBootFlag | IrstFlag | EspFlag | PaloFlag +data PartFlag = BootFlag | RootFlag | SwapFlag | HiddenFlag | RaidFlag | LvmFlag | LbaFlag | LegacyBootFlag | IrstFlag | EspFlag | PaloFlag | BiosGrubFlag deriving (Show) instance PartedVal PartFlag where @@ -120,6 +120,7 @@ instance PartedVal PartFlag where pval IrstFlag = "irst" pval EspFlag = "esp" pval PaloFlag = "palo" + pval BiosGrubFlag = "bios_grub" instance PartedVal Bool where pval True = "on" |
