From 5e0bad2f25f9c38c4adeb38199ba9cb6052b23f6 Mon Sep 17 00:00:00 2001
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Fri, 23 Jan 2015 05:51:13 +0100
Subject: [PATCH] gluon-legacy: convert gluon-core legacy scripts to invariant
 scripts

This also fixes a long-broken legacy upgrade script which would leave the
sysconfig variable lan_ifname unset and the LAN ports unusable.
---
 .../gluon/upgrade/core/invariant/000-legacy   | 11 +++++
 .../core/invariant/019-legacy-interfaces      | 40 +++++++++++++++++++
 .../core/invariant/210-legacy-wireless        | 24 +++++++++++
 .../gluon/upgrade/core/legacy/001-sysconfig   | 37 -----------------
 .../gluon/upgrade/core/legacy/020-wireless    | 24 -----------
 .../mesh-batman-adv-core/legacy/010-mesh      | 22 ----------
 6 files changed, 75 insertions(+), 83 deletions(-)
 create mode 100755 package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/000-legacy
 create mode 100755 package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/019-legacy-interfaces
 create mode 100755 package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/210-legacy-wireless
 delete mode 100755 package/gluon-legacy/files/lib/gluon/upgrade/core/legacy/001-sysconfig
 delete mode 100755 package/gluon-legacy/files/lib/gluon/upgrade/core/legacy/020-wireless
 delete mode 100755 package/gluon-legacy/files/lib/gluon/upgrade/mesh-batman-adv-core/legacy/010-mesh

diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/000-legacy b/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/000-legacy
new file mode 100755
index 000000000..78436676d
--- /dev/null
+++ b/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/000-legacy
@@ -0,0 +1,11 @@
+#!/usr/bin/lua
+
+local site = require 'gluon.site_config'
+local sysconfig = require 'gluon.sysconfig'
+
+for _, file in ipairs(site.legacy.version_files) do
+  if os.remove(file) then
+    -- Set version being upgraded from to 'legacy'
+    sysconfig.gluon_version = 'legacy'
+  end
+end
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/019-legacy-interfaces b/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/019-legacy-interfaces
new file mode 100755
index 000000000..b48e42b87
--- /dev/null
+++ b/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/019-legacy-interfaces
@@ -0,0 +1,40 @@
+#!/usr/bin/lua
+
+local gluon_util = require 'gluon.util'
+local platform = require 'gluon.platform'
+local site = require 'gluon.site_config'
+local sysconfig = require 'gluon.sysconfig'
+
+local uci = require('luci.model.uci').cursor()
+local util = require 'luci.util'
+
+
+if sysconfig.gluon_version == 'legacy' then
+  local function iface_exists(name)
+    return (gluon_util.exec('ip', 'link', 'show', 'dev', (name:gsub('%..*$', ''))) == 0)
+  end
+
+  local function remove_bat0(iface)
+    return util.trim(string.gsub(' ' .. iface .. ' ', ' bat0 ', ' '))
+  end
+
+
+  local lan_ifname = remove_bat0(uci:get('network', site.legacy.mesh_ifname, 'ifname'))
+  local wan_ifname = uci:get('network', 'wan', 'ifname')
+
+  if wan_ifname and iface_exists(wan_ifname) then
+    sysconfig.wan_ifname = wan_ifname
+    sysconfig.lan_ifname = lan_ifname
+  else
+    sysconfig.wan_ifname = lan_ifname
+  end
+
+
+  uci:delete('network', site.legacy.mesh_ifname)
+  uci:delete('network', 'wan')
+
+  uci:save('network')
+  uci:commit('network')
+end
+
+
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/210-legacy-wireless b/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/210-legacy-wireless
new file mode 100755
index 000000000..36da0632a
--- /dev/null
+++ b/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/210-legacy-wireless
@@ -0,0 +1,24 @@
+#!/usr/bin/lua
+
+local site = require 'gluon.site_config'
+local sysconfig = require 'gluon.sysconfig'
+
+local uci = require('luci.model.uci').cursor()
+
+
+if sysconfig.gluon_version == 'legacy' then
+  function delete_legacy_iface(iface)
+    for _, wifi in pairs(site.legacy.wifi_names) do
+      if wifi == iface['.name'] then
+	return true
+      end
+    end
+
+    return false
+  end
+
+  uci:delete_all('wireless', 'wifi-iface', delete_legacy_iface)
+
+  uci:save('wireless')
+  uci:commit('wireless')
+end
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/legacy/001-sysconfig b/package/gluon-legacy/files/lib/gluon/upgrade/core/legacy/001-sysconfig
deleted file mode 100755
index 769309fba..000000000
--- a/package/gluon-legacy/files/lib/gluon/upgrade/core/legacy/001-sysconfig
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/lua
-
-local sysconfig = require 'gluon.sysconfig'
-local gluon_util = require 'gluon.util'
-local platform = require 'gluon.platform'
-
-local fs = require 'luci.fs'
-local uci = require('luci.model.uci').cursor()
-local util = require 'luci.util'
-
-
-if platform.match('ar71xx', 'generic', {'tl-wdr3600', 'tl-wdr4300'}) then
-   sysconfig.primary_mac = util.trim(fs.readfile('/sys/class/ieee80211/phy1/macaddress'))
-else
-   sysconfig.primary_mac = util.trim(fs.readfile('/sys/class/ieee80211/phy0/macaddress'))
-end
-
-
-local function iface_exists(name)
-   return (gluon_util.exec('ip', 'link', 'show', 'dev', (name:gsub('%..*$', ''))) == 0)
-end
-
-local function remove_bat0(iface)
-   return util.trim(string.gsub(' ' .. iface .. ' ', ' bat0 ', ' '))
-end
-
-
-local lan_ifname = remove_bat0(uci:get('network', site.legacy.mesh_ifname, 'ifname'))
-local wan_ifname = uci:get('network', 'wan', 'ifname')
-
-
-if wan_ifname and iface_exists(wan_ifname) then
-   sysconfig.wan_ifname = wan_ifname
-   sysconfig.lan_ifname = lan_ifname
-else
-   sysconfig.wan_ifname = lan_ifname
-end
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/legacy/020-wireless b/package/gluon-legacy/files/lib/gluon/upgrade/core/legacy/020-wireless
deleted file mode 100755
index f6f9335fa..000000000
--- a/package/gluon-legacy/files/lib/gluon/upgrade/core/legacy/020-wireless
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/lua
-
-
-local site = require 'gluon.site_config'
-local uci = require 'luci.model.uci'
-
-
-local c = uci.cursor()
-
-
-function delete_legacy_iface(iface)
-	for _, wifi in pairs(site.legacy.wifi_names) do
-		if wifi == iface['.name'] then
-			return true
-		end
-	end
-
-	return false
-end
-
-c:delete_all('wireless', 'wifi-iface', delete_legacy_iface)
-
-c:save('wireless')
-c:commit('wireless')
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/mesh-batman-adv-core/legacy/010-mesh b/package/gluon-legacy/files/lib/gluon/upgrade/mesh-batman-adv-core/legacy/010-mesh
deleted file mode 100755
index 45f27d94d..000000000
--- a/package/gluon-legacy/files/lib/gluon/upgrade/mesh-batman-adv-core/legacy/010-mesh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/lua
-
-
-local site = require 'gluon.site_config'
-local uci = require 'luci.model.uci'
-
-local c = uci.cursor()
-
-
-local s = c:get_all('network', site.legacy.mesh_ifname)
-c:delete('network', site.legacy.mesh_ifname)
-
-s.auto = nil
-s.accept_ra = nil
-s.defaultroute = nil
-s.proto = 'dhcpv6'
-s.reqprefix = 'no'
-
-c:section('network', 'interface', 'client', s)
-
-c:save('network')
-c:commit('network')
-- 
GitLab