First baseline done
This commit is contained in:
parent
c1f0e1b289
commit
02a1ebb509
|
|
@ -1,3 +1,85 @@
|
|||
#!/usr/bin/python3
|
||||
import psutil, os, re, struct, sys
|
||||
from glob import glob
|
||||
from socket import inet_ntoa, AF_INET, AF_INET6
|
||||
from collections import OrderedDict as oDict
|
||||
from subprocess import Popen, STDOUT, PIPE
|
||||
|
||||
print('Done')
|
||||
rootdir_pattern = re.compile('^.*?/devices')
|
||||
harddrives = oDict()
|
||||
|
||||
print(sys.argv)
|
||||
|
||||
def get_default_gateway_linux():
|
||||
"""Read the default gateway directly from /proc."""
|
||||
with open("/proc/net/route") as fh:
|
||||
for line in fh:
|
||||
fields = line.strip().split()
|
||||
if fields[1] != '00000000' or not int(fields[3], 16) & 2:
|
||||
continue
|
||||
|
||||
return inet_ntoa(struct.pack("<L", int(fields[2], 16)))
|
||||
|
||||
#for nic, opts in psutil.net_if_addrs().items():
|
||||
# for addr in opts:
|
||||
# if addr.family in (AF_INET, AF_INET6) and addr.address:
|
||||
# if addr.address in ('127.0.0.1', '::1'): continue
|
||||
# print(addr)
|
||||
|
||||
def update_git():
|
||||
default_gw = get_default_gateway_linux()
|
||||
if(default_gw):
|
||||
handle = Popen('git pull', shell='True', stdout=PIPE, stderr=STDOUT)
|
||||
output = b''
|
||||
while handle.poll() is None:
|
||||
output += handle.stdout.read()
|
||||
output += handle.stdout.read()
|
||||
|
||||
if b'error:' in output:
|
||||
print('[E] Could not update git source for some reason.')
|
||||
return
|
||||
|
||||
# b'From github.com:Torxed/archinstall\n 339d687..80b97f3 master -> origin/master\nUpdating 339d687..80b97f3\nFast-forward\n README.md | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n'
|
||||
tmp = re.findall(b'[0-9]+ file changed', output)
|
||||
if len(tmp):
|
||||
num_changes = int(tmp[0].split(b' ',1)[0])
|
||||
if(num_changes):
|
||||
## Reboot the script (in same context)
|
||||
os.execv('/usr/bin/python3', ['archinstall.py', 'archinstall.py'] + sys.argv[1:])
|
||||
|
||||
def device_state(name):
|
||||
# Based out of: https://askubuntu.com/questions/528690/how-to-get-list-of-all-non-removable-disk-device-names-ssd-hdd-and-sata-ide-onl/528709#528709
|
||||
with open('/sys/block/{}/device/block/{}/removable'.format(name, name)) as f:
|
||||
if f.read(1) == '1':
|
||||
return
|
||||
|
||||
path = rootdir_pattern.sub('', os.readlink('/sys/block/{}'.format(name)))
|
||||
hotplug_buses = ("usb", "ieee1394", "mmc", "pcmcia", "firewire")
|
||||
for bus in hotplug_buses:
|
||||
if os.path.exists('/sys/bus/{}'.format(bus)):
|
||||
for device_bus in os.listdir('/sys/bus/{}/devices'.format(bus)):
|
||||
device_link = rootdir_pattern.sub('', os.readlink('/sys/bus/{}/devices/{}'.format(bus, device_bus)))
|
||||
if re.search(device_link, path):
|
||||
return
|
||||
return True
|
||||
|
||||
def update_drive_list():
|
||||
for path in glob('/sys/block/*/device'):
|
||||
name = re.sub('.*/(.*?)/device', '\g<1>', path)
|
||||
if device_state(name):
|
||||
harddrives['/dev/{}'.format(name)] = psutil.disk_usage('/dev/{}'.format(name))
|
||||
|
||||
if __name__ == '__main__':
|
||||
update_git() # Breaks and restarts the script if an update was found.
|
||||
update_drive_list()
|
||||
|
||||
first_drive = list(harddrives.keys())[0]
|
||||
print(harddrives[first_drive])
|
||||
|
||||
#for part in psutil.disk_partitions():
|
||||
# print(part)
|
||||
|
||||
## Networking
|
||||
#print(psutil.net_if_addrs())
|
||||
|
||||
print('Done')
|
||||
|
|
|
|||
Loading…
Reference in New Issue