Compare commits
49 Commits
v3.00-BETA
...
master
Author | SHA1 | Date | |
---|---|---|---|
77c1aea510 | |||
e72eee4dec | |||
2b233b9af9 | |||
c2cfd3298f | |||
2db702107d | |||
614c1b3e6f | |||
80d5d127ca | |||
c10ceaa225 | |||
167cd342fa | |||
f1f37547dd | |||
034092ae49 | |||
76da0bb29a | |||
c489837d40 | |||
705ad0732c | |||
7e5e38a68a | |||
84f062813e | |||
111e812146 | |||
a54b5b110d | |||
4217b7323b | |||
02b4fbc454 | |||
cc3f23efc7 | |||
7c3a4a61b6 | |||
e87976d740 | |||
bf3dc2bb4c | |||
fae0a53034 | |||
f89283a301 | |||
3bcc023c01 | |||
74412e4dea | |||
676265b2aa | |||
6f3a0f6b86 | |||
ef8562fb0e | |||
01e1b979f8 | |||
481a3e4cf9 | |||
f9c44ecc8e | |||
c9ccb3aa17 | |||
6ff5a96d76 | |||
e3236eb0d6 | |||
60791f1596 | |||
f37221c833 | |||
9afa665a75 | |||
eec74f16e6 | |||
6760b46c5d | |||
06c8924367 | |||
ac7bfa7320 | |||
2545d0742a | |||
f26e03fda9 | |||
47684f989b | |||
da3c8fa64a | |||
6d6585a62c |
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,6 +1,7 @@
|
|||||||
# We don't want local build settings in case someone's using
|
# We don't want local build settings in case someone's using
|
||||||
# the git dir as a place to store their build.ini
|
# the git dir as a place to store their build.ini
|
||||||
/build.ini
|
/build.ini
|
||||||
|
/build.ini.*
|
||||||
/dist.build.ini
|
/dist.build.ini
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
@ -8,7 +9,11 @@
|
|||||||
/overlay
|
/overlay
|
||||||
!/overlay/x86_64
|
!/overlay/x86_64
|
||||||
!/overlay/i686
|
!/overlay/i686
|
||||||
!/overlay/etc/
|
!/overlay/etc
|
||||||
|
extra/templates/overlay
|
||||||
|
!extra/templates/overlay/x86_64
|
||||||
|
!extra/templates/overlay/i686
|
||||||
|
!extra/templates/overlay/etc
|
||||||
# The default doesn't store these in the git working dir,
|
# The default doesn't store these in the git working dir,
|
||||||
# but better safe than sorry.
|
# but better safe than sorry.
|
||||||
/root.x86_64
|
/root.x86_64
|
||||||
|
@ -12,8 +12,15 @@ def genGPG(conf):
|
|||||||
dlpath = build['dlpath']
|
dlpath = build['dlpath']
|
||||||
bdisk = conf['bdisk']
|
bdisk = conf['bdisk']
|
||||||
gpghome = conf['gpg']['mygpghome']
|
gpghome = conf['gpg']['mygpghome']
|
||||||
distkey = build['gpgkey']
|
distkeys = []
|
||||||
gpgkeyserver = build['gpgkeyserver']
|
gpgkeyserver = []
|
||||||
|
for a in conf['build']['arch']:
|
||||||
|
keysrv = conf['src'][a]['gpgkeyserver']
|
||||||
|
distkey = conf['src'][a]['gpgkey']
|
||||||
|
if keysrv and (keysrv not in gpgkeyserver):
|
||||||
|
gpgkeyserver.append(keysrv)
|
||||||
|
if distkey and(distkey not in distkeys):
|
||||||
|
distkeys.append(distkey)
|
||||||
templates_dir = '{0}/extra/templates'.format(build['basedir'])
|
templates_dir = '{0}/extra/templates'.format(build['basedir'])
|
||||||
mykey = False
|
mykey = False
|
||||||
pkeys = []
|
pkeys = []
|
||||||
@ -28,28 +35,30 @@ def genGPG(conf):
|
|||||||
if gpghome == '':
|
if gpghome == '':
|
||||||
# We'll generate a key if we can't find one here.
|
# We'll generate a key if we can't find one here.
|
||||||
gpghome = build['dlpath'] + '/.gnupg'
|
gpghome = build['dlpath'] + '/.gnupg'
|
||||||
|
killStaleAgent(conf)
|
||||||
os.environ['GNUPGHOME'] = gpghome
|
os.environ['GNUPGHOME'] = gpghome
|
||||||
gpg = gpgme.Context()
|
gpg = gpgme.Context()
|
||||||
# do we need to add a keyserver?
|
# do we need to add a keyserver?
|
||||||
if gpgkeyserver != '':
|
if len(gpgkeyserver) != 0:
|
||||||
dirmgr = '{0}/dirmngr.conf'.format(gpghome)
|
dirmgr = '{0}/dirmngr.conf'.format(gpghome)
|
||||||
|
for s in gpgkeyserver:
|
||||||
if os.path.isfile(dirmgr):
|
if os.path.isfile(dirmgr):
|
||||||
with open(dirmgr, 'r+') as f:
|
with open(dirmgr, 'r+') as f:
|
||||||
findme = any(gpgkeyserver in line for line in f)
|
findme = any(s in line for line in f)
|
||||||
if not findme:
|
if not findme:
|
||||||
f.seek(0, os.SEEK_END)
|
f.seek(0, os.SEEK_END)
|
||||||
f.write("\n# Added by {0}.\nkeyserver {1}\n".format(
|
f.write("\n# Added by {0}.\nkeyserver {1}\n".format(
|
||||||
bdisk['pname'],
|
bdisk['pname'],
|
||||||
gpgkeyserver))
|
s))
|
||||||
if mykey:
|
if mykey:
|
||||||
try:
|
try:
|
||||||
privkey = gpg.get_key(mykey, True)
|
pkeys.append(gpg.get_key(mykey, True))
|
||||||
except:
|
except:
|
||||||
exit('{0}: ERROR: You specified using {1} but we have no secret key for that ID!'.format(
|
exit('{0}: ERROR: You specified using {1} but we have no secret key for that ID!'.format(
|
||||||
datetime.datetime.now(),
|
datetime.datetime.now(),
|
||||||
mykey))
|
mykey))
|
||||||
else:
|
else:
|
||||||
for key in gpg.keylist(None,True):
|
for key in gpg.keylist(None, True):
|
||||||
if key.can_sign:
|
if key.can_sign:
|
||||||
pkeys.append(key)
|
pkeys.append(key)
|
||||||
break
|
break
|
||||||
@ -62,25 +71,22 @@ def genGPG(conf):
|
|||||||
privkey = gpg.get_key(gpg.genkey(tpl_out).fpr, True)
|
privkey = gpg.get_key(gpg.genkey(tpl_out).fpr, True)
|
||||||
pkeys.append(privkey)
|
pkeys.append(privkey)
|
||||||
# do we need to add a keyserver? this is for the freshly-generated GNUPGHOME
|
# do we need to add a keyserver? this is for the freshly-generated GNUPGHOME
|
||||||
if build['gpgkeyserver'] != '':
|
if len(gpgkeyserver) != 0:
|
||||||
dirmgr = '{0}/dirmngr.conf'.format(gpghome)
|
dirmgr = '{0}/dirmngr.conf'.format(gpghome)
|
||||||
|
for s in gpgkeyserver:
|
||||||
with open(dirmgr, 'r+') as f:
|
with open(dirmgr, 'r+') as f:
|
||||||
findme = any(gpgkeyserver in line for line in f)
|
findme = any(s in line for line in f)
|
||||||
if not findme:
|
if not findme:
|
||||||
f.seek(0, os.SEEK_END)
|
f.seek(0, os.SEEK_END)
|
||||||
f.write("\n# Added by {0}.\nkeyserver {1}\n".format(
|
f.write("\n# Added by {0}.\nkeyserver {1}\n".format(
|
||||||
bdisk['pname'],
|
bdisk['pname'],
|
||||||
build['gpgkeyserver']))
|
s))
|
||||||
gpg.signers = pkeys
|
gpg.signers = pkeys
|
||||||
# Now we try to find and add the key for the base image.
|
# Now we try to find and add the key for the base image.
|
||||||
gpg.keylist_mode = gpgme.KEYLIST_MODE_EXTERN # remote (keyserver)
|
gpg.keylist_mode = gpgme.KEYLIST_MODE_EXTERN # remote (keyserver)
|
||||||
if distkey: # testing
|
if len(distkeys) > 0: # testing
|
||||||
#try:
|
for k in distkeys:
|
||||||
key = gpg.get_key(distkey)
|
key = gpg.get_key(k)
|
||||||
#except:
|
|
||||||
# exit('{0}: ERROR: We cannot find key ID {1}!'.format(
|
|
||||||
# datetime.datetime.now(),
|
|
||||||
# distkey))
|
|
||||||
importkey = key.subkeys[0].fpr
|
importkey = key.subkeys[0].fpr
|
||||||
gpg.keylist_mode = gpgme.KEYLIST_MODE_LOCAL # local keyring (default)
|
gpg.keylist_mode = gpgme.KEYLIST_MODE_LOCAL # local keyring (default)
|
||||||
DEVNULL = open(os.devnull, 'w')
|
DEVNULL = open(os.devnull, 'w')
|
||||||
@ -94,8 +100,8 @@ def genGPG(conf):
|
|||||||
'0x{0}'.format(importkey)]
|
'0x{0}'.format(importkey)]
|
||||||
subprocess.call(cmd, stdout = DEVNULL, stderr = subprocess.STDOUT)
|
subprocess.call(cmd, stdout = DEVNULL, stderr = subprocess.STDOUT)
|
||||||
sigkeys = []
|
sigkeys = []
|
||||||
for k in gpg.get_key(importkey).subkeys:
|
for i in gpg.get_key(importkey).subkeys:
|
||||||
sigkeys.append(k.fpr)
|
sigkeys.append(i.fpr)
|
||||||
cmd = ['/usr/bin/gpg',
|
cmd = ['/usr/bin/gpg',
|
||||||
'--batch',
|
'--batch',
|
||||||
'--yes',
|
'--yes',
|
||||||
@ -111,13 +117,13 @@ def killStaleAgent(conf):
|
|||||||
# Kill off any stale GPG agents running.
|
# Kill off any stale GPG agents running.
|
||||||
# Probably not even needed, but good to have.
|
# Probably not even needed, but good to have.
|
||||||
chrootdir = conf['build']['chrootdir']
|
chrootdir = conf['build']['chrootdir']
|
||||||
dlpath = conf['build']['dlpath']
|
gpgpath = conf['gpg']['mygpghome']
|
||||||
procs = psutil.process_iter()
|
procs = psutil.process_iter()
|
||||||
plst = []
|
plst = []
|
||||||
for p in procs:
|
for p in procs:
|
||||||
if (p.name() in ('gpg-agent', 'dirmngr') and p.uids()[0] == os.getuid()):
|
if (p.name() in ('gpg-agent', 'dirmngr') and p.uids()[0] == os.getuid()):
|
||||||
pd = psutil.Process(p.pid).as_dict()
|
pd = psutil.Process(p.pid).as_dict()
|
||||||
for d in (chrootdir, dlpath):
|
for d in (chrootdir, gpgpath):
|
||||||
if pd['cwd'].startswith('{0}'.format(d)):
|
if pd['cwd'].startswith('{0}'.format(d)):
|
||||||
plst.append(p.pid)
|
plst.append(p.pid)
|
||||||
if len(plst) >= 1:
|
if len(plst) >= 1:
|
||||||
@ -125,7 +131,7 @@ def killStaleAgent(conf):
|
|||||||
psutil.Process(p).terminate()
|
psutil.Process(p).terminate()
|
||||||
|
|
||||||
def signIMG(path, conf):
|
def signIMG(path, conf):
|
||||||
if conf['build']['gpg']:
|
if conf['build']['sign']:
|
||||||
# Do we want to kill off any stale gpg-agents? (So we spawn a new one)
|
# Do we want to kill off any stale gpg-agents? (So we spawn a new one)
|
||||||
# Requires further testing.
|
# Requires further testing.
|
||||||
#killStaleAgent()
|
#killStaleAgent()
|
||||||
|
@ -138,11 +138,12 @@ def chrootTrim(build):
|
|||||||
humanize.naturalsize(
|
humanize.naturalsize(
|
||||||
os.path.getsize(tarball)),
|
os.path.getsize(tarball)),
|
||||||
dbdir))
|
dbdir))
|
||||||
for d in ('etc/pacman.d/gnupg', 'var/empty/.gnupg'):
|
#for d in ('etc/pacman.d/gnupg', 'var/empty/.gnupg'): # actually, we should probably keep these.
|
||||||
if os.path.isdir('{0}/root.{1}/{2}'.format(chrootdir, a, d)):
|
# they don't take much space, and it's a PITA to pacman-key --init && pacman-key --populate again on boot.
|
||||||
shutil.rmtree('{0}/root.{1}/{2}'.format(chrootdir, a, d))
|
# if os.path.isdir('{0}/root.{1}/{2}'.format(chrootdir, a, d)):
|
||||||
|
# shutil.rmtree('{0}/root.{1}/{2}'.format(chrootdir, a, d))
|
||||||
# TODO: move the self-cleanup in pre-build.sh to here.
|
# TODO: move the self-cleanup in pre-build.sh to here.
|
||||||
delme = ['/root/.gnupg',
|
delme = [#'/root/.gnupg', # see above
|
||||||
'/root/.bash_history',
|
'/root/.bash_history',
|
||||||
#'/var/log/chroot_install.log', # disable for now. maybe always disable if debug is enabled? TODO.
|
#'/var/log/chroot_install.log', # disable for now. maybe always disable if debug is enabled? TODO.
|
||||||
'/.git',
|
'/.git',
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
#!/bin/env python3
|
#!/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
import host
|
import host
|
||||||
import prep
|
import prep
|
||||||
import bchroot
|
import bchroot
|
||||||
@ -8,14 +10,17 @@ import bSSL
|
|||||||
import ipxe
|
import ipxe
|
||||||
import bsync
|
import bsync
|
||||||
import bGPG
|
import bGPG
|
||||||
|
import os
|
||||||
|
|
||||||
# we need to:
|
|
||||||
# we also need to figure out how to implement "mentos" (old bdisk) like functionality, letting us reuse an existing chroot install if possible to save time for future builds.
|
def bdisk(args):
|
||||||
# if not, though, it's no big deal.
|
# we also need to figure out how to implement "mentos" (old bdisk) like functionality, letting us reuse an
|
||||||
# still on the todo: iPXE
|
# existing chroot install if possible to save time for future builds.
|
||||||
if __name__ == '__main__':
|
# if not, though, it's no big deal.
|
||||||
|
if os.getuid() != 0:
|
||||||
|
exit('{0}: ERROR: BDisk *must* be run as the root user or with sudo!'.format(datetime.datetime.now()))
|
||||||
print('{0}: Starting.'.format(datetime.datetime.now()))
|
print('{0}: Starting.'.format(datetime.datetime.now()))
|
||||||
conf = host.parseConfig(host.getConfig())[1]
|
conf = host.parseConfig(host.getConfig(conf_file = args['buildini']))[1]
|
||||||
prep.dirChk(conf)
|
prep.dirChk(conf)
|
||||||
conf['gpgobj'] = bGPG.genGPG(conf)
|
conf['gpgobj'] = bGPG.genGPG(conf)
|
||||||
prep.buildChroot(conf, keep = False)
|
prep.buildChroot(conf, keep = False)
|
||||||
@ -47,3 +52,20 @@ if __name__ == '__main__':
|
|||||||
bsync.git(conf)
|
bsync.git(conf)
|
||||||
bsync.rsync(conf)
|
bsync.rsync(conf)
|
||||||
print('{0}: Finish.'.format(datetime.datetime.now()))
|
print('{0}: Finish.'.format(datetime.datetime.now()))
|
||||||
|
|
||||||
|
def parseArgs():
|
||||||
|
args = argparse.ArgumentParser(description = 'BDisk - a tool for building live/rescue media.',
|
||||||
|
epilog = 'brent s. || 2017 || https://bdisk.square-r00t.net')
|
||||||
|
args.add_argument('buildini',
|
||||||
|
metavar = '/path/to/build.ini',
|
||||||
|
default = '/etc/bdisk/build.ini',
|
||||||
|
nargs = '?',
|
||||||
|
help = 'The full/absolute path to the build.ini to use for this run. The default is /etc/bdisk/build.ini, but see https://bdisk.square-r00t.net/#the_code_build_ini_code_file.')
|
||||||
|
return(args)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = vars(parseArgs().parse_args())
|
||||||
|
bdisk(args)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
@ -32,12 +32,12 @@ def http(conf):
|
|||||||
datetime.datetime.now(),
|
datetime.datetime.now(),
|
||||||
httpdir))
|
httpdir))
|
||||||
for a in arch:
|
for a in arch:
|
||||||
for i in ('md5', 'sfs', 'sha256'):
|
for i in ('md5', 'sfs', 'sha256', 'sha512'):
|
||||||
httpfiles['{0}/{1}/airootfs.{2}'.format(bdisk['name'], a, i)] = '{0}/{1}/airootfs.{2}'.format(bdisk['name'], a, i)
|
httpfiles['{0}/{1}/airootfs.{2}'.format(bdisk['name'], a, i)] = '{0}/{1}/airootfs.{2}'.format(bdisk['name'], a, i)
|
||||||
httpfiles['VERSION_INFO.txt'] = 'VERSION_INFO.txt'
|
httpfiles['VERSION_INFO.txt'] = 'VERSION_INFO.txt'
|
||||||
if 'x86_64' in arch:
|
if 'x86_64' in arch:
|
||||||
httpfiles['boot/{0}.64.kern'.format(bdisk['uxname'])] = '{0}.64.kern'.format(bdisk['uxname'])
|
httpfiles['boot/{0}.64.kern'.format(bdisk['uxname'])] = '{0}.64.kern'.format(bdisk['uxname'])
|
||||||
httpfiles['boot/{0}.64.img'.format(bdisk['uxname'])] = '{0}.32.img'.format(bdisk['uxname'])
|
httpfiles['boot/{0}.64.img'.format(bdisk['uxname'])] = '{0}.64.img'.format(bdisk['uxname'])
|
||||||
if 'i686' in arch:
|
if 'i686' in arch:
|
||||||
httpfiles['boot/{0}.32.kern'.format(bdisk['uxname'])] = '{0}.32.kern'.format(bdisk['uxname'])
|
httpfiles['boot/{0}.32.kern'.format(bdisk['uxname'])] = '{0}.32.kern'.format(bdisk['uxname'])
|
||||||
httpfiles['boot/{0}.32.img'.format(bdisk['uxname'])] = '{0}.32.img'.format(bdisk['uxname'])
|
httpfiles['boot/{0}.32.img'.format(bdisk['uxname'])] = '{0}.32.img'.format(bdisk['uxname'])
|
||||||
@ -48,6 +48,7 @@ def http(conf):
|
|||||||
fulldest = '{0}/{1}'.format(httpdir, destpath)
|
fulldest = '{0}/{1}'.format(httpdir, destpath)
|
||||||
parentdir = os.path.split(fulldest)[0]
|
parentdir = os.path.split(fulldest)[0]
|
||||||
os.makedirs(parentdir, exist_ok = True)
|
os.makedirs(parentdir, exist_ok = True)
|
||||||
|
if os.path.lexists('{0}/{1}'.format(prepdir, k)):
|
||||||
shutil.copy2('{0}/{1}'.format(prepdir, k), '{0}/{1}'.format(httpdir, httpfiles[k]))
|
shutil.copy2('{0}/{1}'.format(prepdir, k), '{0}/{1}'.format(httpdir, httpfiles[k]))
|
||||||
for root, dirs, files in os.walk(httpdir):
|
for root, dirs, files in os.walk(httpdir):
|
||||||
for d in dirs:
|
for d in dirs:
|
||||||
@ -80,7 +81,7 @@ def tftp(conf):
|
|||||||
datetime.datetime.now(),
|
datetime.datetime.now(),
|
||||||
tftpdir))
|
tftpdir))
|
||||||
for a in arch:
|
for a in arch:
|
||||||
for i in ('md5', 'sfs', 'sha256'):
|
for i in ('md5', 'sfs', 'sha256', 'sha512'):
|
||||||
tftpfiles['{0}/{1}/airootfs.{2}'.format(bdisk['name'], a, i)] = '{0}/{1}/airootfs.{2}'.format(bdisk['name'], a, i)
|
tftpfiles['{0}/{1}/airootfs.{2}'.format(bdisk['name'], a, i)] = '{0}/{1}/airootfs.{2}'.format(bdisk['name'], a, i)
|
||||||
tftpfiles['VERSION_INFO.txt'] = 'VERSION_INFO.txt'
|
tftpfiles['VERSION_INFO.txt'] = 'VERSION_INFO.txt'
|
||||||
if 'x86_64' in arch:
|
if 'x86_64' in arch:
|
||||||
|
@ -21,6 +21,7 @@ def genImg(conf):
|
|||||||
basedir = build['basedir']
|
basedir = build['basedir']
|
||||||
prepdir = build['prepdir']
|
prepdir = build['prepdir']
|
||||||
hashes = {}
|
hashes = {}
|
||||||
|
hashes['sha512'] = {}
|
||||||
hashes['sha256'] = {}
|
hashes['sha256'] = {}
|
||||||
hashes['md5'] = {}
|
hashes['md5'] = {}
|
||||||
squashfses = []
|
squashfses = []
|
||||||
@ -52,9 +53,10 @@ def genImg(conf):
|
|||||||
humanize.naturalsize(
|
humanize.naturalsize(
|
||||||
os.path.getsize(squashimg))))
|
os.path.getsize(squashimg))))
|
||||||
# Generate the checksum files
|
# Generate the checksum files
|
||||||
print("{0}: [BUILD] Generating SHA256, MD5 checksums ({1})...".format(
|
print("{0}: [BUILD] Generating SHA512 SHA256, MD5 checksums ({1})...".format(
|
||||||
datetime.datetime.now(),
|
datetime.datetime.now(),
|
||||||
squashimg))
|
squashimg))
|
||||||
|
hashes['sha512'][a] = hashlib.sha512()
|
||||||
hashes['sha256'][a] = hashlib.sha256()
|
hashes['sha256'][a] = hashlib.sha256()
|
||||||
hashes['md5'][a] = hashlib.md5()
|
hashes['md5'][a] = hashlib.md5()
|
||||||
with open(squashimg, 'rb') as f:
|
with open(squashimg, 'rb') as f:
|
||||||
@ -63,8 +65,11 @@ def genImg(conf):
|
|||||||
if not stream:
|
if not stream:
|
||||||
break
|
break
|
||||||
# NOTE: these items are hashlib objects, NOT strings!
|
# NOTE: these items are hashlib objects, NOT strings!
|
||||||
|
hashes['sha512'][a].update(stream)
|
||||||
hashes['sha256'][a].update(stream)
|
hashes['sha256'][a].update(stream)
|
||||||
hashes['md5'][a].update(stream)
|
hashes['md5'][a].update(stream)
|
||||||
|
with open(airoot + 'airootfs.sha512', 'w+') as f:
|
||||||
|
f.write("{0} airootfs.sfs\n".format(hashes['sha512'][a].hexdigest()))
|
||||||
with open(airoot + 'airootfs.sha256', 'w+') as f:
|
with open(airoot + 'airootfs.sha256', 'w+') as f:
|
||||||
f.write("{0} airootfs.sfs\n".format(hashes['sha256'][a].hexdigest()))
|
f.write("{0} airootfs.sfs\n".format(hashes['sha256'][a].hexdigest()))
|
||||||
with open(airoot + 'airootfs.md5', 'w+') as f:
|
with open(airoot + 'airootfs.md5', 'w+') as f:
|
||||||
@ -329,7 +334,7 @@ def genISO(conf):
|
|||||||
tpl_loader = jinja2.FileSystemLoader(templates_dir)
|
tpl_loader = jinja2.FileSystemLoader(templates_dir)
|
||||||
env = jinja2.Environment(loader = tpl_loader)
|
env = jinja2.Environment(loader = tpl_loader)
|
||||||
tpl = env.get_template(isolinux_cfg)
|
tpl = env.get_template(isolinux_cfg)
|
||||||
tpl_out = tpl.render(build = build, bdisk = bdisk)
|
tpl_out = tpl.render(build = build, bdisk = bdisk, bitness = bitness)
|
||||||
with open(sysl_tmp + '/isolinux.cfg', "w+") as f:
|
with open(sysl_tmp + '/isolinux.cfg', "w+") as f:
|
||||||
f.write(tpl_out)
|
f.write(tpl_out)
|
||||||
# And we need to build the ISO!
|
# And we need to build the ISO!
|
||||||
|
@ -24,10 +24,13 @@ def getHostname():
|
|||||||
hostname = platform.node()
|
hostname = platform.node()
|
||||||
return(hostname)
|
return(hostname)
|
||||||
|
|
||||||
def getConfig(conf_file='/etc/bdisk/build.ini'):
|
def getConfig(conf_file = '/etc/bdisk/build.ini'):
|
||||||
conf = False
|
conf = False
|
||||||
# define some defailt conf paths in case we're installed by
|
# define some defailt conf paths in case we're installed by
|
||||||
# a package manager. in order of the paths we should search.
|
# a package manager. in order of the paths we should search.
|
||||||
|
currentdir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
currentdir_user = os.path.abspath('{0}/../build.ini'.format(currentdir))
|
||||||
|
currentdir_def = os.path.abspath('{0}/../extra/dist.build.ini'.format(currentdir))
|
||||||
default_conf_paths = ['/etc/bdisk/build.ini',
|
default_conf_paths = ['/etc/bdisk/build.ini',
|
||||||
'/usr/share/bdisk/build.ini',
|
'/usr/share/bdisk/build.ini',
|
||||||
'/usr/share/bdisk/extra/build.ini',
|
'/usr/share/bdisk/extra/build.ini',
|
||||||
@ -36,7 +39,8 @@ def getConfig(conf_file='/etc/bdisk/build.ini'):
|
|||||||
'/usr/local/share/docs/bdisk/build.ini',
|
'/usr/local/share/docs/bdisk/build.ini',
|
||||||
'/opt/dev/bdisk/build.ini',
|
'/opt/dev/bdisk/build.ini',
|
||||||
'/opt/dev/bdisk/extra/build.ini',
|
'/opt/dev/bdisk/extra/build.ini',
|
||||||
'/opt/dev/bdisk/extra/dist.build.ini']
|
'/opt/dev/bdisk/extra/dist.build.ini',
|
||||||
|
currentdir_user]
|
||||||
# if we weren't given one/using the default...
|
# if we weren't given one/using the default...
|
||||||
if conf_file == '/etc/bdisk/build.ini':
|
if conf_file == '/etc/bdisk/build.ini':
|
||||||
if not os.path.isfile(conf_file):
|
if not os.path.isfile(conf_file):
|
||||||
@ -46,7 +50,9 @@ def getConfig(conf_file='/etc/bdisk/build.ini'):
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
conf = conf_file
|
conf = conf_file
|
||||||
defconf = '{0}/../extra/dist.build.ini'.format(os.path.dirname(os.path.realpath(__file__)))
|
else:
|
||||||
|
conf = conf_file
|
||||||
|
defconf = os.path.abspath('{0}/../extra/dist.build.ini'.format(os.path.dirname(os.path.realpath(__file__))))
|
||||||
if not conf:
|
if not conf:
|
||||||
# okay, so let's check for distributed/"blank" ini's
|
# okay, so let's check for distributed/"blank" ini's
|
||||||
# since we can't seem to find one.
|
# since we can't seem to find one.
|
||||||
@ -68,9 +74,9 @@ def parseConfig(confs):
|
|||||||
config_dict = {s:dict(config.items(s)) for s in config.sections()}
|
config_dict = {s:dict(config.items(s)) for s in config.sections()}
|
||||||
# Convert the booleans to pythonic booleans in the dict...
|
# Convert the booleans to pythonic booleans in the dict...
|
||||||
config_dict['bdisk']['user'] = config['bdisk'].getboolean('user')
|
config_dict['bdisk']['user'] = config['bdisk'].getboolean('user')
|
||||||
config_dict['build']['gpg'] = config['build'].getboolean('gpg')
|
|
||||||
config_dict['build']['i_am_a_racecar'] = config['build'].getboolean('i_am_a_racecar')
|
config_dict['build']['i_am_a_racecar'] = config['build'].getboolean('i_am_a_racecar')
|
||||||
config_dict['build']['ipxe'] = config['build'].getboolean('ipxe')
|
config_dict['build']['ipxe'] = config['build'].getboolean('ipxe')
|
||||||
|
config_dict['build']['sign'] = config['build'].getboolean('sign')
|
||||||
config_dict['build']['multiarch'] = (config_dict['build']['multiarch']).lower()
|
config_dict['build']['multiarch'] = (config_dict['build']['multiarch']).lower()
|
||||||
config_dict['ipxe']['iso'] = config['ipxe'].getboolean('iso')
|
config_dict['ipxe']['iso'] = config['ipxe'].getboolean('iso')
|
||||||
config_dict['ipxe']['usb'] = config['ipxe'].getboolean('usb')
|
config_dict['ipxe']['usb'] = config['ipxe'].getboolean('usb')
|
||||||
@ -91,12 +97,17 @@ def parseConfig(confs):
|
|||||||
# commits on top of a new tagged release). e.g. for build Y:
|
# commits on top of a new tagged release). e.g. for build Y:
|
||||||
# v#.##-Y or v#.##rX-Y
|
# v#.##-Y or v#.##rX-Y
|
||||||
if config_dict['bdisk']['ver'] == '':
|
if config_dict['bdisk']['ver'] == '':
|
||||||
|
try:
|
||||||
repo = git.Repo(config_dict['build']['basedir'])
|
repo = git.Repo(config_dict['build']['basedir'])
|
||||||
refs = repo.git.describe(repo.head.commit).split('-')
|
refs = repo.git.describe(repo.head.commit).split('-')
|
||||||
if len(refs) >= 2:
|
if len(refs) >= 2:
|
||||||
config_dict['bdisk']['ver'] = refs[0] + 'r' + refs[1]
|
config_dict['bdisk']['ver'] = refs[0] + 'r' + refs[1]
|
||||||
else:
|
else:
|
||||||
config_dict['bdisk']['ver'] = refs[0]
|
config_dict['bdisk']['ver'] = refs[0]
|
||||||
|
except:
|
||||||
|
exit(('{0}: ERROR: {1} is NOT a valid git repository, and you did not specify bdisk:ver in your build.ini! ' +
|
||||||
|
'Did you perhaps install from a package manager? Please refer to the documentation.').format(datetime.datetime.now(),
|
||||||
|
config_dict['build']['basedir']))
|
||||||
# And the build number.
|
# And the build number.
|
||||||
# TODO: support tracking builds per version. i.e. in buildnum:
|
# TODO: support tracking builds per version. i.e. in buildnum:
|
||||||
# v2.51r13:0
|
# v2.51r13:0
|
||||||
@ -126,16 +137,20 @@ def parseConfig(confs):
|
|||||||
config_dict['build']['multiarch']))
|
config_dict['build']['multiarch']))
|
||||||
## VALIDATORS ##
|
## VALIDATORS ##
|
||||||
# Validate bootstrap mirror
|
# Validate bootstrap mirror
|
||||||
if (validators.domain(config_dict['build']['mirror']) or validators.ipv4(
|
config_dict['src'] = {}
|
||||||
config_dict['build']['mirror']) or validatords.ipv6(
|
for a in config_dict['build']['arch']:
|
||||||
config_dict['build']['mirror'])):
|
config_dict['src'][a] = config_dict['source_' + a]
|
||||||
|
if (validators.domain(config_dict['src'][a]['mirror']) or validators.ipv4(
|
||||||
|
config_dict['src'][a]['mirror']) or validatords.ipv6(
|
||||||
|
config_dict['src'][a]['mirror'])):
|
||||||
try:
|
try:
|
||||||
getaddrinfo(config_dict['build']['mirror'], None)
|
getaddrinfo(config_dict['src'][a]['mirror'], None)
|
||||||
except:
|
except:
|
||||||
exit(('{0}: ERROR: {1} does not resolve and cannot be used as a ' +
|
exit(('{0}: ERROR: {1} does not resolve and cannot be used as a ' +
|
||||||
'mirror for the bootstrap tarballs. Check your configuration.').format(
|
'mirror for the bootstrap tarballs. Check your configuration.').format(
|
||||||
datetime.datetime.now(),
|
datetime.datetime.now(),
|
||||||
config_dict['build']['host']))
|
config_dict['src'][a]['host']))
|
||||||
|
config_dict['src'][a]['gpg'] = config['source_' + a].getboolean('gpg')
|
||||||
# Are we rsyncing? If so, validate the rsync host.
|
# Are we rsyncing? If so, validate the rsync host.
|
||||||
# Works for IP address too. It does NOT check to see if we can
|
# Works for IP address too. It does NOT check to see if we can
|
||||||
# actually *rsync* to it; that'll come later.
|
# actually *rsync* to it; that'll come later.
|
||||||
|
@ -21,7 +21,8 @@ def buildIPXE(conf):
|
|||||||
srcdir = build['srcdir']
|
srcdir = build['srcdir']
|
||||||
embedscript = build['dlpath'] + '/EMBED'
|
embedscript = build['dlpath'] + '/EMBED'
|
||||||
ipxe_src = srcdir + '/ipxe'
|
ipxe_src = srcdir + '/ipxe'
|
||||||
ipxe_git_uri = 'git://git.ipxe.org/ipxe.git'
|
#ipxe_git_uri = 'git://git.ipxe.org/ipxe.git'
|
||||||
|
ipxe_git_uri = 'http://git.ipxe.org/ipxe.git'
|
||||||
print('{0}: [IPXE] Prep/fetch sources...'.format(
|
print('{0}: [IPXE] Prep/fetch sources...'.format(
|
||||||
datetime.datetime.now()))
|
datetime.datetime.now()))
|
||||||
# Get the source
|
# Get the source
|
||||||
|
@ -25,27 +25,34 @@ def dirChk(conf):
|
|||||||
def downloadTarball(conf):
|
def downloadTarball(conf):
|
||||||
build = conf['build']
|
build = conf['build']
|
||||||
dlpath = build['dlpath']
|
dlpath = build['dlpath']
|
||||||
|
src = conf['src']
|
||||||
arch = build['arch']
|
arch = build['arch']
|
||||||
#mirror = 'http://mirrors.kernel.org/archlinux'
|
tarball_path = {}
|
||||||
mirror = build['mirrorproto'] + '://' + build['mirror']
|
for a in arch:
|
||||||
rlsdir = mirror + build['mirrorpath']
|
locsrc = conf['source_' + a]
|
||||||
sha_in = urlopen(mirror + build['mirrorchksum'])
|
mirror = locsrc['mirrorproto'] + '://' + locsrc['mirror']
|
||||||
|
rlsdir = mirror + locsrc['mirrorpath']
|
||||||
|
if locsrc['mirrorchksum'] != '':
|
||||||
|
if locsrc['chksumtype'] == '':
|
||||||
|
exit("{0}: source_{1}:chksumtype is unset!".format(datetime.datetime.now(), a))
|
||||||
|
hash_type = locsrc['chksumtype']
|
||||||
|
hash_in = urlopen(mirror + locsrc['mirrorchksum'])
|
||||||
|
hashsums = hash_in.read()
|
||||||
|
hash_in.close()
|
||||||
|
hash_raw = hashsums.decode("utf-8")
|
||||||
|
hash_list = list(filter(None, hash_raw.split('\n')))
|
||||||
|
hash_dict = {x.split()[1]: x.split()[0] for x in hash_list}
|
||||||
# returns path/filename e.g. /some/path/to/file.tar.gz
|
# returns path/filename e.g. /some/path/to/file.tar.gz
|
||||||
# we use .gnupg since we'll need it later.
|
# we use .gnupg since we'll need it later.
|
||||||
os.makedirs(dlpath + '/.gnupg', exist_ok = True)
|
os.makedirs(dlpath + '/.gnupg', exist_ok = True)
|
||||||
tarball_path = {}
|
tarball_path[a] = dlpath + '/.latest.' + a + '.tar'
|
||||||
for x in arch:
|
|
||||||
tarball_path[x] = dlpath + '/.latest.' + x + '.tar'
|
|
||||||
sha1sums = sha_in.read()
|
|
||||||
sha_in.close()
|
|
||||||
sha_raw = sha1sums.decode("utf-8")
|
|
||||||
sha_list = list(filter(None, sha_raw.split('\n')))
|
|
||||||
sha_dict = {x.split()[1]: x.split()[0] for x in sha_list}
|
|
||||||
# all that lousy work just to get a sha1 sum. okay. so.
|
|
||||||
for a in arch:
|
|
||||||
pattern = re.compile('^.*' + a + '\.tar(\.(gz|bz2|xz))?$')
|
pattern = re.compile('^.*' + a + '\.tar(\.(gz|bz2|xz))?$')
|
||||||
tarball = [filename.group(0) for l in list(sha_dict.keys()) for filename in [pattern.search(l)] if filename][0]
|
if locsrc['mirrorfile'] != '':
|
||||||
sha1 = sha_dict[tarball]
|
tarball = locsrc['mirrorfile']
|
||||||
|
else:
|
||||||
|
tarball = [filename.group(0) for l in list(hash_dict.keys()) for filename in [pattern.search(l)] if filename][0]
|
||||||
|
if locsrc['mirrorchksum'] != '':
|
||||||
|
hashsum = hash_dict[tarball]
|
||||||
if os.path.isfile(tarball_path[a]):
|
if os.path.isfile(tarball_path[a]):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@ -53,7 +60,6 @@ def downloadTarball(conf):
|
|||||||
print("{0}: [PREP] Fetching tarball ({1} architecture)...".format(
|
print("{0}: [PREP] Fetching tarball ({1} architecture)...".format(
|
||||||
datetime.datetime.now(),
|
datetime.datetime.now(),
|
||||||
a))
|
a))
|
||||||
#dl_file = urllib.URLopener()
|
|
||||||
tarball_dl = urlopen(rlsdir + tarball)
|
tarball_dl = urlopen(rlsdir + tarball)
|
||||||
with open(tarball_path[a], 'wb') as f:
|
with open(tarball_path[a], 'wb') as f:
|
||||||
f.write(tarball_dl.read())
|
f.write(tarball_dl.read())
|
||||||
@ -63,20 +69,32 @@ def downloadTarball(conf):
|
|||||||
tarball_path[a],
|
tarball_path[a],
|
||||||
humanize.naturalsize(
|
humanize.naturalsize(
|
||||||
os.path.getsize(tarball_path[a]))))
|
os.path.getsize(tarball_path[a]))))
|
||||||
|
if locsrc['mirrorchksum'] != '':
|
||||||
print("{0}: [PREP] Checking hash checksum {1} against {2}...".format(
|
print("{0}: [PREP] Checking hash checksum {1} against {2}...".format(
|
||||||
datetime.datetime.now(),
|
datetime.datetime.now(),
|
||||||
sha1,
|
hashsum,
|
||||||
tarball_path[a]))
|
tarball_path[a]))
|
||||||
tarball_hash = hashlib.sha1(open(tarball_path[a], 'rb').read()).hexdigest()
|
# Calculate the checksum according to type specified.
|
||||||
if tarball_hash != sha1:
|
tarball_hash = False
|
||||||
|
for i in hashlib.algorithms_available:
|
||||||
|
if hash_type == i:
|
||||||
|
hashfunc = getattr(hashlib, i)
|
||||||
|
tarball_hash = hashfunc(open(tarball_path[a], 'rb').read()).hexdigest()
|
||||||
|
break
|
||||||
|
if not tarball_hash:
|
||||||
|
exit("{0}: source_{1}:chksumtype '{2}' is not supported on this machine!".format(
|
||||||
|
datetime.datetime.now(),
|
||||||
|
a,
|
||||||
|
hash_type))
|
||||||
|
if tarball_hash != hashsum:
|
||||||
exit(("{0}: {1} either did not download correctly\n\t\t\t or a wrong (probably old) version exists on the filesystem.\n\t\t\t " +
|
exit(("{0}: {1} either did not download correctly\n\t\t\t or a wrong (probably old) version exists on the filesystem.\n\t\t\t " +
|
||||||
"Please delete it and try again.").format(datetime.datetime.now(), tarball))
|
"Please delete it and try again.").format(datetime.datetime.now(), tarball))
|
||||||
elif build['mirrorgpgsig'] != '':
|
if locsrc['mirrorgpgsig'] != '':
|
||||||
# okay, so the sha1 matches. let's verify the signature.
|
# let's verify the signature.
|
||||||
if build['mirrorgpgsig'] == '.sig':
|
if locsrc['mirrorgpgsig'] == '.sig':
|
||||||
gpgsig_remote = rlsdir + tarball + '.sig'
|
gpgsig_remote = rlsdir + tarball + '.sig'
|
||||||
else:
|
else:
|
||||||
gpgsig_remote = build['mirrorgpgsig']
|
gpgsig_remote = locsrc['mirrorgpgsig']
|
||||||
sig_dl = urlopen(gpgsig_remote)
|
sig_dl = urlopen(gpgsig_remote)
|
||||||
sig = tarball_path[a] + '.sig'
|
sig = tarball_path[a] + '.sig'
|
||||||
with open(sig, 'wb+') as f:
|
with open(sig, 'wb+') as f:
|
||||||
|
25
docs/TODO
25
docs/TODO
@ -1,5 +1,13 @@
|
|||||||
## Missing v2.x functionality ##
|
-investigate weird signing issue- if you specify a key to sign with, it appears that the squashed images (at least in the http dir) doesn't have a sig/asc. do they need to copy it over? or is it not even signing them?
|
||||||
|
-switch from python-pygpgme to python-gpgme for better performance. also clean up bGPG in general; reference KANT.
|
||||||
|
-more pythonic! classes (because inits help), use list or tuple constant for checksums, try vars-ing the configparser stuff (and move defaults to in-code?),
|
||||||
|
change path combinations to use os.path.join etc.
|
||||||
|
-modularity: https://stackoverflow.com/a/8719100
|
||||||
|
|
||||||
|
-mtree-like functionality; if mtree spec is found, apply that to files in overlay (or chroot even); otherwise copy from overlay and don't touch chroot
|
||||||
|
|
||||||
-i_am_a_racecar optimizations
|
-i_am_a_racecar optimizations
|
||||||
|
- different distro guests (debian, etc.)- https://stackoverflow.com/questions/2349991/python-how-to-import-other-python-files/20749411#20749411
|
||||||
-incorporate this into the manual?
|
-incorporate this into the manual?
|
||||||
-TFTP configs generated for pxelinux
|
-TFTP configs generated for pxelinux
|
||||||
-fix the branding, etc. on ipxe. :(
|
-fix the branding, etc. on ipxe. :(
|
||||||
@ -9,25 +17,27 @@
|
|||||||
-- https://code.google.com/p/byte-unixbench/
|
-- https://code.google.com/p/byte-unixbench/
|
||||||
-- https://github.com/akopytov/sysbench
|
-- https://github.com/akopytov/sysbench
|
||||||
-- (http://blog.due.io/2014/linode-digitalocean-and-vultr-comparison/ etc.)
|
-- (http://blog.due.io/2014/linode-digitalocean-and-vultr-comparison/ etc.)
|
||||||
-implement pyalpm to decreate dependency on chroot pacman-ing?
|
-There *has* to be a better way of handling package installation in the chroots.
|
||||||
|
--implement pyalpm to decreate dependency on chroot pacman-ing?
|
||||||
--or even maybe https://wiki.archlinux.org/index.php/offline_installation_of_packages in pure python!
|
--or even maybe https://wiki.archlinux.org/index.php/offline_installation_of_packages in pure python!
|
||||||
-set up automatic exporting to PDF of the user manual server-side. https://pypi.python.org/pypi/unoconv/0.6
|
-set up automatic exporting to PDF of the user manual server-side. https://pypi.python.org/pypi/unoconv/0.6
|
||||||
-There *has* to be a better way of handling package installation in the chroots.
|
|
||||||
-maybe remove lxde, firefox, chrome and replace with enlightenment/midori?
|
-maybe remove lxde, firefox, chrome and replace with enlightenment/midori?
|
||||||
-custom repo? https://brainwreckedtech.wordpress.com/2013/01/27/making-your-own-arch-linux-repository/
|
-custom repo? https://brainwreckedtech.wordpress.com/2013/01/27/making-your-own-arch-linux-repository/
|
||||||
--https://wiki.archlinux.org/index.php/Building_32-bit_packages_on_a_64-bit_system
|
--https://wiki.archlinux.org/index.php/Building_32-bit_packages_on_a_64-bit_system # NOTE: arch has dropped i686, now continued as archlinux32
|
||||||
-implement better "additional" packages list. specify for path in build.ini- these should be more easily changed by end users. DON'T TOUCH iso.pkgs.lst since those are necessary for booting.
|
-implement better "additional" packages list. specify for path in build.ini- these should be more easily changed by end users. DON'T TOUCH iso.pkgs.lst since those are necessary for booting.
|
||||||
-shorewall/some other firewall?
|
-automatic shorewall/some other firewall?
|
||||||
-autodetection/configuration of network. DHCP is currently running by default, but does it need to support IPv6? if so, how would the user configure their network?
|
-autodetection/configuration of network. DHCP is currently running by default, but does it need to support IPv6? if so, how would the user configure their network?
|
||||||
-DISABLE NETWORKMANAGER AND "fi.w1.wpa_supplicant1"??? keeps spawning wpa_supplicant (and thusly killing networking proper)
|
-DISABLE NETWORKMANAGER AND "fi.w1.wpa_supplicant1"??? keeps spawning wpa_supplicant (and thusly killing networking proper)
|
||||||
-for netboot, custom user agent (should be defined by build.ini)
|
-for netboot, custom user agent (should be defined by build.ini)
|
||||||
--iPXE's curl
|
--iPXE's curl
|
||||||
--initrd's curl
|
--initrd's curl
|
||||||
-WISH: Better logging/debugging
|
-WISH: Better logging/debugging
|
||||||
|
https://web.archive.org/web/20170726052946/http://www.lexev.org/en/2013/python-logging-every-day/
|
||||||
|
|
||||||
-WISH: signing for secureboot releases (PreLoader and loader.efi handle this okay, but require manual intervention)
|
-WISH: signing for secureboot releases (PreLoader and loader.efi handle this okay, but require manual intervention)
|
||||||
-does loader.efi support splash backgrounds? can i implement that differently somehow?
|
-does loader.efi support splash backgrounds? can i implement that differently somehow?
|
||||||
--yes, see e.g. https://www.reddit.com/r/archlinux/comments/3bwgf0/where_put_the_splasharchbmp_to_splash_screen_boot/
|
--yes, see e.g. https://www.reddit.com/r/archlinux/comments/3bwgf0/where_put_the_splasharchbmp_to_splash_screen_boot/
|
||||||
-strip out/remove unnecessary and orphan packages (e.g. gcc, make, automake, etc.)
|
-strip out/remove unnecessary and orphan packages (e.g. gcc, make, automake, etc.) before building ISO
|
||||||
-incorporate iPXE tweaks:
|
-incorporate iPXE tweaks:
|
||||||
--http://ipxe.org/crypto
|
--http://ipxe.org/crypto
|
||||||
--http://ipxe.org/cmd/imgtrust
|
--http://ipxe.org/cmd/imgtrust
|
||||||
@ -39,6 +49,7 @@
|
|||||||
---#imgverify initrd path/to/initrd.sig
|
---#imgverify initrd path/to/initrd.sig
|
||||||
---DONE, partially. need to incorporate codesign certs/keys. routines, conf variables
|
---DONE, partially. need to incorporate codesign certs/keys. routines, conf variables
|
||||||
-enable mirror= kernel commandline.
|
-enable mirror= kernel commandline.
|
||||||
|
-NOTE: Following should be implemented via AIF-NG (https://git.square-r00t.net/AIF-NG, work pending for fix to BDisk for i686/x86_64 split)
|
||||||
--if mirror_(NAME) is present, use that as repo name.
|
--if mirror_(NAME) is present, use that as repo name.
|
||||||
--if it starts with /, treat as mirrorlist (Include); otherwise use Server =
|
--if it starts with /, treat as mirrorlist (Include); otherwise use Server =
|
||||||
--if it has mirror_SIG-X, set signature options e.g. _SIG-N would be "SigLevel = Never"
|
--if it has mirror_SIG-X, set signature options e.g. _SIG-N would be "SigLevel = Never"
|
||||||
@ -47,5 +58,3 @@
|
|||||||
-include WinMTR, build Mac OS X MTR for dist/tools on CD
|
-include WinMTR, build Mac OS X MTR for dist/tools on CD
|
||||||
-include pre-compiled LibreCrypt for opening LUKS parts on Windows (https://github.com/t-d-k/LibreCrypt)
|
-include pre-compiled LibreCrypt for opening LUKS parts on Windows (https://github.com/t-d-k/LibreCrypt)
|
||||||
--curl -s https://raw.githubusercontent.com/t-d-k/LibreCrypt/master/README.md | egrep 'InstallLibreCrypt_v[A-Za-z0-9\.]*.exe' | cut -f2 -d'"'
|
--curl -s https://raw.githubusercontent.com/t-d-k/LibreCrypt/master/README.md | egrep 'InstallLibreCrypt_v[A-Za-z0-9\.]*.exe' | cut -f2 -d'"'
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
= BDisk User and Developer Manual
|
= BDisk User and Developer Manual
|
||||||
Brent Saner <bts@square-r00t.net>
|
Brent Saner <bts@square-r00t.net>
|
||||||
v1.0, 2016-12
|
v1.3, 2017-08-20
|
||||||
:doctype: book
|
:doctype: book
|
||||||
:data-uri:
|
:data-uri:
|
||||||
:imagesdir: images
|
:imagesdir: images
|
||||||
|
@ -2,17 +2,17 @@
|
|||||||
NOTE: It is possible to submit a bug or feature request without registering in my bugtracker. One of my pet peeves is needing to create an account/register on a bugtracker simply to report a bug! The following links only require an email address to file a bug (which is necessary in case I need any further clarification from you or to keep you updated on the status of the bug/feature request -- so please be sure to use a valid email address).
|
NOTE: It is possible to submit a bug or feature request without registering in my bugtracker. One of my pet peeves is needing to create an account/register on a bugtracker simply to report a bug! The following links only require an email address to file a bug (which is necessary in case I need any further clarification from you or to keep you updated on the status of the bug/feature request -- so please be sure to use a valid email address).
|
||||||
|
|
||||||
=== Bugs
|
=== Bugs
|
||||||
If you encounter any bugs in *BDisk*, you can file a bug report https://bugs.square-r00t.net/index.php?do=newtask&project=2&task_type=1[here^].
|
If you encounter any bugs in *BDisk*, you can file a bug report https://bugs.square-r00t.net/index.php?do=newtask&project=2&task_type=1&product_category=5[here^].
|
||||||
|
|
||||||
If you encounter any bugs (inaccurate information, typos, misformatting, etc.) in *this documentation*, you can file a bug report https://bugs.square-r00t.net/index.php?do=newtask&project=8&task_type=1[here^].
|
If you encounter any bugs (inaccurate information, typos, misformatting, etc.) in *this documentation*, you can file a bug report https://bugs.square-r00t.net/index.php?do=newtask&project=2&task_type=1&product_category=26[here^].
|
||||||
|
|
||||||
=== Feature Requests
|
=== Feature Requests
|
||||||
If you have any features you'd like to see or you think would help *BDisk* become even more useful, please file a feature request https://bugs.square-r00t.net/index.php?do=newtask&project=2&task_type=2[here^].
|
If you have any features you'd like to see or you think would help *BDisk* become even more useful, please file a feature request https://bugs.square-r00t.net/index.php?do=newtask&project=2&task_type=2&product_category=5[here^].
|
||||||
|
|
||||||
If you have any suggestions on how to improve *this documentation* or feel it's missing information that could be useful, please file a feature request https://bugs.square-r00t.net/index.php?do=newtask&project=8&task_type=2[here^].
|
If you have any suggestions on how to improve *this documentation* or feel it's missing information that could be useful, please file a feature request https://bugs.square-r00t.net/index.php?do=newtask&project=2&task_type=2&product_category=26[here^].
|
||||||
|
|
||||||
=== Patches
|
=== Patches
|
||||||
I gladly welcome https://www.gnu.org/software/diffutils/manual/html_node/Unified-Format.html[patches^], but I deplore using GitHub (even though I https://github.com/johnnybubonic/BDisk[have a mirror there^]). For this reason, please follow the same https://www.kernel.org/doc/Documentation/SubmittingPatches[patch/pull request process] for the Linux kernel and email it to bts@square-r00t.net.
|
I gladly welcome https://www.gnu.org/software/diffutils/manual/html_node/Unified-Format.html[patches^], but I deplore using GitHub (even though I https://github.com/johnnybubonic/BDisk[have a mirror there^]). For this reason, please follow the same https://www.kernel.org/doc/Documentation/process/submitting-patches.rst[patch/pull request process] for the Linux kernel and email it to bts@square-r00t.net.
|
||||||
|
|
||||||
Alternatively, you may attach a patch to a <<bugs,bug report>>/<<feature_requests,feature request>>.
|
Alternatively, you may attach a patch to a <<bugs,bug report>>/<<feature_requests,feature request>>.
|
||||||
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 270 KiB After Width: | Height: | Size: 254 KiB |
@ -7,6 +7,8 @@ NOTE: Due to requiring various mounting and chrooting, BDisk must be run as the
|
|||||||
|
|
||||||
To initiate a build, simply run `<basedir>/bdisk/bdisk.py`. That's it! Everything should continue automatically.
|
To initiate a build, simply run `<basedir>/bdisk/bdisk.py`. That's it! Everything should continue automatically.
|
||||||
|
|
||||||
|
If you'd like to specify a path to a specific build configuration, you can use `<basedir>/bdisk/bdisk.py path/to/build.ini`. The default is _/etc/bdisk/build.ini_ (plus <<the_code_build_ini_code_,other locations>>).
|
||||||
|
|
||||||
If you're using a packaged version you installed from your distro's package manager, you instead should run wherever it installs to. Most likely this is going to be `/usr/sbin/bdisk`. (On systemd build hosts that have done the https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/[/usr merge^], you can use `/usr/sbin/bdisk` or `/sbin/bdisk`.)
|
If you're using a packaged version you installed from your distro's package manager, you instead should run wherever it installs to. Most likely this is going to be `/usr/sbin/bdisk`. (On systemd build hosts that have done the https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/[/usr merge^], you can use `/usr/sbin/bdisk` or `/sbin/bdisk`.)
|
||||||
|
|
||||||
If you encounter any issues during the process, make sure you read the documentation -- if your issue still isn't addressed, please be sure to file a <<bug_reports_feature_requests,bug report>>!
|
If you encounter any issues during the process, make sure you read the documentation -- if your issue still isn't addressed, please be sure to file a <<bug_reports_feature_requests,bug report>>!
|
||||||
|
@ -3,7 +3,7 @@ This file is where you can specify some of the very basics of BDisk building. It
|
|||||||
|
|
||||||
It's single-level, but divided into "sections". This is unfortunately a limitation of ConfigParser, but it should be easy enough to follow.
|
It's single-level, but divided into "sections". This is unfortunately a limitation of ConfigParser, but it should be easy enough to follow.
|
||||||
|
|
||||||
Blank lines are ignored, as well as any lines beginning with `#` and `;`. There are some restrictions and recommendations for some values, so be sure to note them when they occur. Variables referencing other values in the `build.ini` are allowed in the format of `${value}` if it's in the same section; otherwise, `${section:value}` can be used.
|
Blank lines are ignored, as well as any lines beginning with `#` and `;`. There are some restrictions and recommendations for some values, so be sure to note them when they occur. Variables referencing other values in the `build.ini` are allowed in the format of `${keyname}` if it's in the same section; otherwise, `${section:keyname}` can be used.
|
||||||
|
|
||||||
If you want to use your own `build.ini` file (and you should!), the following paths are searched in order. The first one found will be used.
|
If you want to use your own `build.ini` file (and you should!), the following paths are searched in order. The first one found will be used.
|
||||||
|
|
||||||
@ -16,6 +16,7 @@ If you want to use your own `build.ini` file (and you should!), the following pa
|
|||||||
* `/opt/dev/bdisk/build.ini`
|
* `/opt/dev/bdisk/build.ini`
|
||||||
* `/opt/dev/bdisk/extra/build.ini`
|
* `/opt/dev/bdisk/extra/build.ini`
|
||||||
* `/opt/dev/bdisk/extra/dist.build.ini`
|
* `/opt/dev/bdisk/extra/dist.build.ini`
|
||||||
|
* `<bdisk.py directory>/../build.ini`
|
||||||
|
|
||||||
We'll go into more detail for each section below.
|
We'll go into more detail for each section below.
|
||||||
|
|
||||||
@ -34,17 +35,29 @@ We'll go into more detail for each section below.
|
|||||||
[user]
|
[user]
|
||||||
username = ${bdisk:uxname}
|
username = ${bdisk:uxname}
|
||||||
name = Default user
|
name = Default user
|
||||||
|
groups = ${bdisk:uxname},admin
|
||||||
password = $$6$$t92Uvm1ETLocDb1D$$BvI0Sa6CSXxzIKBinIaJHb1gLJWheoXp7WzdideAJN46aChFu3hKg07QaIJNk4dfIJ2ry3tEfo3FRvstKWasg/
|
password = $$6$$t92Uvm1ETLocDb1D$$BvI0Sa6CSXxzIKBinIaJHb1gLJWheoXp7WzdideAJN46aChFu3hKg07QaIJNk4dfIJ2ry3tEfo3FRvstKWasg/
|
||||||
[build]
|
[source_x86_64]
|
||||||
|
mirror = mirror.us.leaseweb.net
|
||||||
|
mirrorproto = https
|
||||||
|
mirrorpath = /archlinux/iso/latest/
|
||||||
|
mirrorfile = .sig
|
||||||
|
mirrorchksum = ${mirrorpath}sha1sums.txt
|
||||||
|
chksumtype = sha1
|
||||||
|
mirrorgpgsig =
|
||||||
|
gpgkey = 7F2D434B9741E8AC
|
||||||
|
gpgkeyserver =
|
||||||
|
[source_i686]
|
||||||
mirror = mirror.us.leaseweb.net
|
mirror = mirror.us.leaseweb.net
|
||||||
mirrorproto = https
|
mirrorproto = https
|
||||||
mirrorpath = /archlinux/iso/latest/
|
mirrorpath = /archlinux/iso/latest/
|
||||||
mirrorfile =
|
mirrorfile =
|
||||||
mirrorchksum = ${mirrorpath}sha1sums.txt
|
mirrorchksum = ${mirrorpath}sha1sums.txt
|
||||||
|
chksumtype = sha1
|
||||||
mirrorgpgsig =
|
mirrorgpgsig =
|
||||||
gpgkey = 7F2D434B9741E8AC
|
gpgkey =
|
||||||
gpgkeyserver =
|
gpgkeyserver =
|
||||||
gpg = no
|
[build]
|
||||||
dlpath = /var/tmp/${bdisk:uxname}
|
dlpath = /var/tmp/${bdisk:uxname}
|
||||||
chrootdir = /var/tmp/chroots
|
chrootdir = /var/tmp/chroots
|
||||||
basedir = /opt/dev/bdisk
|
basedir = /opt/dev/bdisk
|
||||||
@ -53,7 +66,8 @@ We'll go into more detail for each section below.
|
|||||||
prepdir = ${dlpath}/temp
|
prepdir = ${dlpath}/temp
|
||||||
archboot = ${prepdir}/${bdisk:name}
|
archboot = ${prepdir}/${bdisk:name}
|
||||||
mountpt = /mnt/${bdisk:uxname}
|
mountpt = /mnt/${bdisk:uxname}
|
||||||
multiarch = yes
|
multiarch = x86_64
|
||||||
|
sign = yes
|
||||||
ipxe = no
|
ipxe = no
|
||||||
i_am_a_racecar = no
|
i_am_a_racecar = no
|
||||||
[gpg]
|
[gpg]
|
||||||
@ -114,7 +128,7 @@ This string is used for "pretty-printing" of the project name; it should be a mo
|
|||||||
. ASCII only
|
. ASCII only
|
||||||
|
|
||||||
==== `ver`
|
==== `ver`
|
||||||
The version string. If this isn't specified, we'll try to guess based on the current git commit and tags in `<<code_basedir_code,build:basedir>>`.
|
The version string. If this isn't specified, we'll try to guess based on the current git commit and tags in `<<code_basedir_code,build:basedir>>`. If `<<code_basedir_code,build:basedir>>` is *not* a git repository (i.e. you installed BDisk from a package manager), you MUST specify a version number.
|
||||||
|
|
||||||
. No whitespace
|
. No whitespace
|
||||||
|
|
||||||
@ -179,20 +193,37 @@ What comment/description/real name should be used for the user? For more informa
|
|||||||
|
|
||||||
. ASCII only
|
. ASCII only
|
||||||
|
|
||||||
|
==== `groups`
|
||||||
|
What groups this user should be added to, comma-separated. They will be created if they don't exist yet. Standard *nix group names rules apply:
|
||||||
|
|
||||||
|
. ASCII only
|
||||||
|
. 32 characters or less
|
||||||
|
. Can only contain lower-case letters, numeric digits, underscores, or dashes (and can end with a dollar sign)
|
||||||
|
. Must start with a (lower-case) letter or underscore
|
||||||
|
. No whitespace
|
||||||
|
|
||||||
==== `password`
|
==== `password`
|
||||||
The escaped, salted, hashed string to use for the non-root user.
|
The escaped, salted, hashed string to use for the non-root user.
|
||||||
|
|
||||||
Please see <<passwords,the section on passwords>> for information on this value. In the <<example,example above>>, the string `$$6$$t92Uvm1ETLocDb1D$$BvI0Sa6CSXxzIKBinIaJHb1gLJWheoXp7WzdideAJN46aChFu3hKg07QaIJNk4dfIJ2ry3tEfo3FRvstKWasg/` is created from the password `test`. I cannot stress this enough, do not use a plaintext password here nor just use a regular `/etc/shadow` file/`crypt(3)` hash here. Read the section. I promise it's short.
|
Please see <<passwords,the section on passwords>> for information on this value. In the <<example,example above>>, the string `$$6$$t92Uvm1ETLocDb1D$$BvI0Sa6CSXxzIKBinIaJHb1gLJWheoXp7WzdideAJN46aChFu3hKg07QaIJNk4dfIJ2ry3tEfo3FRvstKWasg/` is created from the password `test`. I cannot stress this enough, do not use a plaintext password here nor just use a regular `/etc/shadow` file/`crypt(3)` hash here. Read the section. I promise it's short.
|
||||||
|
|
||||||
=== `[build]`
|
=== `[source_<arch>]`
|
||||||
This section controls some aspects about the host and things like filesystem paths, etc.
|
This section controls where to fetch the "base" tarballs.
|
||||||
|
|
||||||
|
NOTE: Previously, these settings were *not* architecture-specific, and included in the <<code_build_code,`build`>> section.
|
||||||
|
|
||||||
|
It was necessary to create this section per architecture, because https://www.archlinux.org/news/phasing-out-i686-support/[Arch Linux has dropped i686 support^]. However, plenty of other distros also have removed support and other third-party projects have ported. (You can find the Arch Linux 32-bit/i686 port project http://archlinux32.org/[here^].)
|
||||||
|
|
||||||
|
The directives here are only covered once, however, since both sections are identical- they just allow you to specify different mirrors. Note that the two settings are `[source_i686]` (for 32-bit) and `[source_x86_64]` (for 64-bit/multilib).
|
||||||
|
|
||||||
|
Which section is used (or both) depends on what <<code_multiarch_code, architectures you have enabled>> for the build.
|
||||||
|
|
||||||
==== `mirror`
|
==== `mirror`
|
||||||
A mirror that hosts the bootstrap tarball. It is *highly* recommended you use an Arch Linux https://wiki.archlinux.org/index.php/Install_from_existing_Linux#Method_A:_Using_the_bootstrap_image_.28recommended.29[bootstrap tarball^] as the build process is highly specialized to this (but <<bug_reports_feature_requests,patches/feature requests>> are welcome for other built distros). You can find a list of mirrors at the bottom of Arch's https://www.archlinux.org/download/[download page^].
|
A mirror that hosts the bootstrap tarball. It is *highly* recommended you use an Arch Linux https://wiki.archlinux.org/index.php/Install_from_existing_Linux#Method_A:_Using_the_bootstrap_image_.28recommended.29[bootstrap tarball^] as the build process is highly specialized to this (but <<bug_reports_feature_requests,patches/feature requests>> are welcome for other built distros). You can find a list of mirrors at the bottom of Arch's https://www.archlinux.org/download/[download page^].
|
||||||
|
|
||||||
. No whitespace
|
. No whitespace
|
||||||
. Must be accessible remotely/via a WAN-recognized address
|
. Must be accessible remotely/via a WAN-recognized address
|
||||||
. Must be a domain/FQDN only; no paths (those come later!)
|
. Must be a domain/FQDN (or IP address) only; no paths (those come later!)
|
||||||
|
|
||||||
==== `mirrorproto`
|
==== `mirrorproto`
|
||||||
What protocol should we use for the <<code_mirror_code,`mirror`>>?
|
What protocol should we use for the <<code_mirror_code,`mirror`>>?
|
||||||
@ -208,14 +239,42 @@ What is the path to the tarball directory on the <<code_mirror_code,`mirror`>>?
|
|||||||
. No whitespace
|
. No whitespace
|
||||||
|
|
||||||
==== `mirrorfile`
|
==== `mirrorfile`
|
||||||
What is the filename for the tarball found in the path specified in <<code_mirrorpath_code,`mirrorpath`>> ? If left blank, we will use the sha1 <<code_mirrorchksum_code,checksum>> file to try to guess the most recent file.
|
What is the filename for the tarball found in the path specified in <<code_mirrorpath_code,`mirrorpath`>> ? If left blank, we will use the hash <<code_mirrorchksum_code,checksum>> file to try to guess the most recent file.
|
||||||
|
|
||||||
==== `mirrorchksum`
|
==== `mirrorchksum`
|
||||||
The path to a sha1 checksum file of the bootstrap tarball.
|
*[optional]* +
|
||||||
|
*default: (no hash checking done)* +
|
||||||
|
*requires: <<code_chksumtype_code,`chksumtype`>>*
|
||||||
|
|
||||||
|
The path to a checksum file of the bootstrap tarball.
|
||||||
|
|
||||||
. No whitespace
|
. No whitespace
|
||||||
. Must be the full path
|
. Must be the full path
|
||||||
. Don't include the mirror domain or protocol
|
. Don't include the <<code_mirror_code,mirror domain>> or <<code_mirrorproto_code,protocol>>
|
||||||
|
|
||||||
|
==== `chksumtype`
|
||||||
|
The algorithm that <<code_mirrorchksum_code,`mirrorchksum`>>'s hashes are in.
|
||||||
|
|
||||||
|
[options="header"]
|
||||||
|
|======================
|
||||||
|
7+^|Accepts one of:
|
||||||
|
^m|blake2b
|
||||||
|
^m|blake2s
|
||||||
|
^m|md5
|
||||||
|
^m|sha1
|
||||||
|
^m|sha224
|
||||||
|
^m|sha256
|
||||||
|
^m|sha384
|
||||||
|
^m|sha512
|
||||||
|
^m|sha3_224
|
||||||
|
^m|sha3_256
|
||||||
|
^m|sha3_384
|
||||||
|
^m|sha3_512
|
||||||
|
^m|shake_128
|
||||||
|
^m|shake_256
|
||||||
|
|======================
|
||||||
|
|
||||||
|
TIP: You may have support for additional hashing algorithms, but these are the ones gauranteed to be supported by Python's https://docs.python.org/3/library/hashlib.html[hashlib module^]. To get a full list of algorithms the computer you're building on supports, you can run `python3 -c 'import hashlib;print(hashlib.algorithms_available)'`. Most likely, however, <<code_mirrorchksum_code,`mirrorchksum`>> is going to be hashes of one of the above.
|
||||||
|
|
||||||
==== `mirrorgpgsig`
|
==== `mirrorgpgsig`
|
||||||
*[optional]* +
|
*[optional]* +
|
||||||
@ -225,7 +284,7 @@ The path to a sha1 checksum file of the bootstrap tarball.
|
|||||||
|
|
||||||
If the bootstrap tarball file has a GPG signature, we can use it for extra checking. If it's blank, GPG checking will be disabled.
|
If the bootstrap tarball file has a GPG signature, we can use it for extra checking. If it's blank, GPG checking will be disabled.
|
||||||
|
|
||||||
If you specify just `.sig` (or use the default and don't specify a <<code_mirrorfile_code,`mirrorfile`>>), BDisk will try to guess based on the file from the sha1 <<code_mirrorchksum_code,checksum>> file. Note that this must evaluate to a full URL. (e.g. `${mirrorproto}://${mirror}${mirrorpath}somefile.sig`)
|
If you specify just `.sig` (or use the default and don't specify a <<code_mirrorfile_code,`mirrorfile`>>), BDisk will try to guess based on the file from the hash <<code_mirrorchksum_code,checksum>> file. Note that unless you're using the `.sig` "autodetection", this must evaluate to a full URL. (e.g. `${mirrorproto}://${mirror}${mirrorpath}somefile.sig`)
|
||||||
|
|
||||||
==== `gpgkey`
|
==== `gpgkey`
|
||||||
*requires: <<optional,_gpg/gnupg_>>*
|
*requires: <<optional,_gpg/gnupg_>>*
|
||||||
@ -245,6 +304,18 @@ What is a valid keyserver we should use to fetch <<code_gpgkey_code,`gpgkey`>>?
|
|||||||
. The default (blank) is probably fine. If you don't specify a personal GPG config, then you'll most likely want to leave this blank.
|
. The default (blank) is probably fine. If you don't specify a personal GPG config, then you'll most likely want to leave this blank.
|
||||||
. If set, make sure it is a valid keyserver URI (e.g. `hkp://keys.gnupg.net`)
|
. If set, make sure it is a valid keyserver URI (e.g. `hkp://keys.gnupg.net`)
|
||||||
|
|
||||||
|
[options="header"]
|
||||||
|
|======================
|
||||||
|
2+^|Accepts (case-insensitive) one of:
|
||||||
|
^m|yes ^m|no
|
||||||
|
^m|true ^m|false
|
||||||
|
^m|1 ^m|0
|
||||||
|
|======================
|
||||||
|
|
||||||
|
=== `[build]`
|
||||||
|
This section controls some aspects about the host and things like filesystem paths, etc.
|
||||||
|
|
||||||
|
|
||||||
==== `gpg`
|
==== `gpg`
|
||||||
Should we sign our release files? See the <<code_gpg_code_2,`[gpg]`>> section.
|
Should we sign our release files? See the <<code_gpg_code_2,`[gpg]`>> section.
|
||||||
|
|
||||||
@ -454,7 +525,7 @@ What group the HTTP files should be owned as. This is most likely going to be ei
|
|||||||
. Group must exist on build system
|
. Group must exist on build system
|
||||||
|
|
||||||
|======================
|
|======================
|
||||||
^s|Can be one of: ^.^m|group name ^.^m|https://linux.die.net/man/5/group[UID]
|
^s|Can be one of: ^.^m|groupname ^.^m|https://linux.die.net/man/5/group[GID]
|
||||||
|======================
|
|======================
|
||||||
|
|
||||||
=== `[tftp]`
|
=== `[tftp]`
|
||||||
@ -486,7 +557,7 @@ What group the TFTP files should be owned as. This is most likely going to be ei
|
|||||||
. Group must exist on build system
|
. Group must exist on build system
|
||||||
|
|
||||||
|======================
|
|======================
|
||||||
^s|Can be one of: ^.^m|group name ^.^m|https://linux.die.net/man/5/group[UID]
|
^s|Can be one of: ^.^m|groupname ^.^m|https://linux.die.net/man/5/group[GID]
|
||||||
|======================
|
|======================
|
||||||
|
|
||||||
=== `[ipxe]`
|
=== `[ipxe]`
|
||||||
|
@ -7,13 +7,13 @@ image::fig1.1.png[cgit,align="center"]
|
|||||||
|
|
||||||
If you know the tag of the commit you want, you can use curl:
|
If you know the tag of the commit you want, you can use curl:
|
||||||
|
|
||||||
curl -sL -o bdisk.tar.xz https://git.square-r00t.net/BDisk/snapshot/BDisk-3.11.tar.xz
|
curl -sL -o bdisk.tar.xz https://git.square-r00t.net/BDisk/snapshot/BDisk-3.00-BETA.tar.xz
|
||||||
|
|
||||||
or wget:
|
or wget:
|
||||||
|
|
||||||
wget -O bdisk.tar.xz https://git.square-r00t.net/BDisk/snapshot/BDisk-3.11.tar.xz
|
wget -O bdisk.tar.xz https://git.square-r00t.net/BDisk/snapshot/BDisk-3.00-BETA.tar.xz
|
||||||
|
|
||||||
You can use `https://git.square-r00t.net/BDisk/snapshot/BDisk-master.tar.xz` for the URL if you want the latest working version. If you want a snapshot of a specific commit, you can use e.g. `https://git.square-r00t.net/BDisk/snapshot/BDisk-5ac510762ce00eef213957825de0e6d07186e7f8.tar.xz` and so on.
|
You can use `https://git.square-r00t.net/BDisk/snapshot/BDisk-master.tar.xz` for the URL if you want the latest working version. If you want a snapshot of a specific commit, you can use e.g. `https://git.square-r00t.net/BDisk/snapshot/BDisk-a1fe1dbc0a0ce2b2a5d1b470d30b60636f9b2efa.tar.xz` and so on.
|
||||||
|
|
||||||
Alternatively, you can use https://git-scm.com/[git^]. Git most definitely _should_ be in your distro's repositories.
|
Alternatively, you can use https://git-scm.com/[git^]. Git most definitely _should_ be in your distro's repositories.
|
||||||
|
|
||||||
@ -50,9 +50,13 @@ These are needed for using BDisk.
|
|||||||
|
|
||||||
These are required Python modules:
|
These are required Python modules:
|
||||||
|
|
||||||
|
* https://pypi.python.org/pypi/GitPython[GitPython^]
|
||||||
* https://pypi.python.org/pypi/humanize[Humanize^]
|
* https://pypi.python.org/pypi/humanize[Humanize^]
|
||||||
* http://jinja.pocoo.org/[Jinja2^]
|
* http://jinja.pocoo.org/[Jinja2^]
|
||||||
* https://pypi.python.org/pypi/psutil[PSUtil^]
|
* https://pypi.python.org/pypi/psutil[PSUtil^]
|
||||||
|
* https://pypi.python.org/pypi/patch[Patch^]
|
||||||
|
* https://pypi.python.org/pypi/pygpgme[PyGPGME^]
|
||||||
|
* https://pypi.python.org/pypi/pyOpenSSL[PyOpenSSL^]
|
||||||
* https://pypi.python.org/pypi/validators[Validators^]
|
* https://pypi.python.org/pypi/validators[Validators^]
|
||||||
|
|
||||||
==== Optional
|
==== Optional
|
||||||
@ -60,6 +64,8 @@ While not strictly necessary, these will greatly enhance your BDisk usage. I've
|
|||||||
|
|
||||||
NOTE: If you do not wish to install any of these or cannot install them, be sure to disable the relevant options in the `build.ini` file (we'll talk about that later). The default `extra/dist.build.ini` should be sane enough to not require any of these.
|
NOTE: If you do not wish to install any of these or cannot install them, be sure to disable the relevant options in the `build.ini` file (we'll talk about that later). The default `extra/dist.build.ini` should be sane enough to not require any of these.
|
||||||
|
|
||||||
|
* http://cdrtools.sourceforge.net/private/cdrecord.html[cdrtools^]
|
||||||
|
** Needed for building iPXE.
|
||||||
* http://gcc.gnu.org[gcc (multilib)^] (>=6.x)
|
* http://gcc.gnu.org[gcc (multilib)^] (>=6.x)
|
||||||
** Needed for building iPXE.
|
** Needed for building iPXE.
|
||||||
* http://gcc.gnu.org[gcc-libs (multilib)^] (>=6.x)
|
* http://gcc.gnu.org[gcc-libs (multilib)^] (>=6.x)
|
||||||
@ -71,14 +77,4 @@ NOTE: If you do not wish to install any of these or cannot install them, be sure
|
|||||||
* https://rsync.samba.org/[rsync^]
|
* https://rsync.samba.org/[rsync^]
|
||||||
** For syncing built ISOs to a fileserver, syncing to a remote iPXE server, syncing to a traditional PXE/TFTP server, etc.
|
** For syncing built ISOs to a fileserver, syncing to a remote iPXE server, syncing to a traditional PXE/TFTP server, etc.
|
||||||
|
|
||||||
These are optional Python modules:
|
|
||||||
|
|
||||||
* https://pypi.python.org/pypi/GitPython[GitPython^]
|
|
||||||
** (Same reasons as _git_)
|
|
||||||
* https://pypi.python.org/pypi/pygpgme[PyGPGME^]
|
|
||||||
** (Same reasons as _gpg/gnupg_)
|
|
||||||
* https://pypi.python.org/pypi/patch[Patch^]
|
|
||||||
** For branding iPXE environments per your `build.ini`.
|
|
||||||
* https://pypi.python.org/pypi/pyOpenSSL[PyOpenSSL^]
|
|
||||||
** To set up a PKI when building iPXE; used to create trusted/verified images.
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ First, create a file: `<basedir>/overlay/etc/ssh/sshd_config` using the followin
|
|||||||
Subsystem sftp /usr/lib/ssh/sftp-server
|
Subsystem sftp /usr/lib/ssh/sftp-server
|
||||||
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
|
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
|
||||||
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
|
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
|
||||||
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
|
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
|
||||||
|
|
||||||
We'll also want to implement a more secure `ssh_config` file to avoid possible leaks. The following is `<basedir>/overlay/etc/ssh/ssh_config`:
|
We'll also want to implement a more secure `ssh_config` file to avoid possible leaks. The following is `<basedir>/overlay/etc/ssh/ssh_config`:
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ We'll also want to implement a more secure `ssh_config` file to avoid possible l
|
|||||||
PubkeyAuthentication yes
|
PubkeyAuthentication yes
|
||||||
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
|
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
|
||||||
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
|
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
|
||||||
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
|
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
|
||||||
|
|
||||||
We'll want to create our own moduli. This can take a long time, but only needs to be done once -- it doesn't need to be done for every build. The following commands should be run in `<basedir>/overlay/etc/ssh/`:
|
We'll want to create our own moduli. This can take a long time, but only needs to be done once -- it doesn't need to be done for every build. The following commands should be run in `<basedir>/overlay/etc/ssh/`:
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ The `EFI/` directory is similar to <<efi, EFI/>> above also, but needs fewer con
|
|||||||
The `patches/` directory largely control branding of the mini ISO. They are in https://www.gnu.org/software/diffutils/manual/html_node/Unified-Format.html[unified diff^] (or "patch") format.
|
The `patches/` directory largely control branding of the mini ISO. They are in https://www.gnu.org/software/diffutils/manual/html_node/Unified-Format.html[unified diff^] (or "patch") format.
|
||||||
|
|
||||||
===== overlay/
|
===== overlay/
|
||||||
This directory contains *templated* overlays. These are intended to be templated by the user. See <<overlay, the overlay section>> for more information on how to use this. Remember to suffix your template files with the `.j2` extension.
|
This directory contains *templated* overlays. These are intended to be templated by the user. See <<overlay_2, the overlay section>> for more information on how to use this. Remember to suffix your template files with the `.j2` extension.
|
||||||
|
|
||||||
===== pre-build.d/
|
===== pre-build.d/
|
||||||
This directory contains *templated* overlays. These are intended to not be managed by the user, as they handle configuration necessary for building an ISO. See <<pre_build_d, the pre-build.d section>> for more information on this.
|
This directory contains *templated* overlays. These are intended to not be managed by the user, as they handle configuration necessary for building an ISO. See <<pre_build_d, the pre-build.d section>> for more information on this.
|
||||||
|
BIN
extra/aif.png
Normal file
BIN
extra/aif.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 152 B |
@ -26,17 +26,32 @@ user = yes
|
|||||||
[user]
|
[user]
|
||||||
username = ${bdisk:uxname}
|
username = ${bdisk:uxname}
|
||||||
name = Default user
|
name = Default user
|
||||||
|
groups = ${bdisk:uxname},admin
|
||||||
password =
|
password =
|
||||||
|
|
||||||
[build]
|
[source_x86_64]
|
||||||
mirror = mirror.us.leaseweb.net
|
mirror = mirror.us.leaseweb.net
|
||||||
mirrorproto = https
|
mirrorproto = https
|
||||||
mirrorpath = /archlinux/iso/latest/
|
mirrorpath = /archlinux/iso/latest/
|
||||||
mirrorfile =
|
mirrorfile =
|
||||||
mirrorchksum = ${mirrorpath}sha1sums.txt
|
mirrorchksum = ${mirrorpath}sha1sums.txt
|
||||||
|
chksumtype = sha1
|
||||||
mirrorgpgsig =
|
mirrorgpgsig =
|
||||||
gpgkey = 7F2D434B9741E8AC
|
gpgkey = 7F2D434B9741E8AC
|
||||||
gpgkeyserver =
|
gpgkeyserver =
|
||||||
|
|
||||||
|
[source_i686]
|
||||||
|
mirror = mirror.us.leaseweb.net
|
||||||
|
mirrorproto = https
|
||||||
|
mirrorpath = /archlinux/iso/latest/
|
||||||
|
mirrorfile =
|
||||||
|
mirrorchksum = ${mirrorpath}sha1sums.txt
|
||||||
|
chksumtype = sha1
|
||||||
|
mirrorgpgsig =
|
||||||
|
gpgkey = 7F2D434B9741E8AC
|
||||||
|
gpgkeyserver =
|
||||||
|
|
||||||
|
[build]
|
||||||
gpg = no
|
gpg = no
|
||||||
dlpath = /var/tmp/${bdisk:uxname}
|
dlpath = /var/tmp/${bdisk:uxname}
|
||||||
chrootdir = /var/tmp/chroots
|
chrootdir = /var/tmp/chroots
|
||||||
@ -46,13 +61,15 @@ srcdir = ${dlpath}/src
|
|||||||
prepdir = ${dlpath}/temp
|
prepdir = ${dlpath}/temp
|
||||||
archboot = ${prepdir}/${bdisk:name}
|
archboot = ${prepdir}/${bdisk:name}
|
||||||
mountpt = /mnt/${bdisk:uxname}
|
mountpt = /mnt/${bdisk:uxname}
|
||||||
multiarch = yes
|
#multiarch = yes
|
||||||
ipxe =
|
multiarch = x86_64
|
||||||
|
sign = yes
|
||||||
|
ipxe = no
|
||||||
i_am_a_racecar = yes
|
i_am_a_racecar = yes
|
||||||
|
|
||||||
[gpg]
|
[gpg]
|
||||||
mygpgkey =
|
mygpgkey =
|
||||||
mygpghome =
|
mygpghome = ${build:dlpath}/.gnupg
|
||||||
|
|
||||||
[sync]
|
[sync]
|
||||||
http = no
|
http = no
|
||||||
|
48
extra/modules/distro/TEMPLATE
Normal file
48
extra/modules/distro/TEMPLATE
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# The modules found in here are for distro-specific differences in the builds.
|
||||||
|
# For instance, if you want to build a Debian-based BDisk, you'd specify pkg['install'] = ['apt-get', '-y', 'install', '%PKG%'],
|
||||||
|
# name this file as "debian.py", and set bdisk:distro as 'debian'.
|
||||||
|
# Note that the guest will need python installed. If distro is set as "NOCHECK", a distro check of the tarball won't be performed
|
||||||
|
# (as the distro check requires python be installed first).
|
||||||
|
|
||||||
|
# Special variables to be used in strings:
|
||||||
|
# %PKG% = the name of a package would be inserted here.
|
||||||
|
|
||||||
|
# This template uses Debian as an example.
|
||||||
|
|
||||||
|
# The name of the distro. Must match the output from platform.linux_distribution()[0].lower()
|
||||||
|
# Regex is supported.
|
||||||
|
distro = 'debian'
|
||||||
|
|
||||||
|
# The path to python. Can be either python 2.x (2.6 or higher) or 3.x.
|
||||||
|
pybin = '/usr/bin/python'
|
||||||
|
|
||||||
|
guestenv = {}
|
||||||
|
# The following environment variables will be set for the guest.
|
||||||
|
guestenv['DEBIAN_FRONTEND'] = 'noninteractive'
|
||||||
|
|
||||||
|
scripts = {}
|
||||||
|
# This variable can be used to perform some additional system tweaks and such. This is run before package installation.
|
||||||
|
# It must be formatted as a complete script- i.e. include a shebang etc.
|
||||||
|
script['pre'] = """#!/bin/bash
|
||||||
|
touch /root/BDISK
|
||||||
|
"""
|
||||||
|
|
||||||
|
# This variable can be used to perform some additional system tweaks and such. This is run after package installation.
|
||||||
|
script['post'] = """#!/bin/bash
|
||||||
|
rm -f /root/BDISK
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
pkg = {}
|
||||||
|
# The command, with arguments, in list format that should be run before we install software in the guest.
|
||||||
|
# For instance, if your guest distro requires a local package listing cache (nearly all of them do) to be
|
||||||
|
# updated first, this is where it would be run.
|
||||||
|
pkg['pre'] = ['apt-get', '-y', 'update']
|
||||||
|
|
||||||
|
# The command, with arguments, in a list format to install a package.
|
||||||
|
# Note that the command must be constructed in a way that does not require user interaction.
|
||||||
|
pkg['install'] = ['apt-get', '-y', 'install', '%PKG%']
|
||||||
|
|
||||||
|
# The command, with arguments, in list format to use to check if a package is installed.
|
||||||
|
# It should return 0 on exist status if it's installed. Any other exit status assumes the package is not installed.
|
||||||
|
pkg['check'] = ['dpkg-query', '-f', '${binary:Package}\n', '-W', '%PKG']
|
11
extra/modules/distro/arch.py
Normal file
11
extra/modules/distro/arch.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
distro = 'arch'
|
||||||
|
pybin = '/usr/bin/python'
|
||||||
|
script['pre'] = """#!/bin/bash
|
||||||
|
touch /root/BDISK
|
||||||
|
"""
|
||||||
|
script['post'] = """#!/bin/bash
|
||||||
|
rm -f /root/BDISK
|
||||||
|
"""
|
||||||
|
pkg['pre'] = ['pacman', '-Syyy']
|
||||||
|
pkg['install'] = ['apacman', '-S', '%PKG%']
|
||||||
|
pkg['check'] = ['pacman', '-Q', '%PKG']
|
11
extra/modules/distro/centos.py
Normal file
11
extra/modules/distro/centos.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
distro = 'centos linux'
|
||||||
|
pybin = '/usr/bin/python'
|
||||||
|
script['pre'] = """#!/bin/bash
|
||||||
|
touch /root/BDISK
|
||||||
|
"""
|
||||||
|
script['post'] = """#!/bin/bash
|
||||||
|
rm -f /root/BDISK
|
||||||
|
"""
|
||||||
|
pkg['pre'] = ['yum', 'makecache']
|
||||||
|
pkg['install'] = ['yum', '-y', 'install', '%PKG%']
|
||||||
|
pkg['check'] = ['rpm', '-qi', '%PKG']
|
12
extra/modules/distro/debian.py
Normal file
12
extra/modules/distro/debian.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
distro = 'debian'
|
||||||
|
pybin = '/usr/bin/python'
|
||||||
|
guestenv['DEBIAN_FRONTEND'] = 'noninteractive'
|
||||||
|
script['pre'] = """#!/bin/bash
|
||||||
|
touch /root/BDISK
|
||||||
|
"""
|
||||||
|
script['post'] = """#!/bin/bash
|
||||||
|
rm -f /root/BDISK
|
||||||
|
"""
|
||||||
|
pkg['pre'] = ['apt-get', '-q', '-y', 'update']
|
||||||
|
pkg['install'] = ['apt-get', '-q', '-y', '-o Dpkg::Options::="--force-confdef"', '-o Dpkg::Options::="--force-confold"', 'install', '%PKG%']
|
||||||
|
pkg['check'] = ['dpkg-query', '-f', "'${binary:Package}\n'", '-W', '%PKG']
|
11
extra/modules/distro/fedora.py
Normal file
11
extra/modules/distro/fedora.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
distro = 'fedora'
|
||||||
|
pybin = '/usr/bin/python3'
|
||||||
|
script['pre'] = """#!/bin/bash
|
||||||
|
touch /root/BDISK
|
||||||
|
"""
|
||||||
|
script['post'] = """#!/bin/bash
|
||||||
|
rm -f /root/BDISK
|
||||||
|
"""
|
||||||
|
pkg['pre'] = ['yum', 'makecache']
|
||||||
|
pkg['install'] = ['yum', '-y', 'install', '%PKG%']
|
||||||
|
pkg['check'] = ['rpm', '-qi', '%PKG']
|
11
extra/modules/distro/rhel.py
Normal file
11
extra/modules/distro/rhel.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
distro = 'red hat enterprise linux (server|desktop)'
|
||||||
|
pybin = '/usr/bin/python'
|
||||||
|
script['pre'] = """#!/bin/bash
|
||||||
|
touch /root/BDISK
|
||||||
|
"""
|
||||||
|
script['post'] = """#!/bin/bash
|
||||||
|
rm -f /root/BDISK
|
||||||
|
"""
|
||||||
|
pkg['pre'] = ['yum', 'makecache']
|
||||||
|
pkg['install'] = ['yum', '-y', 'install', '%PKG%']
|
||||||
|
pkg['check'] = ['rpm', '-qi', '%PKG']
|
11
extra/modules/distro/sles.py
Normal file
11
extra/modules/distro/sles.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
distro = 'suse linux enterprise server'
|
||||||
|
pybin = '/usr/bin/python'
|
||||||
|
script['pre'] = """#!/bin/bash
|
||||||
|
touch /root/BDISK
|
||||||
|
"""
|
||||||
|
script['post'] = """#!/bin/bash
|
||||||
|
rm -f /root/BDISK
|
||||||
|
"""
|
||||||
|
pkg['pre'] = ['zypper', 'refresh']
|
||||||
|
pkg['install'] = ['zypper', 'install', '--no-confirm', '-l', '%PKG%']
|
||||||
|
pkg['check'] = ['rpm', '-qi', '%PKG']
|
12
extra/modules/distro/ubuntu.py
Normal file
12
extra/modules/distro/ubuntu.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
distro = 'ubuntu'
|
||||||
|
pybin = '/usr/bin/python'
|
||||||
|
guestenv['DEBIAN_FRONTEND'] = 'noninteractive'
|
||||||
|
script['pre'] = """#!/bin/bash
|
||||||
|
touch /root/BDISK
|
||||||
|
"""
|
||||||
|
script['post'] = """#!/bin/bash
|
||||||
|
rm -f /root/BDISK
|
||||||
|
"""
|
||||||
|
pkg['pre'] = ['apt-get', '-q', '-y', 'update']
|
||||||
|
pkg['install'] = ['apt-get', '-q', '-y', '-o Dpkg::Options::="--force-confdef"', '-o Dpkg::Options::="--force-confold"', 'install', '%PKG%']
|
||||||
|
pkg['check'] = ['dpkg-query', '-f', "'${binary:Package}\n'", '-W', '%PKG']
|
@ -26,17 +26,32 @@ user = yes
|
|||||||
[user]
|
[user]
|
||||||
username = ${bdisk:uxname}
|
username = ${bdisk:uxname}
|
||||||
name = Default user
|
name = Default user
|
||||||
|
groups = ${bdisk:uxname},admin
|
||||||
password =
|
password =
|
||||||
|
|
||||||
[build]
|
[source_x86_64]
|
||||||
mirror = mirror.us.leaseweb.net
|
mirror = mirror.us.leaseweb.net
|
||||||
mirrorproto = https
|
mirrorproto = https
|
||||||
mirrorpath = /archlinux/iso/latest/
|
mirrorpath = /archlinux/iso/latest/
|
||||||
mirrorfile =
|
mirrorfile =
|
||||||
mirrorchksum = ${mirrorpath}sha1sums.txt
|
mirrorchksum = ${mirrorpath}sha1sums.txt
|
||||||
|
chksumtype = sha1
|
||||||
mirrorgpgsig =
|
mirrorgpgsig =
|
||||||
gpgkey = 7F2D434B9741E8AC
|
gpgkey = 7F2D434B9741E8AC
|
||||||
gpgkeyserver =
|
gpgkeyserver =
|
||||||
|
|
||||||
|
[source_i686]
|
||||||
|
mirror = mirror.us.leaseweb.net
|
||||||
|
mirrorproto = https
|
||||||
|
mirrorpath = /archlinux/iso/latest/
|
||||||
|
mirrorfile =
|
||||||
|
mirrorchksum = ${mirrorpath}sha1sums.txt
|
||||||
|
chksumtype = sha1
|
||||||
|
mirrorgpgsig =
|
||||||
|
gpgkey = 7F2D434B9741E8AC
|
||||||
|
gpgkeyserver =
|
||||||
|
|
||||||
|
[build]
|
||||||
gpg = no
|
gpg = no
|
||||||
dlpath = /var/tmp/${bdisk:uxname}
|
dlpath = /var/tmp/${bdisk:uxname}
|
||||||
chrootdir = /var/tmp/chroots
|
chrootdir = /var/tmp/chroots
|
||||||
@ -46,13 +61,14 @@ srcdir = ${dlpath}/src
|
|||||||
prepdir = ${dlpath}/temp
|
prepdir = ${dlpath}/temp
|
||||||
archboot = ${prepdir}/${bdisk:name}
|
archboot = ${prepdir}/${bdisk:name}
|
||||||
mountpt = /mnt/${bdisk:uxname}
|
mountpt = /mnt/${bdisk:uxname}
|
||||||
multiarch = yes
|
#multiarch = yes
|
||||||
|
multiarch = x86_64
|
||||||
ipxe = no
|
ipxe = no
|
||||||
i_am_a_racecar = no
|
i_am_a_racecar = no
|
||||||
|
|
||||||
[gpg]
|
[gpg]
|
||||||
mygpgkey =
|
mygpgkey =
|
||||||
mygpghome =
|
mygpghome = ${build:dlpath}/.gnupg
|
||||||
|
|
||||||
[sync]
|
[sync]
|
||||||
http = no
|
http = no
|
||||||
|
@ -1 +0,0 @@
|
|||||||
bdisk-live.loc.lan
|
|
@ -14,6 +14,7 @@ build()
|
|||||||
add_binary "/usr/bin/sed"
|
add_binary "/usr/bin/sed"
|
||||||
add_binary "/usr/bin/pkill"
|
add_binary "/usr/bin/pkill"
|
||||||
add_binary "/usr/bin/curl"
|
add_binary "/usr/bin/curl"
|
||||||
|
add_binary "/usr/bin/pv"
|
||||||
add_full_dir /etc/ssl
|
add_full_dir /etc/ssl
|
||||||
add_full_dir /etc/ca-certificates
|
add_full_dir /etc/ca-certificates
|
||||||
|
|
||||||
|
@ -1,90 +0,0 @@
|
|||||||
[H[J
|
|
||||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0dc,.. ..;cxKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMMMMMMMMMMMW0d:'. .,cx0WMMMMMMMMMMMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMMMMMMMNx:. .';cldxkkOOOOkkxdl:,.. .ckNMMMMMMMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMMMMKl. .;okKXXXXXXXXXXXXXXXXXXXXXX0xl;. 'oXMMMMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMXl. .:d0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0d;. .dNMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMM0; .cOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKk: :KMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMO' 'xKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKd. ,KMMMMMMMMMM
|
|
||||||
MMMMMMMMX, ,OXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx' :NMMMMMMMM
|
|
||||||
MMMMMMMd .kXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXd. .kMMMMMMM
|
|
||||||
MMMMMN' oKKxl:;,;:lkKXXXXXXXXXXXXXXXXXXXXXXXX0dl:;,;:ld0XXXXXXXXXXKc ;WMMMMM
|
|
||||||
MMMMK. .O0; ':ool:. ;kXXXXXXXXXXXXXXXXXXX0l. .,coooc' .c0XXXXXXXXXk. .NMMMM
|
|
||||||
MMMK. 'Kx cNMMMMK. ,0XXXXXXXXXXXXXXXKc :0MMMMMMk. cKXXXXXXXX0. .NMMM
|
|
||||||
MMN. 'Kd kMMMMMM' .OXXXXXXXXXXXXX0. 'XMMMMMMMN 'KXXXXXXXX0. .WMM
|
|
||||||
MW. .K0 xMMMMMMMd .KXXXXXXXXXXXK' ;WMMMMMMMMM: 'KXXXXXXXX0. ;MM
|
|
||||||
Mo OXc .MMMMMMMMMXo:;ckN. dXXXXXXXXXXXd NMMMMMMMMMMM0l::l0N dXXXXXXXXXx xM
|
|
||||||
N :XX, :MMMMMMMMMMMMMMMM; :XXXXXXXXXXX; ,MMMMMMMMMMMMMMMMMMM' :XXXXXXXXXX, .M
|
|
||||||
d OXX; ,MMMMMMMMMMMMMMMM, :XXXXXXXXXXX: ,MMMMMMMMMMMMMMMMMMM' :XXXXXXXXXXx O
|
|
||||||
, .XXXx dxxxxxxxxxxxxxxd xXXXXXXXXXXXx dxxxxxxxxxxxxxxxxxd xXXXXXXXXXXK. c
|
|
||||||
. :XXXXc'''''''''''''''''':XXXXXXXXXXXXXc'''''''''''''''''''''cXXXXXXXXXXXX, '
|
|
||||||
lXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX: .
|
|
||||||
lXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; .
|
|
||||||
. :XXXXXK0000000000000000000000000000000000000000000000000000KXXXXXXXXXXXXX, '
|
|
||||||
, .XXXXXk .KXXXXXXXXXXXK. c
|
|
||||||
x OXXXXXKKo .............................................. lXXXXXXXXXXXx 0
|
|
||||||
W. ;XXXXXXXO ............................................... .XXXXXXXXXXX' .M
|
|
||||||
Md kXXXXXXX, .............................................. KXXXXXXXXXd OM
|
|
||||||
MM, .0XXXXXX0. .............................................. KXXXXXXXXO cMM
|
|
||||||
MMN. .KXXXXXXk ............................................ ;XXXXXXXX0. ,WMM
|
|
||||||
MMMX. .0XXXXXXk .........................'''............... .0XXXXXXXO. 'WMMM
|
|
||||||
MMMMX. .kXXXXXXO. .................,cdkO0KKK0Oxo:'........ .kXXXXXXXd ,WMMMM
|
|
||||||
MMMMMW; cKXXXXXK; .............'ckKKKKKKKKKKKKKK0x;.... '0XXXXXX0; cWMMMMM
|
|
||||||
MMMMMMMk. .dXXXXXXx. ..........:OKKKKKKKKKKKKKKKKKKKo. .oXXXXXXKl .0MMMMMMM
|
|
||||||
MMMMMMMMNc .xXXXXXKo. .......lKKKKKKKKKKKKKKKKKK0o' .dKXXXXXKd. lWMMMMMMMM
|
|
||||||
MMMMMMMMMMK; .oKXXXXKd' ...:KKKKKKKKKKKKKKK0xc' .:kXXXXXX0l. cXMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMXc ;xKXXXX0o,. .;ldxkkOkkxol:'. .,lOXXXXXXKd, .lNMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMWx, ,lOXXXXX0xl:,.........';cok0XXXXXXKkl' ;kWMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMMMMNx, .'cdOKXXXXXXXXXXXXXXXXXXXXKOd:' ;kWMMMMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMMMMMMMW0o, .';:loddxxxxddol:,.. .,o0MMMMMMMMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMMMMMMMMMMMMXko:'. .':oONMMMMMMMMMMMMMMMMMMMMMMMMM
|
|
||||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0dc;'......,:lx0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
|
||||||
':ox0KXXK0koc'.
|
|
||||||
.;ok000kxollcccclodxOKXKko;.
|
|
||||||
;d00dc'. .;lkXKd;.
|
|
||||||
.o0Oc. .,codkO0KKKKK0Okxdl;'. .;dXKo'
|
|
||||||
.oKx, .:d0XXXXXXXXXXXXXXXXXXXXXXXKkl,. .c0Nd.
|
|
||||||
,0O; .:xKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOl' .oN0;
|
|
||||||
;Kx. ;xKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0l. :KX:
|
|
||||||
,Kx. .lKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXk, ;XX,
|
|
||||||
k0. .oKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO, oWO.
|
|
||||||
,No :KXX0Okk0XXXXXXXXXXXXXXXXXXXXXXXXXXXK0Okk0KXXXXXXXXXXXk. .KW;
|
|
||||||
cN, .kKl' ... 'l0XXXXXXXXXXXXXXXXXXXXk:. ... .;dKXXXXXXXXK: kMo
|
|
||||||
oN. '0d. c0WMMWo ;0XXXXXXXXXXXXXXXKo. 'dKWMMMX, .cKXXXXXXXXo xMd
|
|
||||||
lW. 'Kl .KMMMMM: xXXXXXXXXXXXXX0' ,KMMMMMMM. .OXXXXXXXXx xMd
|
|
||||||
;M; .Kd .NMMMMMMl kXXXXXXXXXXXK. lMMMMMMMMM. .OXXXXXXXXd 0M:
|
|
||||||
Nx 0X. dMMMMMMMMk;..;dl 'XXXXXXXXXXXc 'MMMMMMMMMMWd,..:Oc ,XXXXXXXXX: .WW.
|
|
||||||
dW. lXK KMMMMMMMMMMMMMMK KXXXXXXXXXX. dMMMMMMMMMMMMMMMMM0 KXXXXXXXXK. dMk
|
|
||||||
Wx KXK 0MMMMMMMMMMMMMMK KXXXXXXXXXX. xMMMMMMMMMMMMMMMMM0 KXXXXXXXXXc .MM.
|
|
||||||
:M; ;XXX; ,xxxxxxxxxxxxxx: 'XXXXXXXXXXXc 'xxxxxxxxxxxxxxxxx; ,XXXXXXXXXXO KMl
|
|
||||||
xM. oXXX0,,,,,,,,,,,,,,,,,,kXXXXXXXXXXXK;,,,,,,,,,,,,,,,,,,,,OXXXXXXXXXXX. xMO
|
|
||||||
0M xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. oMK
|
|
||||||
0M dXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. oMK
|
|
||||||
xM. lXXXXXkdddddddddddddddddddddddddddddddddddddddddddddddddKXXXXXXXXXXXK kMk
|
|
||||||
:Mc 'XXXXXc'. :XXXXXXXXXXXx XMc
|
|
||||||
W0 OXXXXXX0 ............................................ OXXXXXXXXXX; ,MM.
|
|
||||||
oM' ,XXXXXXX, ............................................ oXXXXXXXXXO 0Mx
|
|
||||||
NK dXXXXXXO ........................................... lXXXXXXXXK. ;MN.
|
|
||||||
,Md kXXXXXXd .......................................... xXXXXXXXX; .NM;
|
|
||||||
cMl kXXXXXXo ......................................... .KXXXXXXK; .XMl
|
|
||||||
lMl dXXXXXXd ..................':lodxxdol:'......... .0XXXXXXK' .XMo
|
|
||||||
:Wx :KXXXXXk. ..............,lkKKKKKKKKKKKKkc'.... .0XXXXXXk. 'NMc
|
|
||||||
.XK. .xXXXXXK: ..........'oKKKKKKKKKKKKKKKKK0l.. lKXXXXX0; oMN'
|
|
||||||
dWo .xXXXXXO; .......,OKKKKKKKKKKKKKKKKKkc. .c0XXXXX0c 'KMx
|
|
||||||
.0Nc .oKXXXXO:. ...'0KKKKKKKKKKKKKK0d:. ,xKXXXXXO: .OM0'
|
|
||||||
,0No. ;xKXXXKx:. .;ldxkOOkkxol;'. 'cxKXXXXX0l. ,OMK;
|
|
||||||
'kWk, ,o0XXXXKko:,.........,:ldOKXXXXXKkc. .lXMO,
|
|
||||||
.cKNx; .,cxOKXXXXXXXXXXXXXXXXXXKko:. .lKMKl.
|
|
||||||
.cOWKd;. ..,;cllooollc:;'. 'ckNM0c.
|
|
||||||
'lONW0xl;.. .,:okXMNOo,
|
|
||||||
.,cdOXWMWNXKK00KKXNMMWXOdc,.
|
|
||||||
.,cokO00Okdc,.
|
|
||||||
|
|
||||||
|
|
||||||
[H[J
|
|
||||||
|
|
||||||
bdisk
|
|
||||||
\d \t
|
|
||||||
\4
|
|
||||||
\4{tun0}
|
|
||||||
https://bdisk.square-r00t.net/
|
|
@ -1,14 +1,14 @@
|
|||||||
LANG=en_US.UTF-8
|
LANG=en_US.UTF-8
|
||||||
LC_CTYPE="en_US.UTF-8"
|
#LC_CTYPE="en_US.UTF-8"
|
||||||
LC_NUMERIC="en_US.UTF-8"
|
#LC_NUMERIC="en_US.UTF-8"
|
||||||
LC_TIME="en_US.UTF-8"
|
#LC_TIME="en_US.UTF-8"
|
||||||
LC_COLLATE="en_US.UTF-8"
|
#LC_COLLATE="en_US.UTF-8"
|
||||||
LC_MONETARY="en_US.UTF-8"
|
#LC_MONETARY="en_US.UTF-8"
|
||||||
LC_MESSAGES="en_US.UTF-8"
|
#LC_MESSAGES="en_US.UTF-8"
|
||||||
LC_PAPER="en_US.UTF-8"
|
#LC_PAPER="en_US.UTF-8"
|
||||||
LC_NAME="en_US.UTF-8"
|
#LC_NAME="en_US.UTF-8"
|
||||||
LC_ADDRESS="en_US.UTF-8"
|
#LC_ADDRESS="en_US.UTF-8"
|
||||||
LC_TELEPHONE="en_US.UTF-8"
|
#LC_TELEPHONE="en_US.UTF-8"
|
||||||
LC_MEASUREMENT="en_US.UTF-8"
|
#LC_MEASUREMENT="en_US.UTF-8"
|
||||||
LC_IDENTIFICATION="en_US.UTF-8"
|
#LC_IDENTIFICATION="en_US.UTF-8"
|
||||||
LC_ALL=
|
#LC_ALL=
|
||||||
|
@ -1,40 +1 @@
|
|||||||
':ox0KXXK0koc'.
|
((Generated by BDisk. https://bdisk.square-r00t.net/))
|
||||||
.;ok000kxollcccclodxOKXKko;.
|
|
||||||
;d00dc'. .;lkXKd;.
|
|
||||||
.o0Oc. .,codkO0KKKKK0Okxdl;'. .;dXKo'
|
|
||||||
.oKx, .:d0XXXXXXXXXXXXXXXXXXXXXXXKkl,. .c0Nd.
|
|
||||||
,0O; .:xKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOl' .oN0;
|
|
||||||
;Kx. ;xKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0l. :KX:
|
|
||||||
,Kx. .lKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXk, ;XX,
|
|
||||||
k0. .oKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO, oWO.
|
|
||||||
,No :KXX0Okk0XXXXXXXXXXXXXXXXXXXXXXXXXXXK0Okk0KXXXXXXXXXXXk. .KW;
|
|
||||||
cN, .kKl' ... 'l0XXXXXXXXXXXXXXXXXXXXk:. ... .;dKXXXXXXXXK: kMo
|
|
||||||
oN. '0d. c0WMMWo ;0XXXXXXXXXXXXXXXKo. 'dKWMMMX, .cKXXXXXXXXo xMd
|
|
||||||
lW. 'Kl .KMMMMM: xXXXXXXXXXXXXX0' ,KMMMMMMM. .OXXXXXXXXx xMd
|
|
||||||
;M; .Kd .NMMMMMMl kXXXXXXXXXXXK. lMMMMMMMMM. .OXXXXXXXXd 0M:
|
|
||||||
Nx 0X. dMMMMMMMMk;..;dl 'XXXXXXXXXXXc 'MMMMMMMMMMWd,..:Oc ,XXXXXXXXX: .WW.
|
|
||||||
dW. lXK KMMMMMMMMMMMMMMK KXXXXXXXXXX. dMMMMMMMMMMMMMMMMM0 KXXXXXXXXK. dMk
|
|
||||||
Wx KXK 0MMMMMMMMMMMMMMK KXXXXXXXXXX. xMMMMMMMMMMMMMMMMM0 KXXXXXXXXXc .MM.
|
|
||||||
:M; ;XXX; ,xxxxxxxxxxxxxx: 'XXXXXXXXXXXc 'xxxxxxxxxxxxxxxxx; ,XXXXXXXXXXO KMl
|
|
||||||
xM. oXXX0,,,,,,,,,,,,,,,,,,kXXXXXXXXXXXK;,,,,,,,,,,,,,,,,,,,,OXXXXXXXXXXX. xMO
|
|
||||||
0M xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. oMK
|
|
||||||
0M dXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. oMK
|
|
||||||
xM. lXXXXXkdddddddddddddddddddddddddddddddddddddddddddddddddKXXXXXXXXXXXK kMk
|
|
||||||
:Mc 'XXXXXc'. :XXXXXXXXXXXx XMc
|
|
||||||
W0 OXXXXXX0 ............................................ OXXXXXXXXXX; ,MM.
|
|
||||||
oM' ,XXXXXXX, ............................................ oXXXXXXXXXO 0Mx
|
|
||||||
NK dXXXXXXO ........................................... lXXXXXXXXK. ;MN.
|
|
||||||
,Md kXXXXXXd .......................................... xXXXXXXXX; .NM;
|
|
||||||
cMl kXXXXXXo ......................................... .KXXXXXXK; .XMl
|
|
||||||
lMl dXXXXXXd ..................':lodxxdol:'......... .0XXXXXXK' .XMo
|
|
||||||
:Wx :KXXXXXk. ..............,lkKKKKKKKKKKKKkc'.... .0XXXXXXk. 'NMc
|
|
||||||
.XK. .xXXXXXK: ..........'oKKKKKKKKKKKKKKKKK0l.. lKXXXXX0; oMN'
|
|
||||||
dWo .xXXXXXO; .......,OKKKKKKKKKKKKKKKKKkc. .c0XXXXX0c 'KMx
|
|
||||||
.0Nc .oKXXXXO:. ...'0KKKKKKKKKKKKKK0d:. ,xKXXXXXO: .OM0'
|
|
||||||
,0No. ;xKXXXKx:. .;ldxkOOkkxol;'. 'cxKXXXXX0l. ,OMK;
|
|
||||||
'kWk, ,o0XXXXKko:,.........,:ldOKXXXXXKkc. .lXMO,
|
|
||||||
.cKNx; .,cxOKXXXXXXXXXXXXXXXXXXKko:. .lKMKl.
|
|
||||||
.cOWKd;. ..,;cllooollc:;'. 'ckNM0c.
|
|
||||||
'lONW0xl;.. .,:okXMNOo,
|
|
||||||
.,cdOXWMWNXKK00KKXNMMWXOdc,.
|
|
||||||
.,cokO00Okdc,.
|
|
||||||
|
10
extra/pre-build.d/etc/pacman.d/hooks/archiso.hook
Normal file
10
extra/pre-build.d/etc/pacman.d/hooks/archiso.hook
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[Trigger]
|
||||||
|
Type = File
|
||||||
|
Operation = Install
|
||||||
|
Operation = Upgrade
|
||||||
|
Target = usr/lib/initcpio/hooks/archiso
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Modifying archiso usable space...
|
||||||
|
When = PostTransaction
|
||||||
|
Exec = /usr/bin/sed -i -e 's/"size=${cow_spacesize}",//g' -e 's@^[[:space:]]*if\ !\ cp\ "${img}"\ "/run/archiso/copytoram/${img_fullname}"\ ;\ then@if ! pv -pterabT "${img}" > "/run/archiso/copytoram/${img_fullname}" ; then@g' /usr/lib/initcpio/hooks/archiso
|
@ -1,5 +1,7 @@
|
|||||||
#/bin/sh -
|
#/bin/sh -
|
||||||
|
|
||||||
|
locale-gen
|
||||||
|
|
||||||
#chmod 4755 /opt/google/chrome-beta/chrome-sandbox
|
#chmod 4755 /opt/google/chrome-beta/chrome-sandbox
|
||||||
chmod 4755 /usr/bin/sudo
|
chmod 4755 /usr/bin/sudo
|
||||||
|
|
||||||
@ -20,7 +22,7 @@ do
|
|||||||
done
|
done
|
||||||
|
|
||||||
function fuck_you_gimme_net() {
|
function fuck_you_gimme_net() {
|
||||||
IFACE=$(ifconfig -a -s | egrep -E '^((en|wl)p?|em)' | awk '{print $1}' | tr '\n' ' ' | sed -e 's/\ $//g')
|
IFACE=$(ip -o link | awk '{print $2}' | egrep -E '^((en|wl)p?|em)' | sed -e 's/:$//g' | head -n1)
|
||||||
for i in ${IFACE};
|
for i in ${IFACE};
|
||||||
do
|
do
|
||||||
|
|
||||||
@ -39,15 +41,15 @@ do
|
|||||||
DEV='wireless-open'
|
DEV='wireless-open'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ifconfig ${i} down
|
ip link set dev ${i} down
|
||||||
cp -a /etc/netctl/examples/${DEV} /etc/netctl/${i}
|
cp -a /etc/netctl/examples/${DEV} /etc/netctl/${i}
|
||||||
sed -i -re "s/^([[:space:]]*Interface[[:space:]]*=).*/\1${i}/g" /etc/netctl/${i}
|
sed -i -re "s/^([[:space:]]*Interface[[:space:]]*=).*/\1${i}/g" /etc/netctl/${i}
|
||||||
if [ "${DEV}" == "wireless-open" ];
|
if [ "${DEV}" == "wireless-open" ];
|
||||||
then
|
then
|
||||||
ifconfig ${i} up && \
|
ip link set dev ${i} up && \
|
||||||
ESSID=$(iwlist ${i} scanning | egrep -A5 -B5 '^[[:space:]]*Encryption key:off' | egrep '^[[:space:]]*ESSID:' | sed -re 's/^[[:space:]]*ESSID:(.*)/\1/g')
|
ESSID=$(iwlist ${i} scanning | egrep -A5 -B5 '^[[:space:]]*Encryption key:off' | egrep '^[[:space:]]*ESSID:' | sed -re 's/^[[:space:]]*ESSID:(.*)/\1/g')
|
||||||
sed -i -re "s/^([[:space:]]*ESSID[[:space:]]*=).*/\1${ESSID}/g" /etc/netctl/${i}
|
sed -i -re "s/^([[:space:]]*ESSID[[:space:]]*=).*/\1${ESSID}/g" /etc/netctl/${i}
|
||||||
ifconfig ${i} down
|
ip link set ${i} down
|
||||||
fi
|
fi
|
||||||
netctl restart ${i} > /dev/null 2>&1
|
netctl restart ${i} > /dev/null 2>&1
|
||||||
#cat /etc/resolvconf.conf.failover > /etc/resolvconf.conf
|
#cat /etc/resolvconf.conf.failover > /etc/resolvconf.conf
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
/dev/null
|
@ -1 +1 @@
|
|||||||
/usr/lib/systemd/system/NetworkManager.service
|
/dev/null
|
@ -14,13 +14,15 @@ atop
|
|||||||
autopsy
|
autopsy
|
||||||
autossh
|
autossh
|
||||||
backuppc
|
backuppc
|
||||||
#bacula ## TODO: grab all the bacula packages in here
|
## TODO: grab all the bacula packages in here
|
||||||
|
#bacula
|
||||||
beep
|
beep
|
||||||
bin86
|
bin86
|
||||||
bind-tools
|
bind-tools
|
||||||
binutils
|
binutils
|
||||||
bluez-utils
|
bluez-utils
|
||||||
bonnie++ ## TODO: ugh. apacman has a new "regex mode"... that you can't disable. https://github.com/oshazard/apacman/issues/79
|
## TODO: ugh. apacman has a new "regex mode"... that you can't disable. https://github.com/oshazard/apacman/issues/79
|
||||||
|
#bonnie++
|
||||||
boxbackup-client
|
boxbackup-client
|
||||||
boxbackup-server
|
boxbackup-server
|
||||||
bozocrack-git
|
bozocrack-git
|
||||||
@ -55,13 +57,15 @@ dd_rescue
|
|||||||
dd_rhelp
|
dd_rhelp
|
||||||
debianutils
|
debianutils
|
||||||
debootstrap
|
debootstrap
|
||||||
#dialog #giving a weird dependency issue
|
## giving a weird dependency issue
|
||||||
|
#dialog
|
||||||
diffutils
|
diffutils
|
||||||
djohn
|
djohn
|
||||||
dmidecode
|
dmidecode
|
||||||
dnssec-anchors
|
dnssec-anchors
|
||||||
dnstracer
|
dnstracer
|
||||||
#dnsutils #replaced by bind-tools, https://www.archlinux.org/packages/extra/x86_64/bind-tools/
|
## replaced by bind-tools, https://www.archlinux.org/packages/extra/x86_64/bind-tools/
|
||||||
|
#dnsutils
|
||||||
dos2unix
|
dos2unix
|
||||||
dropbear
|
dropbear
|
||||||
dstat
|
dstat
|
||||||
@ -110,6 +114,7 @@ gst-libav
|
|||||||
gst-plugins-ugly
|
gst-plugins-ugly
|
||||||
hashcat
|
hashcat
|
||||||
hashdeep
|
hashdeep
|
||||||
|
haveged
|
||||||
hddtemp
|
hddtemp
|
||||||
hdparm
|
hdparm
|
||||||
hexcurse
|
hexcurse
|
||||||
@ -144,14 +149,17 @@ keyutils
|
|||||||
kismet-allplugins
|
kismet-allplugins
|
||||||
lftp
|
lftp
|
||||||
links
|
links
|
||||||
#logkeys-git # requires a /dev/input, which apparently isn't included in the chroots
|
## requires a /dev/input, which apparently isn't included in the chroots
|
||||||
|
#logkeys-git
|
||||||
lm_sensors
|
lm_sensors
|
||||||
lrzsz
|
lrzsz
|
||||||
lshw
|
lshw
|
||||||
#lsiutil # giving intermittent errors when trying to fetch source
|
## giving intermittent errors when trying to fetch source
|
||||||
|
#lsiutil
|
||||||
lsof
|
lsof
|
||||||
lsscsi
|
lsscsi
|
||||||
#lxde # apacman currently doesn't like package groups, so...
|
## apacman currently doesn't like package groups, so...
|
||||||
|
#lxde
|
||||||
gpicview
|
gpicview
|
||||||
lxappearance
|
lxappearance
|
||||||
lxappearance-obconf
|
lxappearance-obconf
|
||||||
@ -172,21 +180,23 @@ pcmanfm
|
|||||||
lynx
|
lynx
|
||||||
#lzip
|
#lzip
|
||||||
macchanger
|
macchanger
|
||||||
#magicrescue # no longer maintained, upstream down
|
## no longer maintained, upstream down
|
||||||
|
#magicrescue
|
||||||
mbr
|
mbr
|
||||||
mbuffer
|
mbuffer
|
||||||
mcelog
|
mcelog
|
||||||
mdadm
|
mdadm
|
||||||
mdcrack
|
mdcrack
|
||||||
# superseded by storcli
|
## superseded by storcli
|
||||||
#megaraid-cli
|
#megaraid-cli
|
||||||
memtester
|
memtester
|
||||||
mfoc
|
mfoc
|
||||||
minicom
|
minicom
|
||||||
#mondo # mindi-busybox fails to build 09.23.2016
|
## mindi-busybox fails to build 09.23.2016
|
||||||
|
#mondo
|
||||||
mtd-utils
|
mtd-utils
|
||||||
mtr
|
mtr
|
||||||
mtree
|
mtree-git
|
||||||
multipath-tools
|
multipath-tools
|
||||||
myrescue
|
myrescue
|
||||||
nbd
|
nbd
|
||||||
@ -197,13 +207,14 @@ net-snmp
|
|||||||
netselect
|
netselect
|
||||||
nettle
|
nettle
|
||||||
networkmanager-pptp
|
networkmanager-pptp
|
||||||
nginx-devel
|
nginx-mainline
|
||||||
ngrep
|
ngrep
|
||||||
nmap
|
nmap
|
||||||
nmon
|
nmon
|
||||||
ntfs-3g
|
ntfs-3g
|
||||||
ntfsfixboot
|
ntfsfixboot
|
||||||
#nwipe #broken since they moved to github(?)
|
## broken since they moved to github(?)
|
||||||
|
#nwipe
|
||||||
nwipe-git
|
nwipe-git
|
||||||
obnam
|
obnam
|
||||||
open-iscsi
|
open-iscsi
|
||||||
@ -272,13 +283,15 @@ smartmontools
|
|||||||
smbclient
|
smbclient
|
||||||
s-nail
|
s-nail
|
||||||
socat
|
socat
|
||||||
#star ## do people even USE tape backups anymore?
|
## do people even USE tape backups anymore?
|
||||||
|
#star
|
||||||
storcli
|
storcli
|
||||||
strace
|
strace
|
||||||
stress
|
stress
|
||||||
sucrack
|
sucrack
|
||||||
symlinks
|
symlinks
|
||||||
sysstat
|
sysstat
|
||||||
|
systemd-sysvcompat
|
||||||
tcpdump
|
tcpdump
|
||||||
tcpslice
|
tcpslice
|
||||||
tcptraceroute
|
tcptraceroute
|
||||||
@ -289,6 +302,7 @@ thttpd
|
|||||||
tmon
|
tmon
|
||||||
tmux
|
tmux
|
||||||
tre
|
tre
|
||||||
|
tree
|
||||||
truecrack-git
|
truecrack-git
|
||||||
truecrypt
|
truecrypt
|
||||||
tor
|
tor
|
||||||
@ -314,7 +328,8 @@ vncrack
|
|||||||
vnstat
|
vnstat
|
||||||
vpnc
|
vpnc
|
||||||
weplab
|
weplab
|
||||||
#whdd #currently depends on dialog, which is broke as shit
|
## currently depends on dialog, which is broke as shit
|
||||||
|
#whdd
|
||||||
whois
|
whois
|
||||||
wifite-mod-pixiewps-git
|
wifite-mod-pixiewps-git
|
||||||
wipe
|
wipe
|
||||||
|
@ -14,13 +14,15 @@ atop
|
|||||||
autopsy
|
autopsy
|
||||||
autossh
|
autossh
|
||||||
backuppc
|
backuppc
|
||||||
#bacula ## TODO: grab all the bacula packages in here
|
## TODO: grab all the bacula packages in here
|
||||||
|
#bacula
|
||||||
beep
|
beep
|
||||||
bin86
|
bin86
|
||||||
bind-tools
|
bind-tools
|
||||||
binutils
|
binutils
|
||||||
bluez-utils
|
bluez-utils
|
||||||
bonnie++ ## TODO: ugh. apacman has a new "regex mode"... that you can't disable. https://github.com/oshazard/apacman/issues/79
|
## TODO: ugh. apacman has a new "regex mode"... that you can't disable. https://github.com/oshazard/apacman/issues/79
|
||||||
|
#bonnie++
|
||||||
boxbackup-client
|
boxbackup-client
|
||||||
boxbackup-server
|
boxbackup-server
|
||||||
bozocrack-git
|
bozocrack-git
|
||||||
@ -55,13 +57,15 @@ dd_rescue
|
|||||||
dd_rhelp
|
dd_rhelp
|
||||||
debianutils
|
debianutils
|
||||||
debootstrap
|
debootstrap
|
||||||
#dialog #giving a weird dependency issue
|
## giving a weird dependency issue
|
||||||
|
#dialog
|
||||||
diffutils
|
diffutils
|
||||||
djohn
|
djohn
|
||||||
dmidecode
|
dmidecode
|
||||||
dnssec-anchors
|
dnssec-anchors
|
||||||
dnstracer
|
dnstracer
|
||||||
#dnsutils #replaced by bind-tools, https://www.archlinux.org/packages/extra/x86_64/bind-tools/
|
## replaced by bind-tools, https://www.archlinux.org/packages/extra/x86_64/bind-tools/
|
||||||
|
#dnsutils
|
||||||
dos2unix
|
dos2unix
|
||||||
dropbear
|
dropbear
|
||||||
dstat
|
dstat
|
||||||
@ -110,6 +114,7 @@ gst-libav
|
|||||||
gst-plugins-ugly
|
gst-plugins-ugly
|
||||||
hashcat
|
hashcat
|
||||||
hashdeep
|
hashdeep
|
||||||
|
haveged
|
||||||
hddtemp
|
hddtemp
|
||||||
hdparm
|
hdparm
|
||||||
hexcurse
|
hexcurse
|
||||||
@ -144,14 +149,17 @@ keyutils
|
|||||||
kismet-allplugins
|
kismet-allplugins
|
||||||
lftp
|
lftp
|
||||||
links
|
links
|
||||||
#logkeys-git # requires a /dev/input, which apparently isn't included in the chroots
|
## requires a /dev/input, which apparently isn't included in the chroots
|
||||||
|
#logkeys-git
|
||||||
lm_sensors
|
lm_sensors
|
||||||
lrzsz
|
lrzsz
|
||||||
lshw
|
lshw
|
||||||
#lsiutil # giving intermittent errors when trying to fetch source
|
## giving intermittent errors when trying to fetch source
|
||||||
|
#lsiutil
|
||||||
lsof
|
lsof
|
||||||
lsscsi
|
lsscsi
|
||||||
#lxde # apacman currently doesn't like package groups, so...
|
## apacman currently doesn't like package groups, so...
|
||||||
|
#lxde
|
||||||
gpicview
|
gpicview
|
||||||
lxappearance
|
lxappearance
|
||||||
lxappearance-obconf
|
lxappearance-obconf
|
||||||
@ -172,21 +180,23 @@ pcmanfm
|
|||||||
lynx
|
lynx
|
||||||
#lzip
|
#lzip
|
||||||
macchanger
|
macchanger
|
||||||
#magicrescue # no longer maintained, upstream down
|
## no longer maintained, upstream down
|
||||||
|
#magicrescue
|
||||||
mbr
|
mbr
|
||||||
mbuffer
|
mbuffer
|
||||||
mcelog
|
mcelog
|
||||||
mdadm
|
mdadm
|
||||||
mdcrack
|
mdcrack
|
||||||
# superseded by storcli
|
## superseded by storcli
|
||||||
#megaraid-cli
|
#megaraid-cli
|
||||||
memtester
|
memtester
|
||||||
mfoc
|
mfoc
|
||||||
minicom
|
minicom
|
||||||
#mondo # mindi-busybox fails to build 09.23.2016
|
## mindi-busybox fails to build 09.23.2016
|
||||||
|
#mondo
|
||||||
mtd-utils
|
mtd-utils
|
||||||
mtr
|
mtr
|
||||||
mtree
|
mtree-git
|
||||||
multipath-tools
|
multipath-tools
|
||||||
myrescue
|
myrescue
|
||||||
nbd
|
nbd
|
||||||
@ -197,13 +207,14 @@ net-snmp
|
|||||||
netselect
|
netselect
|
||||||
nettle
|
nettle
|
||||||
networkmanager-pptp
|
networkmanager-pptp
|
||||||
nginx-devel
|
nginx-mainline
|
||||||
ngrep
|
ngrep
|
||||||
nmap
|
nmap
|
||||||
nmon
|
nmon
|
||||||
ntfs-3g
|
ntfs-3g
|
||||||
ntfsfixboot
|
ntfsfixboot
|
||||||
#nwipe #broken since they moved to github(?)
|
## broken since they moved to github(?)
|
||||||
|
#nwipe
|
||||||
nwipe-git
|
nwipe-git
|
||||||
obnam
|
obnam
|
||||||
open-iscsi
|
open-iscsi
|
||||||
@ -272,13 +283,15 @@ smartmontools
|
|||||||
smbclient
|
smbclient
|
||||||
s-nail
|
s-nail
|
||||||
socat
|
socat
|
||||||
#star ## do people even USE tape backups anymore?
|
## do people even USE tape backups anymore?
|
||||||
|
#star
|
||||||
storcli
|
storcli
|
||||||
strace
|
strace
|
||||||
stress
|
stress
|
||||||
sucrack
|
sucrack
|
||||||
symlinks
|
symlinks
|
||||||
sysstat
|
sysstat
|
||||||
|
systemd-sysvcompat
|
||||||
tcpdump
|
tcpdump
|
||||||
tcpslice
|
tcpslice
|
||||||
tcptraceroute
|
tcptraceroute
|
||||||
@ -289,6 +302,7 @@ thttpd
|
|||||||
tmon
|
tmon
|
||||||
tmux
|
tmux
|
||||||
tre
|
tre
|
||||||
|
tree
|
||||||
truecrack-git
|
truecrack-git
|
||||||
truecrypt
|
truecrypt
|
||||||
tor
|
tor
|
||||||
@ -314,7 +328,8 @@ vncrack
|
|||||||
vnstat
|
vnstat
|
||||||
vpnc
|
vpnc
|
||||||
weplab
|
weplab
|
||||||
#whdd #currently depends on dialog, which is broke as shit
|
## currently depends on dialog, which is broke as shit
|
||||||
|
#whdd
|
||||||
whois
|
whois
|
||||||
wifite-mod-pixiewps-git
|
wifite-mod-pixiewps-git
|
||||||
wipe
|
wipe
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Commented lines are supported (via a preceding # only).
|
# Commented lines are supported (via a preceding # only).
|
||||||
# Packages from the AUR can be specified.
|
# Packages from the AUR can be specified.
|
||||||
# We need to install all X drivers.
|
# We need to install all X drivers.
|
||||||
mtree
|
mtree-git
|
||||||
|
@ -141,7 +141,12 @@ then
|
|||||||
fi
|
fi
|
||||||
# Add the regular user
|
# Add the regular user
|
||||||
useradd -m -s /bin/bash -c "${USERCOMMENT}" ${REGUSR}
|
useradd -m -s /bin/bash -c "${USERCOMMENT}" ${REGUSR}
|
||||||
usermod -aG users,games,video,audio ${REGUSR}
|
usermod -aG users,games,video,audio ${REGUSR} # TODO: remove this in lieu of $REGUSR_GRPS? these are all kind of required, though, for regular users anyways
|
||||||
|
for g in $(echo ${REGUSR_GRPS} | sed 's/,[[:space:]]*/ /g');
|
||||||
|
do
|
||||||
|
getent group ${g} > /dev/null 2>&1 || groupadd ${g}
|
||||||
|
usermod -aG ${g} ${REGUSR}
|
||||||
|
done
|
||||||
passwd -d ${REGUSR}
|
passwd -d ${REGUSR}
|
||||||
# Add them to sudoers
|
# Add them to sudoers
|
||||||
mkdir -p /etc/sudoers.d
|
mkdir -p /etc/sudoers.d
|
||||||
|
@ -2,5 +2,5 @@ Version: {{ bdisk['ver'] }}
|
|||||||
Build: {{ build['buildnum'] }}
|
Build: {{ build['buildnum'] }}
|
||||||
Time: {{ build['time'] }}
|
Time: {{ build['time'] }}
|
||||||
Machine: {{ hostname }} ({{ distro }})
|
Machine: {{ hostname }} ({{ distro }})
|
||||||
User: {{ build['user'] }}{% if build['realuser'] is defined and build['realuser'] > 0 %} ({{ build['realuser'] }}){% endif %}
|
User: {{ build['user'] }}{% if build['realuser'] is defined and build['realuser']|length > 0 %} ({{ build['realuser'] }}){% endif %}
|
||||||
|
|
||||||
|
1
extra/templates/pre-build.d/etc/hostname.j2
Normal file
1
extra/templates/pre-build.d/etc/hostname.j2
Normal file
@ -0,0 +1 @@
|
|||||||
|
{{ bdisk['uxname']|lower }}.loc.lan
|
@ -4,6 +4,7 @@ export PNAME='{{ bdisk['name'] }}'
|
|||||||
export DISTPUB='{{ bdisk['dev'] }}'
|
export DISTPUB='{{ bdisk['dev'] }}'
|
||||||
export DISTDESC='{{ bdisk['desc'] }}'
|
export DISTDESC='{{ bdisk['desc'] }}'
|
||||||
export REGUSR='{{ user['username']|lower }}'
|
export REGUSR='{{ user['username']|lower }}'
|
||||||
|
export REGUSR_GRPS='{{ user['groups'] }}'
|
||||||
export USERCOMMENT='{{ user['name'] }}'
|
export USERCOMMENT='{{ user['name'] }}'
|
||||||
export REGUSR_PASS='{{ user['password'] }}'
|
export REGUSR_PASS='{{ user['password'] }}'
|
||||||
export ROOT_PASS='{{ bdisk['root_password'] }}'
|
export ROOT_PASS='{{ bdisk['root_password'] }}'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user