diff options
49 files changed, 725 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index 8c301ea..c31eaed 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ # vi:set ts=8 sw=8 noet ai nocindent: # - -# Copyright (c) 2011-2012 Codethink Ltd. +# Copyright (c) 2011-2013 Codethink Ltd. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License Version 2 as @@ -21,6 +21,7 @@ SUBDIRS = \ tbdiff-deploy \ tb-switch \ tb-update \ + baserock-system-config-sync \ tests .PHONY: ChangeLog diff --git a/baserock-system-config-sync/Makefile.am b/baserock-system-config-sync/Makefile.am new file mode 100644 index 0000000..914dc99 --- /dev/null +++ b/baserock-system-config-sync/Makefile.am @@ -0,0 +1,20 @@ +# Copyright (c) 2013 Codethink Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License Version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +bin_SCRIPTS = \ + baserock-system-config-sync + +libexec_SCRIPTS = \ + mount-system-versions-dir diff --git a/baserock-system-config-sync/baserock-system-config-sync b/baserock-system-config-sync/baserock-system-config-sync new file mode 100755 index 0000000..00ceac0 --- /dev/null +++ b/baserock-system-config-sync/baserock-system-config-sync @@ -0,0 +1,216 @@ +#!/bin/sh +# +# Copyright (c) 2013 Codethink Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License Version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +set -eu + + +mounting_script="$(dirname "$0")/../libexec/mount-system-versions-dir" + + +usage() { + echo "Usage: $(basename $0) test V1_DIR VU_DIR V2_DIR VT_DIR" >&2 + echo " $(basename $0) merge NEW_VERSION_LABEL" >&2 + echo " $(basename $0) sync CANONICAL_VERSION_LABEL" >&2 + exit 1 +} + + +die () { + echo $@ >&2 + exit 1 +} + + +merge() { + local vp_dir="$1" # version being processed + local v1_dir="$2" # factory version + local vu_dir="$3" # user modified version + local v2_dir="$4" # unmodified new deployed version + local vt_dir="$5" # target version where the result of the + # merge should be placed + + # use `find "$vp_dir/"*` instead of `find "$vp_dir"` because + # the last one also gives $vp_dir in the list of directories + find "$vp_dir/"* | while read f; do + # strip first component from file name + local stripped_filename=${f#$vp_dir/} + + local vp="$vp_dir/$stripped_filename" + local v1="$v1_dir/$stripped_filename" + local vu="$vu_dir/$stripped_filename" + local v2="$v2_dir/$stripped_filename" + local vt="$vt_dir/$stripped_filename" + + if [ -e "$vt" ]; then + # If the file already exists in the target, + # check if it is of the same kind + vp_type="$(stat -c %F "$vp")" + vt_type="$(stat -c %F "$vt")" + echo "$vp - $vt - $vp_type - $vt_type" >&2 + if [ "$vp_type" != "$vt_type" ]; then + die "found two different types for '$stripped_filename':" \ + "$vp_type and $vt_type" + fi + elif [ -d "$vp" ] && [ ! -h "$vp" ]; then + mkdir "$vt" + elif [ -h "$vp" ]; then + # Discussion: what we want to do about symbolic links? + # I chose a symbolic link in this order of preference: + # Vuser, V2, V1 + if [ -h "$vu" ]; then + cp -a "$vu" "$vt" + elif [ -h "$v2" ]; then + cp -a "$v2" "$vt" + else + cp -a "$v1" "$vt" + fi + elif [ -f "$vp" ]; then + merge_regular_file "$v1" "$vu" "$v2" "$vt" + else + die "ERROR: unexpected error" + fi + done +} + + +merge_regular_file() { + local v1="$1" + local vu="$2" + local v2="$3" + local vt="$4" + # Reference table for merging a regular file + # + # V1 Vuser V2 action + # ------------------------------------------ + # none none none inconceivable! + # exists none none use V1 + # none exists none use Vuser + # none none exists use V2 + # exists none exists use V2 + # exists exists none use V2 + # none exists exists diff V2 Vuser applied to V2 + # exists exists exists diff V1 Vuser applied to V2 + + v1_exists=$(test -f "$v1" && echo exists || echo none) + vu_exists=$(test -f "$vu" && echo exists || echo none) + v2_exists=$(test -f "$v2" && echo exists || echo none) + case "$v1_exists $vu_exists $v2_exists" in + 'exists none none') + cp -a "$v1" "$vt" + ;; + 'none exists none') + cp -a "$vu" "$vt" + ;; + 'none none exists') + cp -a "$v2" "$vt" + ;; + 'exists none exists') + cp -a "$v2" "$vt" + ;; + 'exists exists none') + # In the relevant mustard node it is specified that + # when we have v1 and vu, but not v2, we shouldn't + # do nothing. I changed to copy the user configuration + # instead + cp -a "$vu" "$vt" + ;; + 'none exists exists') + # In the relevant mustard node it is specified a diff + # between /dev/null and vu. However this causes a + # complaint against reversed patches. The option + # "-R" didn't help. + if ! (diff "$v2" "$vu" | patch "$v2" -o "$vt"); then + cp -a "$v2" "$vt" # merge failed, use v2 + fi + ;; + 'exists exists exists') + if ! (diff "$v1" "$vu" | patch "$v2" -o "$vt"); then + cp -a "$v2" "$vt" # merge failed, use v2 + fi + ;; + *) + die "ERROR: unexpected error" + ;; + esac +} + + +if [ "$#" = 0 ]; then + usage "$0" +fi + + +if [ "$1" = "test" ]; then + if [ "$#" != 5 ]; then + usage "$0" + fi + local v1="$2" + local vu="$3" + local v2="$4" + local vt="$5" + mkdir -p "$vt" + # For every pathname in V1, Vuser, or V2 + merge "$v1" "$v1" "$vu" "$v2" "$vt" + merge "$vu" "$v1" "$vu" "$v2" "$vt" + merge "$v2" "$v1" "$vu" "$v2" "$vt" +elif [ "$1" = "merge" ]; then + if [ "$#" != 2 ]; then + usage "$0" + fi + local new_version="$2" + local mounting_point=$(mktemp -d) + "$mounting_script" "$mounting_point" + trap 'umount "$mounting_point"' INT ERR EXIT + if [ ! -d "$mounting_point/systems/$new_version" ]; then + die "Error: version not found - '$new_version'" + fi + local v1_dir="$mounting_point/systems/default/orig/etc" + local vu_dir="$mounting_point/systems/default/run/etc" + local v2_dir="$mounting_point/systems/$new_version/run/etc" + local vt_dir="$mounting_point/systems/$new_version/run/etc.new" + mkdir "$vt_dir" + + # For every pathname in V1, Vuser, or V2 + merge "$v1_dir" "$v1_dir" "$vu_dir" "$v2_dir" "$vt_dir" + merge "$vu_dir" "$v1_dir" "$vu_dir" "$v2_dir" "$vt_dir" + merge "$v2_dir" "$v1_dir" "$vu_dir" "$v2_dir" "$vt_dir" + + rm -rf "$v2_dir" + mv "$vt_dir" "$v2_dir" +elif [ "$1" = "sync" ]; then + local canonical_version="$2" + local mounting_point=$(mktemp -d) + "$mounting_script" "$mounting_point" + trap 'umount "$mounting_point"' INT EXIT + if [ ! -d "$mounting_point/systems/$canonical_version" ]; then + die "Error: version not found - '$canonical_version'" + fi + for version_dir in "$mounting_point/systems/"*; do + version="$(basename "$version_dir")" + if [ -d "$version_dir" ] && [ ! -h "$version_dir" ] \ + && [ $version != $canonical_version ]; then + cp -a "$mounting_point/systems/$canonical_version/run/etc" \ + "$version_dir/run/etc.new" + mv "$version_dir/run/etc" "$version_dir/run/etc.old" + mv "$version_dir/run/etc.new" "$version_dir/run/etc" + rm -rf "$version_dir/run/etc.old" + fi + done +else + usage "$0" +fi + diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.dir.symb/vu/1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.dir.symb/vu/1 new file mode 120000 index 0000000..6a93f4f --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.dir.symb/vu/1 @@ -0,0 +1 @@ +afile
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.dir.symb/vu/afile b/baserock-system-config-sync/config-sync-tests/tests.upgrades.dir.symb/vu/afile new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.dir.symb/vu/afile diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/v1/sshd_config b/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/v1/sshd_config new file mode 100644 index 0000000..98fa27e --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/v1/sshd_config @@ -0,0 +1,123 @@ +# $OpenBSD: sshd_config,v 1.84 2011/05/23 03:30:07 djm Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +# The default requires explicit activation of protocol 1 +#Protocol 2 + +# HostKey for protocol version 1 +#HostKey /etc/ssh/ssh_host_key +# HostKeys for protocol version 2 +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_dsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key + +# Lifetime and size of ephemeral version 1 server key +#KeyRegenerationInterval 1h +#ServerKeyBits 1024 + +# Logging +# obsoletes QuietMode and FascistLogging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin yes +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#RSAAuthentication yes +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#RhostsRSAAuthentication no +# similar for protocol version 2 +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# RhostsRSAAuthentication and HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#UseLogin no +#UsePrivilegeSeparation yes +PermitUserEnvironment yes +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS yes +#PidFile /var/run/sshd.pid +#MaxStartups 10 +#PermitTunnel no +#ChrootDirectory none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/lib/openssh/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# ForceCommand cvs server + +AcceptEnv LANG LC_* diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/v2/sshd_config b/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/v2/sshd_config new file mode 100644 index 0000000..4e6a5d3 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/v2/sshd_config @@ -0,0 +1,123 @@ +# $OpenBSD: sshd_config,v 1.84 2011/05/23 03:30:07 djm Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +# The default requires explicit activation of protocol 1 +#Protocol 2 + +# HostKey for protocol version 1 +#HostKey /etc/ssh/ssh_host_key +# HostKeys for protocol version 2 +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_dsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key + +# Lifetime and size of ephemeral version 1 server key +#KeyRegenerationInterval 1h +#ServerKeyBits 1024 + +# Logging +# obsoletes QuietMode and FascistLogging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin yes +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#RSAAuthentication yes +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#RhostsRSAAuthentication no +# similar for protocol version 2 +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# RhostsRSAAuthentication and HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#UseLogin no +#UsePrivilegeSeparation yes +PermitUserEnvironment yes +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS yes +#PidFile /var/run/sshd.pid +#MaxStartups 10 +#PermitTunnel no +ChrootDirectory none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/lib/openssh/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# ForceCommand cvs server + +AcceptEnv LANG LC_* diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/vu/sshd_config b/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/vu/sshd_config new file mode 100644 index 0000000..c4b25e9 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.etc/vu/sshd_config @@ -0,0 +1,123 @@ +# $OpenBSD: sshd_config,v 1.84 2011/05/23 03:30:07 djm Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +# The default requires explicit activation of protocol 1 +#Protocol 2 + +# HostKey for protocol version 1 +#HostKey /etc/ssh/ssh_host_key +# HostKeys for protocol version 2 +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_dsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key + +# Lifetime and size of ephemeral version 1 server key +#KeyRegenerationInterval 1h +#ServerKeyBits 1024 + +# Logging +# obsoletes QuietMode and FascistLogging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin yes +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#RSAAuthentication yes +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#RhostsRSAAuthentication no +# similar for protocol version 2 +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# RhostsRSAAuthentication and HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +UseLogin no +#UsePrivilegeSeparation yes +PermitUserEnvironment yes +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS yes +#PidFile /var/run/sshd.pid +#MaxStartups 10 +#PermitTunnel no +#ChrootDirectory none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/lib/openssh/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# ForceCommand cvs server + +AcceptEnv LANG LC_* diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.dir/v1/1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.dir/v1/1 new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.dir/v1/1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.dir/v2/1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.dir/v2/1 new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.dir/v2/1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/v1/1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/v1/1 new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/v1/1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/v2/1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/v2/1 new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/v2/1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/vu/1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/vu/1 new file mode 120000 index 0000000..6a93f4f --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/vu/1 @@ -0,0 +1 @@ +afile
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/vu/afile b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/vu/afile new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.regular.symb/vu/afile diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl1 new file mode 120000 index 0000000..d09a60b --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl1 @@ -0,0 +1 @@ +../v1f
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl2 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl2 new file mode 120000 index 0000000..d09a60b --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl2 @@ -0,0 +1 @@ +../v1f
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl3 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl3 new file mode 120000 index 0000000..d09a60b --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1/sl3 @@ -0,0 +1 @@ +../v1f
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1f b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1f new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v1f diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl1 new file mode 120000 index 0000000..e4b01f1 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl1 @@ -0,0 +1 @@ +../v2f
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl3 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl3 new file mode 120000 index 0000000..e4b01f1 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl3 @@ -0,0 +1 @@ +../v2f
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl4 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl4 new file mode 120000 index 0000000..e4b01f1 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2/sl4 @@ -0,0 +1 @@ +../v2f
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2f b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2f new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/v2f diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl1 new file mode 120000 index 0000000..fcf9fc4 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl1 @@ -0,0 +1 @@ +../vuf
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl2 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl2 new file mode 120000 index 0000000..fcf9fc4 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl2 @@ -0,0 +1 @@ +../vuf
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl4 b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl4 new file mode 120000 index 0000000..fcf9fc4 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vu/sl4 @@ -0,0 +1 @@ +../vuf
\ No newline at end of file diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vuf b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vuf new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades.symblinks/vuf diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file1 new file mode 100644 index 0000000..b73be5d --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file1 @@ -0,0 +1,2 @@ +whereami=v1 +version=v1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file4 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file4 new file mode 100644 index 0000000..9972a7a --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file4 @@ -0,0 +1,2 @@ +whereami=v1,v2 +version=v1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file5 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file5 new file mode 100644 index 0000000..8fbeda2 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file5 @@ -0,0 +1,2 @@ +whereami=v1,vu +version=v1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file7 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file7 new file mode 100644 index 0000000..7c1f4fb --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file7 @@ -0,0 +1,2 @@ +whereami=v1,vu,v2 +version=v1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file7.1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file7.1 new file mode 100644 index 0000000..d579e7b --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/file7.1 @@ -0,0 +1,8 @@ +a=1 +b=2 +c=3 +whereami=v1,vu,v2 +version=v1 +d=1 +e=2 +f=3 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/subdir1/subfile1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/subdir1/subfile1 new file mode 100644 index 0000000..1cb075e --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/subdir1/subfile1 @@ -0,0 +1,10 @@ +qeq asda d +s +d +a sd +a +d +a +d + +d diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/subdir1/subsubdir2/subsubfile4 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/subdir1/subsubdir2/subsubfile4 new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v1/subdir1/subsubdir2/subsubfile4 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file1 new file mode 100644 index 0000000..b73be5d --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file1 @@ -0,0 +1,2 @@ +whereami=v1 +version=v1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file2 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file2 new file mode 100644 index 0000000..9fa9381 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file2 @@ -0,0 +1,2 @@ +whereami=vu +version=vu diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file3 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file3 new file mode 100644 index 0000000..b1580e3 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file3 @@ -0,0 +1,2 @@ +whereami=vu +version=v2 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file4 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file4 new file mode 100644 index 0000000..ebc4914 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file4 @@ -0,0 +1,2 @@ +whereami=v1,v2 +version=v2 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file5 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file5 new file mode 100644 index 0000000..8fbeda2 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file5 @@ -0,0 +1,2 @@ +whereami=v1,vu +version=v1 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file6 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file6 new file mode 100644 index 0000000..e76efb0 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file6 @@ -0,0 +1,2 @@ +whereami=vu,v2 +version=v2 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file7 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file7 new file mode 100644 index 0000000..93c46eb --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file7 @@ -0,0 +1,2 @@ +whereami=v1,vu,v2 +version=v2 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file7.1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file7.1 new file mode 100644 index 0000000..2462a4f --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/file7.1 @@ -0,0 +1,8 @@ +a=1 +b=2 +c=3 +whereami=v1,vu,v2 +version=v2 +d=1 +e=2 +f=3 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/subdir1/subfile1 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/subdir1/subfile1 new file mode 100644 index 0000000..1cb075e --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/subdir1/subfile1 @@ -0,0 +1,10 @@ +qeq asda d +s +d +a sd +a +d +a +d + +d diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/subdir1/subsubdir2/subsubfile4 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/subdir1/subsubdir2/subsubfile4 new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/v2/subdir1/subsubdir2/subsubfile4 diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file2 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file2 new file mode 100644 index 0000000..9fa9381 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file2 @@ -0,0 +1,2 @@ +whereami=vu +version=vu diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file5 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file5 new file mode 100644 index 0000000..eddf4ca --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file5 @@ -0,0 +1,2 @@ +whereami=v1,vu +version=vu diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file6 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file6 new file mode 100644 index 0000000..9802a97 --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file6 @@ -0,0 +1,2 @@ +whereami=vu,v2 +version=vu diff --git a/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file7 b/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file7 new file mode 100644 index 0000000..24553ad --- /dev/null +++ b/baserock-system-config-sync/config-sync-tests/tests.upgrades/vu/file7 @@ -0,0 +1,2 @@ +whereami=v1,vu,v2 +version=vu diff --git a/baserock-system-config-sync/mount-system-versions-dir b/baserock-system-config-sync/mount-system-versions-dir new file mode 100755 index 0000000..6028ea4 --- /dev/null +++ b/baserock-system-config-sync/mount-system-versions-dir @@ -0,0 +1,40 @@ +#!/bin/sh +# +# Copyright (c) 2013 Codethink Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License Version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +set -eu + + +usage() { + echo usage: "$(basename $0) mounting_point" >&2 + exit 1 +} + + + +if [ "$#" != 1 ]; then + usage $0 +fi + + +mouting_point="$1" + +disk=$(awk '{ if ($1 != "rootfs" && $2 == "/") print $1 }' /proc/mounts) + +mkdir -p "$mouting_point" + +mount "$disk" "$mouting_point" + diff --git a/configure.ac b/configure.ac index e0ba901..17ec2dd 100644 --- a/configure.ac +++ b/configure.ac @@ -121,6 +121,7 @@ tbdiff-create/Makefile tbdiff-deploy/Makefile tb-switch/Makefile tb-update/Makefile +baserock-system-config-sync/Makefile tests/Makefile ]) |