diff options
author | Daniil Baturin <daniil@baturin.org> | 2018-10-28 19:36:21 +0100 |
---|---|---|
committer | Daniil Baturin <daniil@baturin.org> | 2018-10-28 19:36:21 +0100 |
commit | 556357b9cd970c1b6ba3fc5fd3d34c35e057f0dc (patch) | |
tree | 617c5d70f6f84dafee412e7f44059f8a265187d1 | |
parent | 477396a0e1069f8876ec069ec01edb8523548cf6 (diff) | |
parent | 7cad0a47a07c5b32e1b547e6b293a1f96daf39ba (diff) | |
download | vyatta-cfg-556357b9cd970c1b6ba3fc5fd3d34c35e057f0dc.tar.gz vyatta-cfg-556357b9cd970c1b6ba3fc5fd3d34c35e057f0dc.zip |
Merge branch 'current' into crux
Conflicts:
debian/vyatta-cfg.vyatta-router.service
-rw-r--r-- | Makefile.am | 14 | ||||
-rwxr-xr-x | debian/rules | 7 | ||||
-rw-r--r-- | debian/vyatta-cfg.install | 2 | ||||
-rw-r--r-- | debian/vyatta-cfg.postinst.in | 3 | ||||
-rw-r--r-- | debian/vyatta-cfg.postrm.in | 4 | ||||
-rw-r--r-- | debian/vyatta-cfg.vyatta-router.service | 22 | ||||
-rw-r--r-- | debian/vyatta-cfg.vyos-router.service | 18 | ||||
-rw-r--r-- | debian/vyatta-cfg.vyos.target | 3 | ||||
-rw-r--r-- | lib/systemd/aftervyos.conf | 3 | ||||
-rw-r--r-- | lib/systemd/serial/aftervyos.conf | 3 | ||||
-rwxr-xr-x | scripts/init/vyos-config | 16 | ||||
-rwxr-xr-x | scripts/init/vyos-router (renamed from etc/init.d/vyatta-router) | 16 | ||||
-rwxr-xr-x | scripts/system-generators/vyos-generator | 94 | ||||
-rwxr-xr-x | scripts/vyatta-boot-config-loader | 3 | ||||
-rw-r--r-- | src/cnode/cnode-algorithm.cpp | 7 |
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()); |