Skip to content
Snippets Groups Projects

AGRAVIS Upgrade Script

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by Simon
    Edited
    742-agravis 4.32 KiB
    #!/bin/sh
    function mkifsetupteardown() {
    	mkdir "$2"
    	find "$1" -type d -print | sed -n "s|^$1/||p" | while IFS= read -r dir; do
    		mkdir "$2/$dir"
    	done
    	find "$1" -type f -print | sed -n "s|^$1/||p" | while IFS= read -r file; do
    		sed 's/gluon_bat0/agravis_bat_$DOMAINIF/' "$1/$file" > "$2/$file"
            chmod +x "$2/$file"
    	done
    }
    
    mkifsetupteardown "/lib/gluon/core/mesh/setup.d" "/lib/gluon/core/mesh/agravis-setup.d"
    mkifsetupteardown "/lib/gluon/core/mesh/post-setup.d" "/lib/gluon/core/mesh/agravis-post-setup.d"
    mkifsetupteardown "/lib/gluon/core/mesh/teardown.d" "/lib/gluon/core/mesh/agravis-teardown.d"
    
    # TODO lua -e "print(require('gluon.site').$path('$default'))" returning correct site?
    sed -e 's/gluon_bat0.lock/agravis_bat_$domainif.lock/' \
        -e 's/gluon_bat0/agravis_bat/' \
        -e 's/local gw_mode/local gw_mode domain domainif/' \
        -e 's/json_get_vars gw_mode/json_get_vars gw_mode domain domainif/' \
        -e 's/primary0_/pri_/' \
        -e 's/primary0/pri-$domainif/' \
        -e 's/batctl/batctl -m "bat-$domainif"/' \
        -e '/^proto_agravis_bat_renew() {$/{N;s/proto_agravis_bat_renew() {\n\tlocal config="$1"/proto_agravis_bat_renew() {\n\tlocal config="$1"\n\n\tlocal domain domainif\n\tjson_get_vars domain domainif/}' \
        -e '/^proto_agravis_bat_teardown() {$/{N;s/proto_agravis_bat_teardown() {\n\tlocal config="$1"/proto_agravis_bat_teardown() {\n\tlocal config="$1"\n\n\tlocal domain domainif\n\tjson_get_vars domain domainif/}' \
        -e "s/@.proto='gluon_mesh'/@.proto='agravis_mesh' \&\& @.data.domainif='\$domainif'/" \
        -e "s/proto_config_add_string 'gw_mode'/proto_config_add_string 'gw_mode'\n\tproto_config_add_string 'domain'\n\tproto_config_add_string 'domainif'/" \
        /lib/netifd/proto/gluon_bat0.sh >/lib/netifd/proto/agravis_bat.sh
    chmod +x /lib/netifd/proto/agravis_bat.sh
    
    sed -e 's/gluon_mesh/agravis_mesh/' \
        -e 's!/lib/gluon/core/mesh/!/lib/gluon/core/mesh/agravis-!' \
        -e 's/local fixed_mtu transitive/local fixed_mtu transitive domain domainif/' \
        -e 's/json_get_vars fixed_mtu transitive/json_get_vars fixed_mtu transitive domain domainif/' \
        -e 's/export TRANSITIVE="${transitive:-0}"/export TRANSITIVE="${transitive:-0}"\n\texport DOMAIN="$domain"\n\texport DOMAINIF="$domainif"/' \
        -e 's/json_add_boolean transitive "$TRANSITIVE"/json_add_boolean transitive "$TRANSITIVE"\n\tjson_add_string domain "$DOMAIN"\n\tjson_add_string domainif "$DOMAINIF"/' \
        -e 's/proto_config_add_boolean transitive/proto_config_add_boolean transitive\n\tproto_config_add_string domain\n\tproto_config_add_string domainif/' \
        -e 's!for script in /lib/gluon/core/mesh/agravis-teardown.d/!local domain domainif\n\tjson_get_vars domain domainif\n\texport DOMAIN="$domain"\n\texport DOMAINIF="$domainif"\n\n\tfor script in /lib/gluon/core/mesh/agravis-teardown.d/!' \
        /lib/netifd/proto/gluon_mesh.sh >/lib/netifd/proto/agravis_mesh.sh
    chmod +x /lib/netifd/proto/agravis_mesh.sh
    
    sed -e 's/gluon_wired/agravis_wired/' \
        -e 's/proto_config_add_string vxpeer6addr/proto_config_add_string vxpeer6addr\n\tproto_config_add_string domain\n\tproto_config_add_string domainif/' \
        -e 's/local transitive index vxlan vxpeer6addr/local transitive index vxlan vxpeer6addr domain domainif/' \
        -e 's/json_get_vars transitive index vxlan vxpeer6addr/json_get_vars transitive index vxlan vxpeer6addr domain domainif/' \
        -e "s/json_add_string proto 'gluon_mesh'/json_add_string proto 'agravis_mesh'\n\tjson_add_string domain \"\$domain\"\n\tjson_add_string domainif \"\$domainif\"/" \
        -e "s#require(\"gluon.util\").domain_seed_bytes(#require(\"gluon.agravis\").domain_seed_bytes(\"'\"\$(cat /lib/gluon/domains/\"\$domain\".json | jsonfilter -e \"@.domain_seed\")\"'\", #" \
        /lib/netifd/proto/gluon_wired.sh >/lib/netifd/proto/agravis_wired.sh
    chmod +x /lib/netifd/proto/agravis_wired.sh
    
    cat <<EOF >/usr/lib/lua/gluon/agravis.lua
    local util = require 'gluon.util'
    
    local M = {}
    
    function M.domain_seed_bytes(domain_seed, key, length)
    	local ret = ''
    	local v = ''
    	local i = 0
    
    	-- Inspired by HKDF key expansion, but much simpler, as we don't need
    	-- cryptographic strength
    	while ret:len() < 2*length do
    		i = i + 1
    		v = hash.md5(v .. key .. domain_seed:lower() .. i)
    		ret = ret .. v
    	end
    
    	return ret:sub(0, 2*length)
    end
    
    return M
    EOF
    
    sed -i "s/@.proto='gluon_mesh'/(@.proto='gluon_mesh' || @.proto='agravis_mesh')/" /etc/init.d/gluon-respondd
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment