2017-05-17 21:52:24 +03:00
#!/bin/bash
set -xeuo pipefail
dn = $( cd $( dirname $0 ) && pwd )
. ${ dn } /libcomposetest.sh
prepare_compose_test "misc-tweaks"
2019-07-14 21:09:41 +03:00
# No docs, also test multi includes
cat >composedata/documentation.yaml <<'EOF'
documentation: false
EOF
cat > composedata/recommends.yaml <<'EOF'
recommends: false
EOF
pysetjsonmember "include" '["documentation.yaml", "recommends.yaml"]'
2018-06-25 23:22:02 +03:00
# Note this overrides:
# $ rpm -q systemd
# systemd-238-8.git0e0aa59.fc28.x86_64
# $ rpm -qlv systemd|grep -F 'system/default.target '
# lrwxrwxrwx 1 root root 16 May 11 06:59 /usr/lib/systemd/system/default.target -> graphical.target
2017-05-17 21:52:24 +03:00
pysetjsonmember "default_target" '"multi-user.target"'
pysetjsonmember "units" '["tuned.service"]'
# And test adding/removing files
2017-09-28 04:48:52 +03:00
pysetjsonmember "add-files" ' [ [ "foo.txt" , "/usr/etc/foo.txt" ] ,
[ "baz.txt" , "/usr/share/baz.txt" ] ,
[ "bar.txt" , "/etc/bar.txt" ] ] '
2017-09-18 18:10:52 +03:00
pysetjsonmember "postprocess-script" \" $PWD /postprocess.sh\"
2018-09-05 17:53:03 +03:00
pysetjsonmember "postprocess" ' [ "" " #!/bin/bash
touch /usr/share/postprocess-testing"" " ,
"" " #!/bin/bash
2018-10-03 21:59:58 +03:00
set -xeuo pipefail
touch /usr/share/included-postprocess-test
2018-09-05 17:53:03 +03:00
rm /usr/share/postprocess-testing
touch /usr/share/postprocess-testing-done"" " ]'
2017-09-18 18:10:52 +03:00
cat > postprocess.sh << EOF
#!/bin/bash
set -xeuo pipefail
2018-09-05 17:53:03 +03:00
# Ordering should be after postprocess
rm /usr/share/postprocess-testing-done
2017-09-18 18:10:52 +03:00
echo misc-tweaks-postprocess-done > /usr/share/misc-tweaks-postprocess-done.txt
cp -a /usr/etc/foo.txt /usr/share/misc-tweaks-foo.txt
EOF
chmod a+x postprocess.sh
2017-05-17 21:52:24 +03:00
pysetjsonmember "remove-files" '["etc/hosts"]'
pysetjsonmember "remove-from-packages" '[["setup", "/etc/hosts\..*"]]'
rnd = $RANDOM
echo $rnd > composedata/foo.txt
2017-09-28 04:48:52 +03:00
echo bar > composedata/bar.txt
echo baz > composedata/baz.txt
compose: Add `tmp-is-dir` option to make `/tmp` a directory
There are a few reasons to do this. First, systemd changed to refuse mounts on
symlinks, and hence if one *wants* "/tmp-on-tmpfs", one would need to write a
different `sysroot-tmp.mount` unit.
Second, the original rationale for having this symlink was that if you had
multiple ostree stateroots ("osnames"), it's nicer if they had the same `/tmp`
to avoid duplication. But in practice today that's already an issue due to
`/var/tmp`, and further the multiple-stateroot case is pretty unusual. And that
case is *further* broken by SELinux (if one wanted to have e.g. an Ubuntu and
Fedora) stateroots. So let's fully decouple this and make `/tmp` a plain
old directory by default, so systemd's `tmp.mount` can become useful.
Now, things get interesting for the case where someone wants a physical `/tmp`
that *does* persist across reboots. Right now, if one just did a `systemctl mask
tmp.mount` as we do in Fedora Atomic Host's cloud images, you'd get a semantic
where `/tmp` stays per-deployment, which is weird. Our recommendation for
that should likely be to set up a bind mount for `/tmp` → `/var/tmp`.
For now, this stays an option to ensure compatibility; if FAH Cloud images
want to stay with "physical /tmp", then we'd have to change the kickstart.
Closes: https://github.com/projectatomic/rpm-ostree/issues/669
Closes: #778
Approved by: jlebon
2017-05-17 21:48:48 +03:00
# Test tmp-is-dir
pysetjsonmember "tmp-is-dir" 'True'
2017-05-17 21:52:24 +03:00
2018-10-03 21:59:58 +03:00
new_treefile = composedata/fedora-misc-tweaks-includer.yaml
cat > ${ new_treefile } <<EOF
include: $( basename ${ treefile } )
postprocess:
- |
#!/bin/bash
set -xeuo pipefail
test -f /usr/share/included-postprocess-test
EOF
2019-05-07 15:20:56 +03:00
for x in $( seq 3) ; do
rm tmp/usr -rf
mkdir -p tmp/usr/{ bin,share}
mkdir tmp/usr/share/testsubdir-${ x }
echo sometest${ x } > tmp/usr/bin/sometestbinary-${ x }
chmod a+x tmp/usr/bin/sometestbinary-${ x }
echo sometestdata${ x } > tmp/usr/share/sometestdata-${ x }
echo sometestdata-subdir-${ x } > tmp/usr/share/testsubdir-${ x } /test
ostree --repo= " ${ repobuild } " commit --consume --no-xattrs --owner-uid= 0 --owner-gid= 0 -b testlayer-${ x } --tree= dir = tmp
done
rm tmp/usr -rf
mkdir -p tmp/usr/{ share/info,bin}
echo sweet new ls binary > tmp/usr/bin/ls
ostree --repo= " ${ repobuild } " commit --consume --no-xattrs --owner-uid= 0 --owner-gid= 0 -b testoverride-1 --tree= dir = tmp
cat >> ${ new_treefile } <<EOF
ostree-layers:
- testlayer-1
- testlayer-2
- testlayer-3
ostree-override-layers:
- testoverride-1
EOF
2018-10-03 21:59:58 +03:00
export treefile = ${ new_treefile }
2017-05-17 21:52:24 +03:00
# Do the compose
2019-05-07 15:20:56 +03:00
compose_base_argv = " ${ compose_base_argv } --unified-core "
2017-05-17 21:52:24 +03:00
runcompose
echo "ok compose"
# Tests for nodocs
ostree --repo= ${ repobuild } ls -R ${ treeref } /usr/share/man > manpages.txt
assert_not_file_has_content manpages.txt man5/ostree.repo.5
echo "ok no manpages"
# Tests for units
ostree --repo= ${ repobuild } ls ${ treeref } \
2018-06-25 23:22:02 +03:00
/usr/lib/systemd/system/default.target > out.txt
assert_file_has_content out.txt '-> .*multi-user\.target'
2017-05-17 21:52:24 +03:00
echo "ok default target"
ostree --repo= ${ repobuild } ls ${ treeref } \
/usr/etc/systemd/system/multi-user.target.wants > out.txt
assert_file_has_content out.txt '-> .*/tuned.service'
echo "ok enable units"
# Tests for files
ostree --repo= ${ repobuild } cat ${ treeref } /usr/etc/foo.txt > out.txt
assert_file_has_content out.txt $rnd
2017-09-28 04:48:52 +03:00
ostree --repo= ${ repobuild } cat ${ treeref } /usr/etc/bar.txt > out.txt
assert_file_has_content out.txt bar
ostree --repo= ${ repobuild } cat ${ treeref } /usr/share/baz.txt > out.txt
assert_file_has_content out.txt baz
2017-09-18 18:10:52 +03:00
# https://github.com/projectatomic/rpm-ostree/pull/997
ostree --repo= ${ repobuild } cat ${ treeref } /usr/share/misc-tweaks-foo.txt > out.txt
assert_file_has_content out.txt $rnd
2017-05-17 21:52:24 +03:00
echo "ok add-files"
ostree --repo= ${ repobuild } ls ${ treeref } /usr/etc > out.txt
assert_not_file_has_content out.txt '/usr/etc/hosts$'
echo "ok remove-files"
ostree --repo= ${ repobuild } ls ${ treeref } /usr/etc > out.txt
assert_not_file_has_content out.txt '/usr/etc/hosts\.allow$'
assert_not_file_has_content out.txt '/usr/etc/hosts\.deny$'
echo "ok remove-from-packages"
compose: Add `tmp-is-dir` option to make `/tmp` a directory
There are a few reasons to do this. First, systemd changed to refuse mounts on
symlinks, and hence if one *wants* "/tmp-on-tmpfs", one would need to write a
different `sysroot-tmp.mount` unit.
Second, the original rationale for having this symlink was that if you had
multiple ostree stateroots ("osnames"), it's nicer if they had the same `/tmp`
to avoid duplication. But in practice today that's already an issue due to
`/var/tmp`, and further the multiple-stateroot case is pretty unusual. And that
case is *further* broken by SELinux (if one wanted to have e.g. an Ubuntu and
Fedora) stateroots. So let's fully decouple this and make `/tmp` a plain
old directory by default, so systemd's `tmp.mount` can become useful.
Now, things get interesting for the case where someone wants a physical `/tmp`
that *does* persist across reboots. Right now, if one just did a `systemctl mask
tmp.mount` as we do in Fedora Atomic Host's cloud images, you'd get a semantic
where `/tmp` stays per-deployment, which is weird. Our recommendation for
that should likely be to set up a bind mount for `/tmp` → `/var/tmp`.
For now, this stays an option to ensure compatibility; if FAH Cloud images
want to stay with "physical /tmp", then we'd have to change the kickstart.
Closes: https://github.com/projectatomic/rpm-ostree/issues/669
Closes: #778
Approved by: jlebon
2017-05-17 21:48:48 +03:00
# https://github.com/projectatomic/rpm-ostree/issues/669
ostree --repo= ${ repobuild } ls ${ treeref } /tmp > ls.txt
assert_file_has_content ls.txt 'd01777 0 0 0 /tmp'
echo "ok /tmp"
2018-08-22 16:02:25 +03:00
ostree --repo= ${ repobuild } show ${ treeref } \
--print-metadata-key rpmostree.rpmdb.pkglist > pkglist.txt
# This is currently a Recommends: package. If you change this, please
# also change the corresponding test in libbasic-test.sh.
assert_file_has_content_literal pkglist.txt 'systemd-'
assert_not_file_has_content pkglist.txt 'systemd-bootchart'
echo "ok recommends"
2018-10-26 20:58:46 +03:00
2019-05-07 15:20:56 +03:00
# Test overlays/overrides
for x in $( seq 3) ; do
ostree --repo= ${ repobuild } cat ${ treeref } /usr/bin/sometestbinary-${ x } > t
assert_file_has_content t " sometest ${ x } "
ostree --repo= ${ repobuild } cat ${ treeref } /usr/share/testsubdir-${ x } /test > t
assert_file_has_content t sometestdata-subdir-${ x }
done
ostree --repo= ${ repobuild } cat ${ treeref } /usr/bin/ls > ls.txt
assert_file_has_content ls.txt '^sweet new ls binary$'
echo "ok layers"
2018-10-26 20:58:46 +03:00
# Check that add-files with bad paths are rejected
prepare_compose_test "add-files-failure"
pysetjsonmember "add-files" '[["foo.txt", "/var/lib/foo.txt"]]'
# Do the compose ourselves since set -e doesn't work in function calls in if
rm ${ compose_workdir } -rf
mkdir ${ test_tmpdir } /workdir
if rpm-ostree compose tree ${ compose_base_argv } ${ treefile } | & tee err.txt; then
assert_not_reached err.txt "Successfully composed with add-files for /var/lib?"
fi
assert_file_has_content_literal err.txt "Unsupported path in add-files: /var"
echo "ok bad add-files"