From b5cfd91270e2d8fe458b020d115cd6720c2aa9dd Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Mon, 6 Jul 2009 21:28:18 -0500
Subject: LinHES-config: write udev rules for network interfaces based on mac
 address. Only done during install.

---
 abs/core-testing/LinHES-config/PKGBUILD        |  4 +--
 abs/core-testing/LinHES-config/mv_install.py   |  8 ++---
 abs/core-testing/LinHES-config/mv_network.py   | 44 +++++++++++++++++++++-----
 abs/core-testing/LinHES-config/systemconfig.py |  2 +-
 4 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/abs/core-testing/LinHES-config/PKGBUILD b/abs/core-testing/LinHES-config/PKGBUILD
index 56cbd1a..1775cb2 100755
--- a/abs/core-testing/LinHES-config/PKGBUILD
+++ b/abs/core-testing/LinHES-config/PKGBUILD
@@ -1,9 +1,9 @@
 pkgname=LinHES-config
 pkgver=2.0
-pkgrel=44
+pkgrel=49
 conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev )
 pkgdesc="Install and configure your system"
-depends=(bc libstatgrab  mysql-python expect curl dnsutils parted sg3_utils nmbscan system-templates rsync python-parted ddcxinfo python-pexpect)
+depends=(bc libstatgrab  mysql-python expect curl dnsutils parted sg3_utils nmbscan system-templates rsync python-parted ddcxinfo python-pexpect python-netifaces)
 arch=('i686')
 
 source=(mv_install.py mv_config.py mythinstall.bin myth_user_call file_time_offset.py install-ui.xml install_proxy.sh install_functions.sh systemconfig.sh install_db_chroot.sh restore_default_settings.sh xconfig.sh timezip.py soundconfig.sh LinHES-release issue MythVantage.sh create_master.sh build_diskless.sh networkconfig.sh autocard.py restore_km_db_chroot.sh README  mv_advanced.py  mv_common.py   mv_ir.py  mv_misc.py  mv_network.py  mv_screensaver.py  mv_smolt.py  mv_software.py  mv_webuser.py mv_hostype.py systemconfig.py myth_user_call.py)
diff --git a/abs/core-testing/LinHES-config/mv_install.py b/abs/core-testing/LinHES-config/mv_install.py
index efee91e..ab7c644 100755
--- a/abs/core-testing/LinHES-config/mv_install.py
+++ b/abs/core-testing/LinHES-config/mv_install.py
@@ -995,7 +995,7 @@ def full_install(hostoptions):
         runcmd(cmd)
         logging.info("Running systemconfig in chroot")
         #cmd = "  chroot %s %s/bin/systemconfig.sh misc, hostype, network, advanced, user, this_is_install" %(data_config.MOUNTPOINT, MVROOT)
-        cmd = "chroot %s %s/bin/systemconfig.sh all , this_is_install" %(data_config.MOUNTPOINT, MVROOT)
+        cmd = "chroot %s %s/bin/systemconfig.sh all,this_is_install" %(data_config.MOUNTPOINT, MVROOT)
         rc = runcmd(cmd)[0]
         if rc != 0 :
             error_out("Running systemconfig")
@@ -1017,7 +1017,7 @@ def full_install(hostoptions):
             logging.debug("touching /tmp/.dbsysfailed")
         else:
             #cmd = "  chroot %s %s/bin/systemconfig.sh misc, hostype, network, advanced, user, this_is_install" %(data_config.MOUNTPOINT, MVROOT)
-            cmd = "chroot %s %s/bin/systemconfig.sh all , this_is_install" %(data_config.MOUNTPOINT, MVROOT)
+            cmd = "chroot %s %s/bin/systemconfig.sh all,this_is_install" %(data_config.MOUNTPOINT, MVROOT)
             rc = runcmd(cmd)[0]
             if rc != 0 :
                 error_out("Running systemconfig")
@@ -1224,7 +1224,7 @@ def upgrade(hostoptions):
     mount_bind_chroot()
     logging.info("Running systemconfig in chroot")
     #cmd = "  chroot %s %s/bin/systemconfig.sh misc, hostype, network, advanced, user, this_is_install" %(data_config.MOUNTPOINT, MVROOT)
-    cmd = "chroot %s %s/bin/systemconfig.sh all , this_is_install" %(data_config.MOUNTPOINT, MVROOT)
+    cmd = "chroot %s %s/bin/systemconfig.sh all,this_is_install" %(data_config.MOUNTPOINT, MVROOT)
     rc = runcmd(cmd)[0]
     if rc != 0 :
         error_out("Running systemconfig")
@@ -1253,7 +1253,7 @@ def upgrade(hostoptions):
 
     logging.info("Running systemconfig in chroot 2nd time")
     #cmd = "  chroot %s %s/bin/systemconfig.sh misc, hostype, network, advanced, user, this_is_install" %(data_config.MOUNTPOINT, MVROOT)
-    cmd = "chroot %s %s/bin/systemconfig.sh all , this_is_install" %(data_config.MOUNTPOINT, MVROOT)
+    cmd = "chroot %s %s/bin/systemconfig.sh all,this_is_install" %(data_config.MOUNTPOINT, MVROOT)
     rc = runcmd(cmd)[0]
     if rc != 0 :
         error_out("Running systemconfig")
diff --git a/abs/core-testing/LinHES-config/mv_network.py b/abs/core-testing/LinHES-config/mv_network.py
index ae7f861..526faae 100755
--- a/abs/core-testing/LinHES-config/mv_network.py
+++ b/abs/core-testing/LinHES-config/mv_network.py
@@ -1,8 +1,9 @@
-# -*- coding: utf-8 -*-
+    # -*- coding: utf-8 -*-
 import sys , os, commands , glob, time, re
 import logging
 import mv_common
 import socket, fcntl, struct, array
+import netifaces
 global etcnetdir
 etcnetdir = "/etc/net/ifaces"
 
@@ -291,22 +292,49 @@ def devcheck(netdev):
     else:
         return False
 
-def find_active(systemconfig):
+def udev_rules(netdev):
+    filename = "/etc/udev/rules.d/net.rules"
+    if devcheck(netdev):
+        logging.info("    Finding macaddress for %s",netdev)
+        try:
+            macaddress = netifaces.ifaddresses(netdev)[netifaces.AF_LINK][0]['addr']
+            logging.debug("    Macaddress: %s",macaddress)
+        except:
+            logging.debug("    Couldn't find mac address for %s",netdev)
+            return
+        try:
+            f = open(filename,'a')
+        except:
+            logging.debug("    Couldn't open %s for writing", filename)
+            return
+        if netdev.startswith('eth'):
+            line = '''KERNEL=="eth*", SYSFS{address}=="%s", NAME="%s"''' % ( macaddress , netdev)
+        elif netdev.startswith('wlan'):
+            line = '''KERNEL=="wlan*", SYSFS{address}=="%s", NAME="%s"'''% ( macaddress , netdev)
+        elif netdev.startswith('ath'):
+            line = '''KERNEL=="ath*", SYSFS{address}=="%s", NAME="%s"''' % ( macaddress , netdev)
+        logging.debug("     adding to net.rules ")
+        logging.debug("    %s",line)
+        f.write(line)
+        f.write("\n")
+        f.close()
+
+
+
+def find_active(systemconfig,this_is_install):
     interfacelist=('eth0', 'eth1', 'wlan0', 'wlan1', 'ath0')
     logging.debug("    _Start of find_active")
 
     if systemconfig["mythdhcp"] == "1":
         mv_common.remove_file("/etc/resolv.conf")
-        #try:
-            #os.remove("/etc/resolv.conf")
-        #except:
-            #logging.debug("    couldn't remove /etc/resolv.conf")
         cmd = ''' echo search lan > /etc/resolv.conf '''
         mv_common.runcmd(cmd)
         cmd = ''' echo nameserver 127.0.0.1 >> /etc/resolv.conf '''
         mv_common.runcmd(cmd)
 
     for netdev in interfacelist:
+        if this_is_install:
+            udev_rules(netdev)
         currentnet = "HostActive" + netdev
         try:
             systemconfig[currentnet]
@@ -398,12 +426,12 @@ def hostname_change_check(systemconfig):
 
 
 
-def setup_network (systemconfig):
+def setup_network (systemconfig,this_is_install):
     logging.info("____Start of network____")
     logging.info("    Setting up the network")
     restartfe = hostname_change_check(systemconfig)
     setup_hostname(systemconfig)
-    find_active(systemconfig)
+    find_active(systemconfig,this_is_install)
     start_network()
     logging.info("__End of network\n")
     return restartfe
diff --git a/abs/core-testing/LinHES-config/systemconfig.py b/abs/core-testing/LinHES-config/systemconfig.py
index 4d69a1f..4418003 100755
--- a/abs/core-testing/LinHES-config/systemconfig.py
+++ b/abs/core-testing/LinHES-config/systemconfig.py
@@ -100,7 +100,7 @@ def main(argv):
         cmdmodule["smolt"] = True
 
     if cmdmodule["network"]:
-        restartfe = mv_network.setup_network(systemconfig)
+        restartfe = mv_network.setup_network(systemconfig, cmdmodule["this_is_install"])
         if restartfe == True :
             logging.debug("    Setting the frontend to restart due to network change")
             cmdmodule["restartfe"] = True
-- 
cgit v0.12

