|
| 1 | +#!/bin/bash |
| 2 | +# |
| 3 | +# Copyright (C) 2019 Robert Fairley <rfairley@redhat.com> |
| 4 | +# |
| 5 | +# SPDX-License-Identifier: LGPL-2.0+ |
| 6 | +# |
| 7 | +# This library is free software; you can redistribute it and/or |
| 8 | +# modify it under the terms of the GNU Lesser General Public |
| 9 | +# License as published by the Free Software Foundation; either |
| 10 | +# version 2 of the License, or (at your option) any later version. |
| 11 | +# |
| 12 | +# This library is distributed in the hope that it will be useful, |
| 13 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 15 | +# Lesser General Public License for more details. |
| 16 | +# |
| 17 | +# You should have received a copy of the GNU Lesser General Public |
| 18 | +# License along with this library; if not, write to the |
| 19 | +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
| 20 | +# Boston, MA 02111-1307, USA. |
| 21 | + |
| 22 | +set -euo pipefail |
| 23 | + |
| 24 | +. $(dirname $0)/libtest.sh |
| 25 | + |
| 26 | +# Exports OSTREE_SYSROOT so --sysroot not needed. |
| 27 | +setup_os_repository "archive" "syslinux" |
| 28 | + |
| 29 | +echo "1..7" |
| 30 | + |
| 31 | +${CMD_PREFIX} ostree --repo=sysroot/ostree/repo pull-local --remote=testos testos-repo testos/buildmaster/x86_64-runtime |
| 32 | + |
| 33 | +${CMD_PREFIX} ostree admin deploy --os=testos testos:testos/buildmaster/x86_64-runtime |
| 34 | +assert_has_dir sysroot/boot/ostree/testos-${bootcsum} |
| 35 | +# Check we generate kargs from the kargs.d configs from the first deployment. |
| 36 | +assert_file_has_content sysroot/boot/loader/entries/ostree-1-testos.conf 'ostree-kargs-generated-from-config.*true' |
| 37 | +assert_file_has_content sysroot/boot/loader/entries/ostree-1-testos.conf 'ostree.*options.*generated from.*kargs\.d' |
| 38 | + |
| 39 | +initial_rev=$(${CMD_PREFIX} ostree --repo=sysroot/ostree/repo rev-parse testos/buildmaster/x86_64-runtime) |
| 40 | +echo "initial_rev=${initial_rev}" |
| 41 | + |
| 42 | +# Configure kargs stored in the ostree commit. |
| 43 | +mkdir -p osdata/usr/lib/ostree-boot/kargs.d |
| 44 | +os_tree_write_file "usr/lib/ostree-boot/kargs.d/4000_FOO" "FOO=USR_1" |
| 45 | +os_tree_write_file "usr/lib/ostree-boot/kargs.d/4001_FOO2" "FOO2=USR_2" |
| 46 | +os_repository_commit "testos-repo" |
| 47 | + |
| 48 | +# Upgrade to tree with newly-committed kargs files. |
| 49 | +${CMD_PREFIX} ostree --repo=sysroot/ostree/repo remote add --set=gpg-verify=false testos file://$(pwd)/testos-repo testos/buildmaster/x86_64-runtime |
| 50 | +${CMD_PREFIX} ostree admin upgrade --os=testos |
| 51 | +# Sanity check a new boot directory was created after upgrading. |
| 52 | +assert_has_dir sysroot/boot/ostree/testos-${bootcsum} |
| 53 | + |
| 54 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'options.*FOO=USR_1.*FOO2=USR_2' |
| 55 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree-kargs-generated-from-config.*true' |
| 56 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree.*options.*generated from.*kargs\.d' |
| 57 | + |
| 58 | +echo "ok default kargs base config" |
| 59 | + |
| 60 | +# Configure kargs stored in the default configuration (/usr/etc). |
| 61 | +mkdir -p osdata/usr/etc/ostree/kargs.d |
| 62 | +os_tree_write_file "usr/etc/ostree/kargs.d/8000_MOO" "MOO=ETC_USR_1" |
| 63 | +os_tree_write_file "usr/etc/ostree/kargs.d/8001_MOO2" "MOO2=ETC_USR_2" |
| 64 | +os_repository_commit "testos-repo" |
| 65 | + |
| 66 | +${CMD_PREFIX} ostree admin upgrade --os=testos |
| 67 | +assert_has_dir sysroot/boot/ostree/testos-${bootcsum} |
| 68 | + |
| 69 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'options.*FOO=USR_1.*FOO2=USR_2.*MOO=ETC_USR_1.*MOO2=ETC_USR_2' |
| 70 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree-kargs-generated-from-config.*true' |
| 71 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree.*options.*generated from.*kargs\.d' |
| 72 | + |
| 73 | +echo "ok default kargs default config" |
| 74 | + |
| 75 | +# Configure kargs through the host config file. |
| 76 | +rev=$(${CMD_PREFIX} ostree --repo=sysroot/ostree/repo rev-parse testos/buildmaster/x86_64-runtime) |
| 77 | +echo "rev=${rev}" |
| 78 | +etc=sysroot/ostree/deploy/testos/deploy/${rev}.0/etc |
| 79 | +assert_has_dir ${etc} |
| 80 | +mkdir -p ${etc}/ostree/kargs.d |
| 81 | +# Configure a new karg (append). |
| 82 | +echo "HELLO=ETC_1" > ${etc}/ostree/kargs.d/2000_HELLO |
| 83 | +# Overwrite existing karg from /usr/etc/ostree/kargs.d (replace). |
| 84 | +echo "MOO=ETC_2" > ${etc}/ostree/kargs.d/8000_MOO |
| 85 | +# Overwrite existing karg from /usr/lib/ostree-boot/kargs.d (replace). |
| 86 | +echo "FOO=ETC_3" > ${etc}/ostree/kargs.d/4000_FOO |
| 87 | + |
| 88 | +# Re-deploy with host-configured kernel args. |
| 89 | +${CMD_PREFIX} ostree admin deploy --os=testos testos:testos/buildmaster/x86_64-runtime |
| 90 | + |
| 91 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'options.*HELLO=ETC_1.*FOO=ETC_3.*FOO2=USR_2.*MOO=ETC_2.*MOO2=ETC_USR_2' |
| 92 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'MOO=ETC_USR_1' |
| 93 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'FOO=USR_1' |
| 94 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree-kargs-generated-from-config.*true' |
| 95 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree.*options.*generated from.*kargs\.d' |
| 96 | + |
| 97 | +echo "ok default kargs host config" |
| 98 | + |
| 99 | +rev=$(${CMD_PREFIX} ostree --repo=sysroot/ostree/repo rev-parse testos/buildmaster/x86_64-runtime) |
| 100 | +echo "rev=${rev}" |
| 101 | +etc=sysroot/ostree/deploy/testos/deploy/${rev}.1/etc |
| 102 | +mkdir -p ${etc}/ostree/kargs.d |
| 103 | +# Clear base kargs by writing an empty file which overrides them (delete). |
| 104 | +echo "" > ${etc}/ostree/kargs.d/8000_MOO |
| 105 | +echo "" > ${etc}/ostree/kargs.d/4000_FOO |
| 106 | + |
| 107 | +${CMD_PREFIX} ostree admin deploy --os=testos testos:testos/buildmaster/x86_64-runtime |
| 108 | + |
| 109 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'options.*HELLO=ETC_1.*FOO2=USR_2.*MOO2=ETC_USR_2' |
| 110 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'MOO\>' |
| 111 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'FOO\>' |
| 112 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree-kargs-generated-from-config.*true' |
| 113 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree.*options.*generated from.*kargs\.d' |
| 114 | + |
| 115 | +echo "ok default kargs delete empty file" |
| 116 | + |
| 117 | +rev=$(${CMD_PREFIX} ostree --repo=sysroot/ostree/repo rev-parse testos/buildmaster/x86_64-runtime) |
| 118 | +echo "rev=${rev}" |
| 119 | +etc=sysroot/ostree/deploy/testos/deploy/${rev}.2/etc |
| 120 | +mkdir -p ${etc}/ostree/kargs.d |
| 121 | +rm ${etc}/ostree/kargs.d/8000_MOO |
| 122 | +rm ${etc}/ostree/kargs.d/4000_FOO |
| 123 | +# Clear base kargs by symlinking to /dev/null. |
| 124 | +ln -s /dev/null ${etc}/ostree/kargs.d/8000_MOO |
| 125 | +ln -s /dev/null ${etc}/ostree/kargs.d/4000_FOO |
| 126 | + |
| 127 | +${CMD_PREFIX} ostree admin deploy --os=testos testos:testos/buildmaster/x86_64-runtime |
| 128 | + |
| 129 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'options.*HELLO=ETC_1.*FOO2=USR_2.*MOO2=ETC_USR_2' |
| 130 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'MOO\>' |
| 131 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'FOO\>' |
| 132 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree-kargs-generated-from-config.*true' |
| 133 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree.*options.*generated from.*kargs\.d' |
| 134 | + |
| 135 | +echo "ok default kargs delete /dev/null" |
| 136 | + |
| 137 | +${CMD_PREFIX} ostree admin upgrade --os=testos --allow-downgrade --override-commit=${initial_rev} |
| 138 | + |
| 139 | +# Only the config in /etc/ostree/kargs.d remains. |
| 140 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'options.*HELLO=ETC_1' |
| 141 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'MOO=ETC_USR_1' |
| 142 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'MOO2=ETC_USR_2' |
| 143 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'FOO=USR_1' |
| 144 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'FOO2=USR_2' |
| 145 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree-kargs-generated-from-config.*true' |
| 146 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree.*options.*generated from.*kargs\.d' |
| 147 | + |
| 148 | +echo "ok default kargs downgrade" |
| 149 | + |
| 150 | +${CMD_PREFIX} ostree admin deploy --os=testos --karg-append=TESTARG=TESTVALUE testos:testos/buildmaster/x86_64-runtime |
| 151 | + |
| 152 | +# Check we carry over previous deployment kargs, after passing in a kargs |
| 153 | +# override. |
| 154 | +assert_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'options.*HELLO=ETC_1.*TESTARG=TESTVALUE' |
| 155 | +# Check we won't regenerate from the config again. |
| 156 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree-kargs-generated-from-config.*true' |
| 157 | +assert_not_file_has_content sysroot/boot/loader/entries/ostree-2-testos.conf 'ostree.*options.*generated from.*kargs\.d' |
| 158 | + |
| 159 | +echo "ok default kargs overridden" |
0 commit comments