93 lines
3.4 KiB
Python
93 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import datetime
|
|
import os
|
|
import re
|
|
import shutil
|
|
import subprocess
|
|
from urllib.request import urlopen
|
|
|
|
pkg = 'https://aif.square-r00t.net/cfgs/files/apacman.tar.xz'
|
|
local_pkg = '/tmp/apacman.tar.xz'
|
|
|
|
conf_options = {}
|
|
conf_options['apacman'] = {'enabled': ['needed', 'noconfirm', 'noedit', 'progress', 'purgebuild', 'skipcache', 'keepkeys'],
|
|
'disabled': [],
|
|
'values': {'tmpdir': '"/var/tmp/apacmantmp-$UID"'}}
|
|
conf_options['pacman'] = {'enabled': [],
|
|
'disabled': [],
|
|
'values': {'UseSyslog': None, 'Color': None, 'TotalDownload': None, 'CheckSpace': None, 'VerbosePkgLists': None}}
|
|
|
|
def downloadPkg(pkgfile, dlfile):
|
|
# Prep the destination
|
|
os.makedirs(os.path.dirname(dlfile), exist_ok = True)
|
|
# Download the pacman package
|
|
with urlopen(pkgfile) as url:
|
|
with open(dlfile, 'wb') as f:
|
|
f.write(url.read())
|
|
return()
|
|
|
|
def installPkg(pkgfile):
|
|
# Install it
|
|
subprocess.run(['pacman', '-Syyu']) # Installing from an inconsistent state is bad, mmkay?
|
|
subprocess.run(['pacman', '--noconfirm', '--needed', '-S', 'base-devel'])
|
|
subprocess.run(['pacman', '--noconfirm', '-Rdd', 'gcc']) # Required for multilib-devel
|
|
subprocess.run(['pacman', '--noconfirm', '--needed', '-S', 'multilib-devel'])
|
|
subprocess.run(['pacman', '--noconfirm', '--needed', '-U', pkgfile])
|
|
return()
|
|
|
|
def configurePkg(opts, pkgr):
|
|
cf = '/etc/{0}.conf'.format(pkgr)
|
|
# Configure it
|
|
shutil.copy2(cf, '{0}.bak.{1}'.format(cf, int(datetime.datetime.utcnow().timestamp())))
|
|
with open(cf, 'r') as f:
|
|
conf = f.readlines()
|
|
for idx, line in enumerate(conf):
|
|
l = line.split('=')
|
|
opt = l[0].strip('\n').strip()
|
|
if len(l) > 1:
|
|
val = l[1].strip('\n').strip()
|
|
# enabled options
|
|
for o in opts['enabled']:
|
|
if re.sub('^#?', '', opt).strip() == o:
|
|
if pkgr == 'apacman':
|
|
conf[idx] = '{0}=1\n'.format(o)
|
|
elif pkgr == 'pacman':
|
|
conf[idx] = '{0}\n'.format(o)
|
|
# disabled options
|
|
for o in opts['disabled']:
|
|
if re.sub('^#?', '', opt).strip() == o:
|
|
if pkgr == 'apacman':
|
|
conf[idx] = '{0}=0\n'.format(o)
|
|
elif pkgr == 'pacman':
|
|
conf[idx] = '#{0}\n'.format(o)
|
|
# values
|
|
for o in opts['values']:
|
|
if opts['values'][o] is not None:
|
|
if re.sub('^#?', '', opt).strip() == o:
|
|
if pkgr == 'apacman':
|
|
conf[idx] = '{0}={1}\n'.format(o, opts['values'][o])
|
|
elif pkgr == 'pacman':
|
|
conf[idx] = '{0} = {1}\n'.format(o, opts['values'][o])
|
|
else:
|
|
if re.sub('^#?', '', opt).strip() == o:
|
|
conf[idx] = '{0}\n'.format(o)
|
|
with open(cf, 'w') as f:
|
|
f.write(''.join(conf))
|
|
|
|
def finishPkg():
|
|
# Finish installing (optional deps)
|
|
for p in ('apacman-deps', 'apacman-utils', 'git', 'customizepkg-scripting', 'pkgfile', 'rsync'):
|
|
subprocess.run(['apacman', '--noconfirm', '--needed', '-S', p])
|
|
|
|
def main():
|
|
downloadPkg(pkg, local_pkg)
|
|
installPkg(local_pkg)
|
|
for tool in ('pacman', 'apacman'):
|
|
configurePkg(conf_options[tool], tool)
|
|
finishPkg()
|
|
return()
|
|
|
|
if __name__ == '__main__':
|
|
main()
|