summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@baturin.org>2018-10-28 19:36:21 +0100
committerDaniil Baturin <daniil@baturin.org>2018-10-28 19:36:21 +0100
commit556357b9cd970c1b6ba3fc5fd3d34c35e057f0dc (patch)
tree617c5d70f6f84dafee412e7f44059f8a265187d1
parent477396a0e1069f8876ec069ec01edb8523548cf6 (diff)
parent7cad0a47a07c5b32e1b547e6b293a1f96daf39ba (diff)
downloadvyatta-cfg-556357b9cd970c1b6ba3fc5fd3d34c35e057f0dc.tar.gz
vyatta-cfg-556357b9cd970c1b6ba3fc5fd3d34c35e057f0dc.zip
Merge branch 'current' into crux
Conflicts: debian/vyatta-cfg.vyatta-router.service
-rw-r--r--Makefile.am14
-rwxr-xr-xdebian/rules7
-rw-r--r--debian/vyatta-cfg.install2
-rw-r--r--debian/vyatta-cfg.postinst.in3
-rw-r--r--debian/vyatta-cfg.postrm.in4
-rw-r--r--debian/vyatta-cfg.vyatta-router.service22
-rw-r--r--debian/vyatta-cfg.vyos-router.service18
-rw-r--r--debian/vyatta-cfg.vyos.target3
-rw-r--r--lib/systemd/aftervyos.conf3
-rw-r--r--lib/systemd/serial/aftervyos.conf3
-rwxr-xr-xscripts/init/vyos-config16
-rwxr-xr-xscripts/init/vyos-router (renamed from etc/init.d/vyatta-router)16
-rwxr-xr-xscripts/system-generators/vyos-generator94
-rwxr-xr-xscripts/vyatta-boot-config-loader3
-rw-r--r--src/cnode/cnode-algorithm.cpp7
15 files changed, 173 insertions, 42 deletions
diff --git a/Makefile.am b/Makefile.am
index f1b98aa..affc413 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -22,7 +22,6 @@ AM_LFLAGS = --prefix=yy_`basename $* .l`_ -olex.yy.c
ACLOCAL_AMFLAGS = -I m4
completion_DATA = etc/bash_completion.d/vyatta-cfg
-initd_SCRIPTS = etc/init.d/vyatta-router
dhcphook_SCRIPTS = scripts/vyatta-dhclient-hook
logrotate_DATA = etc/logrotate.d/vyatta-config-logs
logrotate_DATA += etc/logrotate.d/auth
@@ -32,6 +31,19 @@ interp_DATA = functions/interpreter/vyatta-cfg-run
wrapperdir = /opt/vyatta/etc/functions/
wrapper_DATA = functions/wrapper/script-template
+systemdinitdir = /usr/libexec/vyos/init/
+systemdinit_SCRIPTS = scripts/init/vyos-router
+systemdinit_SCRIPTS += scripts/init/vyos-config
+
+systemdgeneratordir = /lib/systemd/system-generators/
+systemdgenerator_SCRIPTS = scripts/system-generators/vyos-generator
+
+systemdgettydir = /lib/systemd/system/getty@.service.d/
+systemdgetty_DATA = lib/systemd/aftervyos.conf
+
+systemdserialgettydir = /lib/systemd/system/serial-getty@.service.d/
+systemdserialgetty_DATA = lib/systemd/serial/aftervyos.conf
+
src/cparse/cparse.cpp: src/cparse/cparse.ypp src/cparse/cparse_def.h
bison -p cparse_ --defines=src/cparse/cparse.h -o $@ $<
diff --git a/debian/rules b/debian/rules
index eab1375..2603b2d 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,5 +1,9 @@
#!/usr/bin/make -f
+DIR := debian/vyatta-cfg
+VYOS_LIBEXEC_DIR := usr/libexec/vyos
+SYSTEM_GENERATORS_DIR := lib/systemd/system-generators
+
export DH_OPTIONS
## uncomment to enable hardening
@@ -44,5 +48,6 @@ override_dh_install:
dh_install $(inst_opts)
override_dh_systemd_enable:
- dh_systemd_enable -pvyatta-cfg --name vyatta-router vyatta-router.service
+ dh_systemd_enable -pvyatta-cfg --name vyos-router vyos-router.service
+ dh_systemd_enable -pvyatta-cfg --name vyos vyos.target
diff --git a/debian/vyatta-cfg.install b/debian/vyatta-cfg.install
index 8c9aca2..abbe975 100644
--- a/debian/vyatta-cfg.install
+++ b/debian/vyatta-cfg.install
@@ -4,3 +4,5 @@ opt/vyatta/share/vyatta-cfg/functions
opt/vyatta/sbin
opt/vyatta/etc
bin
+usr/libexec
+lib
diff --git a/debian/vyatta-cfg.postinst.in b/debian/vyatta-cfg.postinst.in
index fc9b07b..a741b62 100644
--- a/debian/vyatta-cfg.postinst.in
+++ b/debian/vyatta-cfg.postinst.in
@@ -16,8 +16,7 @@ for dir in $sysconfdir/config $prefix/config; do
chgrp vyattacfg $dir 2>/dev/null
done
-update-rc.d vyatta-router defaults 90 >/dev/null
-systemctl enable vyatta-router.service >/dev/null
+systemctl enable vyos-router.service >/dev/null
# capability stuff
for bin in my_cli_bin my_cli_shell_api; do
diff --git a/debian/vyatta-cfg.postrm.in b/debian/vyatta-cfg.postrm.in
index b184f20..cc01594 100644
--- a/debian/vyatta-cfg.postrm.in
+++ b/debian/vyatta-cfg.postrm.in
@@ -1,7 +1,5 @@
#!/bin/bash -e
if [ "$1" = "purge" ]; then
- update-rc.d vyatta-router remove >/dev/null || exit $?
- systemctl disable vyatta-router.service >/dev/null || exit $?
+ systemctl disable vyos-router.service >/dev/null || exit $?
fi
-
diff --git a/debian/vyatta-cfg.vyatta-router.service b/debian/vyatta-cfg.vyatta-router.service
deleted file mode 100644
index c181e6e..0000000
--- a/debian/vyatta-cfg.vyatta-router.service
+++ /dev/null
@@ -1,22 +0,0 @@
-[Unit]
-SourcePath=/etc/init.d/vyatta-router
-Description=VyOS Router
-Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target getty@tty1.service getty@tty2.service getty@rrt3.service getty@tty4.service getty@tty5.service getty@tty6.service
-After=systemd-journald-dev-log.socket time-sync.target local-fs.target
-Conflicts=shutdown.target
-
-[Service]
-Type=oneshot
-Restart=no
-TimeoutSec=20min
-IgnoreSIGPIPE=no
-KillMode=process
-GuessMainPID=no
-RemainAfterExit=yes
-SysVStartPriority=4
-ExecStart=/etc/init.d/vyatta-router start
-ExecStop=/etc/init.d/vyatta-router stop
-StandardOutput=journal+console
-
-[Install]
-WantedBy=multi-user.target
diff --git a/debian/vyatta-cfg.vyos-router.service b/debian/vyatta-cfg.vyos-router.service
new file mode 100644
index 0000000..1e9580c
--- /dev/null
+++ b/debian/vyatta-cfg.vyos-router.service
@@ -0,0 +1,18 @@
+[Unit]
+Description=VyOS Router
+After=systemd-journald-dev-log.socket time-sync.target local-fs.target
+Conflicts=shutdown.target
+Before=systemd-user-sessions.service
+
+[Service]
+Type=simple
+Restart=no
+TimeoutSec=20min
+KillMode=process
+RemainAfterExit=yes
+ExecStart=/usr/libexec/vyos/init/vyos-router start
+ExecStop=/usr/libexec/vyos/init/vyos-router stop
+StandardOutput=journal+console
+
+[Install]
+WantedBy=vyos.target
diff --git a/debian/vyatta-cfg.vyos.target b/debian/vyatta-cfg.vyos.target
new file mode 100644
index 0000000..47c91c1
--- /dev/null
+++ b/debian/vyatta-cfg.vyos.target
@@ -0,0 +1,3 @@
+[Unit]
+Description=VyOS target
+After=multi-user.target
diff --git a/lib/systemd/aftervyos.conf b/lib/systemd/aftervyos.conf
new file mode 100644
index 0000000..c575390
--- /dev/null
+++ b/lib/systemd/aftervyos.conf
@@ -0,0 +1,3 @@
+[Service]
+ExecStartPre=-/usr/libexec/vyos/init/vyos-config
+StandardOutput=journal+console
diff --git a/lib/systemd/serial/aftervyos.conf b/lib/systemd/serial/aftervyos.conf
new file mode 100644
index 0000000..8ba4277
--- /dev/null
+++ b/lib/systemd/serial/aftervyos.conf
@@ -0,0 +1,3 @@
+[Service]
+ExecStartPre=-/usr/libexec/vyos/init/vyos-config SERIAL
+StandardOutput=journal+console
diff --git a/scripts/init/vyos-config b/scripts/init/vyos-config
new file mode 100755
index 0000000..3564270
--- /dev/null
+++ b/scripts/init/vyos-config
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+while [ ! -f /tmp/vyos-config-status ]
+do
+ sleep 1
+done
+
+status=$(cat /tmp/vyos-config-status)
+
+if [ -z "$1" ]; then
+ if [ $status -ne 0 ]; then
+ echo "Configuration error"
+ else
+ echo "Configuration success"
+ fi
+fi
diff --git a/etc/init.d/vyatta-router b/scripts/init/vyos-router
index c57387c..078e118 100755
--- a/etc/init.d/vyatta-router
+++ b/scripts/init/vyos-router
@@ -1,13 +1,4 @@
#!/bin/bash
-### BEGIN INIT INFO
-# Provides: vyatta-router
-# Required-Start: $syslog $time $local_fs
-# Required-Stop: $syslog $time $local_fs
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: VyOS Router
-# Description: Debian init script for the VyOS Router
-### END INIT INFO
# **** License ****
# 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
@@ -39,7 +30,10 @@ declare action=$1; shift
declare -x BOOTFILE=$vyatta_sysconfdir/config/config.boot
# If vyos-config= boot option is present, use that file instead
-VYOS_CONFIG=$(cat /proc/cmdline | grep -Eo '\bvyos-config=(\S+)\b' /proc/cmdline | awk -F'=' '{print $2}')
+for x in $(cat /proc/cmdline); do
+ [[ $x = vyos-config=* ]] || continue
+ VYOS_CONFIG="${x#vyos-config=}"
+done
if [ ! -z "$VYOS_CONFIG" ]; then
if [ -r "$VYOS_CONFIG" ]; then
@@ -171,7 +165,7 @@ start ()
# In 5.1 master, zebra thinks existence of /var/run/netns is
# a requirement for netns support
- mkdir /var/run/netns
+ mkdir -p /var/run/netns
# Since systemd doesn't work without watchfrr and watchfrr restarts
# all daemons if just one failed, do the start manually
diff --git a/scripts/system-generators/vyos-generator b/scripts/system-generators/vyos-generator
new file mode 100755
index 0000000..34faab6
--- /dev/null
+++ b/scripts/system-generators/vyos-generator
@@ -0,0 +1,94 @@
+#!/bin/sh
+set -f
+
+LOG=""
+DEBUG_LEVEL=1
+LOG_D="/run/vyos-router"
+ENABLE="enabled"
+DISABLE="disabled"
+FOUND="found"
+NOTFOUND="notfound"
+RUN_ENABLED_FILE="$LOG_D/$ENABLE"
+VYOS_SYSTEM_TARGET="/lib/systemd/system/vyos.target"
+VYOS_TARGET_NAME="vyos.target"
+
+debug() {
+ local lvl="$1"
+ shift
+ [ "$lvl" -gt "$DEBUG_LEVEL" ] && return
+ if [ -z "$LOG" ]; then
+ local log="$LOG_D/${0##*/}.log"
+ { [ -d "$LOG_D" ] || mkdir -p "$LOG_D"; } &&
+ { : > "$log"; } >/dev/null 2>&1 && LOG="$log" ||
+ LOG="/dev/kmsg"
+ fi
+ echo "$@" >> "$LOG"
+}
+
+default() {
+ _RET="$ENABLE"
+}
+
+main() {
+ local normal_d="$1" early_d="$2" late_d="$3"
+ local target_name="multi-user.target" gen_d="$early_d"
+ local link_path="$gen_d/${target_name}.wants/${VYOS_TARGET_NAME}"
+ local ds="$NOTFOUND"
+
+ debug 1 "$0 normal=$normal_d early=$early_d late=$late_d"
+ debug 2 "$0 $*"
+
+ local search result="error" ret=""
+ for search in default; do
+ if $search; then
+ debug 1 "$search found $_RET"
+ [ "$_RET" = "$ENABLE" -o "$_RET" = "$DISABLE" ] &&
+ result=$_RET && break
+ else
+ ret=$?
+ debug 0 "search $search returned $ret"
+ fi
+ done
+
+ # enable AND ds=found == enable
+ # enable AND ds=notfound == disable
+ # disable || <any> == disabled
+ if [ "$result" = "$ENABLE" ]; then
+ if [ -e "$link_path" ]; then
+ debug 1 "already enabled: no change needed"
+ else
+ [ -d "${link_path%/*}" ] || mkdir -p "${link_path%/*}" ||
+ debug 0 "failed to make dir $link_path"
+ if ln -snf "$VYOS_SYSTEM_TARGET" "$link_path"; then
+ debug 1 "enabled via $link_path -> $VYOS_SYSTEM_TARGET"
+ else
+ ret=$?
+ debug 0 "[$ret] enable failed:" \
+ "ln $VYOS_SYSTEM_TARGET $link_path"
+ fi
+ fi
+ : > "$RUN_ENABLED_FILE"
+ elif [ "$result" = "$DISABLE" ]; then
+ if [ -f "$link_path" ]; then
+ if rm -f "$link_path"; then
+ debug 1 "disabled. removed existing $link_path"
+ else
+ ret=$?
+ debug 0 "[$ret] disable failed, remove $link_path"
+ fi
+ else
+ debug 1 "already disabled: no change needed [no $link_path]"
+ fi
+ if [ -e "$RUN_ENABLED_FILE" ]; then
+ rm -f "$RUN_ENABLED_FILE"
+ fi
+ else
+ debug 0 "unexpected result '$result' 'ds=$ds'"
+ ret=3
+ fi
+ return $ret
+}
+
+main "$@"
+
+# vi: ts=4 expandtab
diff --git a/scripts/vyatta-boot-config-loader b/scripts/vyatta-boot-config-loader
index d9c0903..aead348 100755
--- a/scripts/vyatta-boot-config-loader
+++ b/scripts/vyatta-boot-config-loader
@@ -65,8 +65,9 @@ umask 0002
trace '-- teardown succeeded'
fi
trace '-- exiting'
+ echo $ret > /tmp/vyos-config-status
+ sync
exit $ret
) </dev/null >>$CLOG 2>&1
exit $?
-
diff --git a/src/cnode/cnode-algorithm.cpp b/src/cnode/cnode-algorithm.cpp
index 6638936..379fb6a 100644
--- a/src/cnode/cnode-algorithm.cpp
+++ b/src/cnode/cnode-algorithm.cpp
@@ -513,7 +513,12 @@ _diff_show_other(const CfgNode *cfg1, const CfgNode *cfg2, int level,
_diff_print_indent(cfg1, cfg2, level, pfx_diff);
if (is_value) {
// at tag value
- printf("%s %s", name.c_str(), value.c_str());
+ const char *quote = "";
+ size_t vlen = value.length();
+ if (strcspn(value.c_str(), "*}{;\011\012\013\014\015 ") < vlen) {
+ quote = "\"";
+ }
+ printf("%s %s%s%s", name.c_str(), quote, value.c_str(), quote);
} else {
// at intermediate node
printf("%s", name.c_str());