Compare commits

...

53 Commits

Author SHA1 Message Date
77c1aea510 fixing package list 2018-01-06 00:13:19 -05:00
e72eee4dec net-tools => iproute2 fixes 2018-01-04 17:57:15 -05:00
2b233b9af9 updating gitignore 2018-01-04 04:31:18 -05:00
c2cfd3298f adding support for groups for live user 2018-01-03 12:44:46 -05:00
2db702107d update TODO 2017-10-16 03:37:10 -04:00
614c1b3e6f update to remain compatible with https://lists.archlinux.org/pipermail/arch-releng/2017-October/003796.html 2017-10-16 03:25:47 -04:00
80d5d127ca doc additions, TODO update 2017-10-01 12:09:14 -04:00
c10ceaa225 support for user-specified build.ini. untested. should probably then modify te config parser to search for a config if this is set to None, not to /etc/bdisk/build.ini. 2017-09-30 05:15:52 -04:00
167cd342fa minor fixes... 2017-08-22 11:55:34 -04:00
f1f37547dd updating TODO 2017-08-20 07:32:41 -04:00
034092ae49 updating docs 2017-08-20 07:25:55 -04:00
76da0bb29a so it appears that the http git clone for ipxe is a lot more stable than the git:// URI. 2017-08-19 22:44:16 -04:00
c489837d40 minor tweaks, fixes, etc. 2017-08-19 03:17:33 -04:00
705ad0732c gorram it 2017-05-11 21:23:14 -04:00
7e5e38a68a updating docs to use categorized bug system 2017-05-11 21:17:16 -04:00
84f062813e updating kernel patch reference link 2017-05-08 12:06:10 -04:00
111e812146 fixing mtree 2017-05-07 17:14:49 -04:00
a54b5b110d fixing bitness bug in single-arch 2017-05-07 10:21:36 -04:00
4217b7323b THERE it is. 2017-05-07 10:13:00 -04:00
02b4fbc454 Merge branch 'master' of square-r00t.net:bdisk 2017-05-07 10:10:19 -04:00
cc3f23efc7 change when we template the hostname 2017-05-07 10:10:11 -04:00
7c3a4a61b6 Merge branch 'master' of square-r00t.net:bdisk 2017-05-07 00:54:43 -04:00
e87976d740 updating todo 2017-05-07 00:54:36 -04:00
bf3dc2bb4c ...okay. final tagging, promise. that was a legit bug. 2017-05-06 11:21:40 -04:00
fae0a53034 gorram it. 2017-05-06 11:11:02 -04:00
f89283a301 fixing hostname 2017-05-06 10:01:15 -04:00
3bcc023c01 cleaning up some layout 2017-05-06 08:25:56 -04:00
74412e4dea fixing minor docs bug 2017-05-06 08:15:16 -04:00
676265b2aa fixing bug in gpg signing 2017-05-06 06:53:28 -04:00
6f3a0f6b86 missed the check if /etc/bdisk/build.ini is specified 2017-04-12 12:05:58 -04:00
ef8562fb0e Merge branch 'master' of square-r00t.net:bdisk 2017-04-12 11:57:14 -04:00
01e1b979f8 sudo fix 2017-04-12 09:11:53 -04:00
481a3e4cf9 Merge branch 'master' of square-r00t.net:bdisk 2017-04-11 22:21:32 -04:00
f9c44ecc8e because sometimes people don't read/grok docs 2017-04-11 22:21:11 -04:00
c9ccb3aa17 think we have something better here 2017-04-11 09:17:38 -04:00
6ff5a96d76 some more tweaks 2017-04-11 09:06:19 -04:00
e3236eb0d6 whoops! one oversight 2017-04-11 08:30:09 -04:00
60791f1596 okay. FINALLY fixed the weird issue with arbitrary paths 2017-04-11 08:27:18 -04:00
f37221c833 some further tweaking of conf paths 2017-04-11 08:19:24 -04:00
9afa665a75 Merge branch 'master' of square-r00t.net:bdisk 2017-04-11 08:10:03 -04:00
eec74f16e6 config update, oops 2017-04-11 08:09:50 -04:00
6760b46c5d and adding a tweak to check the pwd parent for the project dir 2017-04-11 02:07:52 -04:00
06c8924367 root user check 2017-04-11 01:34:14 -04:00
ac7bfa7320 minor fix for installing packages in live system 2017-03-26 12:30:56 -04:00
2545d0742a updated- docs might have some bugs, but working 2017-03-07 18:38:20 -05:00
f26e03fda9 adding split-architecture source tarball support... untested and probably not done yet, so not tagging a release 2017-03-06 03:21:23 -05:00
47684f989b updating docs- all python modules should be required 2017-02-05 14:25:22 -05:00
da3c8fa64a fixing overlayfs, networking 2017-01-18 20:54:13 -05:00
6d6585a62c updating docs to refer to most recent tag 2016-12-31 00:48:38 -05:00
a1fe1dbc0a (flipping tables) 2016-12-30 20:56:32 -05:00
59b106df67 gorram it 2016-12-30 20:52:22 -05:00
8b7a8ebc8c oops again 2016-12-30 20:45:18 -05:00
c9d1eb0902 oops 2016-12-30 20:35:29 -05:00
59 changed files with 934 additions and 515 deletions

10
.gitignore vendored
View File

@ -1,14 +1,19 @@
# 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


# These are user-controlled. # These are user-controlled.
#/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
@ -35,7 +40,6 @@
**/etc/systemd/system/multi-user.target.wants/openvpn@* **/etc/systemd/system/multi-user.target.wants/openvpn@*
**/etc/ssh **/etc/ssh
**/home **/home
**/root
**ssl/ **ssl/
!**ssl/.keepme !**ssl/.keepme
!**ssl/openssl.cnf !**ssl/openssl.cnf

View File

@ -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)
if os.path.isfile(dirmgr): for s in gpgkeyserver:
with open(dirmgr, 'r+') as f: if os.path.isfile(dirmgr):
findme = any(gpgkeyserver in line for line in f) with open(dirmgr, 'r+') as f:
if not findme: findme = any(s in line for line in f)
f.seek(0, os.SEEK_END) if not findme:
f.write("\n# Added by {0}.\nkeyserver {1}\n".format( f.seek(0, os.SEEK_END)
bdisk['pname'], f.write("\n# Added by {0}.\nkeyserver {1}\n".format(
gpgkeyserver)) bdisk['pname'],
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,46 +71,43 @@ 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)
with open(dirmgr, 'r+') as f: for s in gpgkeyserver:
findme = any(gpgkeyserver in line for line in f) with open(dirmgr, 'r+') as f:
if not findme: findme = any(s in line for line in f)
f.seek(0, os.SEEK_END) if not findme:
f.write("\n# Added by {0}.\nkeyserver {1}\n".format( f.seek(0, os.SEEK_END)
bdisk['pname'], f.write("\n# Added by {0}.\nkeyserver {1}\n".format(
build['gpgkeyserver'])) bdisk['pname'],
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: importkey = key.subkeys[0].fpr
# exit('{0}: ERROR: We cannot find key ID {1}!'.format( gpg.keylist_mode = gpgme.KEYLIST_MODE_LOCAL # local keyring (default)
# datetime.datetime.now(), DEVNULL = open(os.devnull, 'w')
# distkey)) print('{0}: [GPG] Importing {1} and signing it for verification purposes...'.format(
importkey = key.subkeys[0].fpr datetime.datetime.now(),
gpg.keylist_mode = gpgme.KEYLIST_MODE_LOCAL # local keyring (default) distkey))
DEVNULL = open(os.devnull, 'w') cmd = ['/usr/bin/gpg',
print('{0}: [GPG] Importing {1} and signing it for verification purposes...'.format( '--recv-keys',
datetime.datetime.now(), '--batch',
distkey)) '--yes',
cmd = ['/usr/bin/gpg', '0x{0}'.format(importkey)]
'--recv-keys', subprocess.call(cmd, stdout = DEVNULL, stderr = subprocess.STDOUT)
'--batch', sigkeys = []
'--yes', for i in gpg.get_key(importkey).subkeys:
'0x{0}'.format(importkey)] sigkeys.append(i.fpr)
subprocess.call(cmd, stdout = DEVNULL, stderr = subprocess.STDOUT) cmd = ['/usr/bin/gpg',
sigkeys = [] '--batch',
for k in gpg.get_key(importkey).subkeys: '--yes',
sigkeys.append(k.fpr) '--lsign-key',
cmd = ['/usr/bin/gpg', '0x{0}'.format(importkey)]
'--batch', subprocess.call(cmd, stdout = DEVNULL, stderr = subprocess.STDOUT)
'--yes',
'--lsign-key',
'0x{0}'.format(importkey)]
subprocess.call(cmd, stdout = DEVNULL, stderr = subprocess.STDOUT)
# We need to expose this key to the chroots, too, so we need to export it. # We need to expose this key to the chroots, too, so we need to export it.
with open('{0}/gpgkey.pub'.format(dlpath), 'wb') as f: with open('{0}/gpgkey.pub'.format(dlpath), 'wb') as f:
gpg.export(pkeys[0].subkeys[0].keyid, f) gpg.export(pkeys[0].subkeys[0].keyid, f)
@ -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()

View File

@ -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',

View File

@ -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()

View File

@ -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,7 +48,8 @@ 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)
shutil.copy2('{0}/{1}'.format(prepdir, k), '{0}/{1}'.format(httpdir, httpfiles[k])) if os.path.lexists('{0}/{1}'.format(prepdir, 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:
os.chown(os.path.join(root, d), uid, gid) os.chown(os.path.join(root, d), uid, gid)
@ -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:

View File

@ -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!

View File

@ -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):
@ -44,9 +48,11 @@ def getConfig(conf_file='/etc/bdisk/build.ini'):
if os.path.isfile(p): if os.path.isfile(p):
conf = p conf = p
break break
else:
conf = conf_file
else: else:
conf = conf_file conf = conf_file
defconf = '{0}/../extra/dist.build.ini'.format(os.path.dirname(os.path.realpath(__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'] == '':
repo = git.Repo(config_dict['build']['basedir']) try:
refs = repo.git.describe(repo.head.commit).split('-') repo = git.Repo(config_dict['build']['basedir'])
if len(refs) >= 2: refs = repo.git.describe(repo.head.commit).split('-')
config_dict['bdisk']['ver'] = refs[0] + 'r' + refs[1] if len(refs) >= 2:
else: config_dict['bdisk']['ver'] = refs[0] + 'r' + refs[1]
config_dict['bdisk']['ver'] = refs[0] else:
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]
try: if (validators.domain(config_dict['src'][a]['mirror']) or validators.ipv4(
getaddrinfo(config_dict['build']['mirror'], None) config_dict['src'][a]['mirror']) or validatords.ipv6(
except: config_dict['src'][a]['mirror'])):
exit(('{0}: ERROR: {1} does not resolve and cannot be used as a ' + try:
'mirror for the bootstrap tarballs. Check your configuration.').format( getaddrinfo(config_dict['src'][a]['mirror'], None)
datetime.datetime.now(), except:
config_dict['build']['host'])) exit(('{0}: ERROR: {1} does not resolve and cannot be used as a ' +
'mirror for the bootstrap tarballs. Check your configuration.').format(
datetime.datetime.now(),
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.

View File

@ -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

View File

@ -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'
mirror = build['mirrorproto'] + '://' + build['mirror']
rlsdir = mirror + build['mirrorpath']
sha_in = urlopen(mirror + build['mirrorchksum'])
# returns path/filename e.g. /some/path/to/file.tar.gz
# we use .gnupg since we'll need it later.
os.makedirs(dlpath + '/.gnupg', exist_ok = True)
tarball_path = {} tarball_path = {}
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: for a in arch:
locsrc = conf['source_' + a]
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
# we use .gnupg since we'll need it later.
os.makedirs(dlpath + '/.gnupg', exist_ok = True)
tarball_path[a] = dlpath + '/.latest.' + a + '.tar'
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]))))
print("{0}: [PREP] Checking hash checksum {1} against {2}...".format( if locsrc['mirrorchksum'] != '':
datetime.datetime.now(), print("{0}: [PREP] Checking hash checksum {1} against {2}...".format(
sha1, datetime.datetime.now(),
tarball_path[a])) hashsum,
tarball_hash = hashlib.sha1(open(tarball_path[a], 'rb').read()).hexdigest() tarball_path[a]))
if tarball_hash != sha1: # Calculate the checksum according to type specified.
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 " + tarball_hash = False
"Please delete it and try again.").format(datetime.datetime.now(), tarball)) for i in hashlib.algorithms_available:
elif build['mirrorgpgsig'] != '': if hash_type == i:
# okay, so the sha1 matches. let's verify the signature. hashfunc = getattr(hashlib, i)
if build['mirrorgpgsig'] == '.sig': 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 " +
"Please delete it and try again.").format(datetime.datetime.now(), tarball))
if locsrc['mirrorgpgsig'] != '':
# let's verify the signature.
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:

View File

@ -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'"'



View File

@ -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

View File

@ -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

View File

@ -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>>!

View File

@ -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]`

View File

@ -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.



View File

@ -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/`:



View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

View File

@ -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

View 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']

View 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']

View 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']

View 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']

View 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']

View 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']

View 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']

View 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']

View File

@ -26,33 +26,49 @@ 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
basedir = /opt/dev/bdisk basedir = /var/lib/bdisk
isodir = ${dlpath}/iso isodir = ${dlpath}/iso
srcdir = ${dlpath}/src 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

View File

@ -1 +0,0 @@
bdisk-live.loc.lan

View File

@ -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



View File

@ -1,90 +0,0 @@

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,.




bdisk
\d \t
\4
\4{tun0}
https://bdisk.square-r00t.net/

View File

@ -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=

View File

@ -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,.

View 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

View File

@ -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

View File

@ -0,0 +1,2 @@
#!/bin/bash
# Put any arch-specific tasks here. They will be run after /root/pre-build.sh.

View File

@ -1,10 +0,0 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC5+2R7ykAgF/IBOY0gvxWZpLzk+CpmjiCBFtQX2WN54qPYOluPgFudUEZ/zax0wccZG9qXm8fM7Jc11GqFVkxWU7sNEAIirmsE54nnXeIg7BEyamJ6l0FHkqgVV+GCWffe1cJtniIu99kz3KwgcPto4zgqcxE/RH8eSAPAX7SECAZxs3CMfPbOY7DcyUgKXaPynDvebp1Dp9q6lSrW1FBfPJOYzFdO4xGQV9VUQoCBjTqGfRCq5fvJ/tFpZAB5omwjfCis+rvgrWZsur7G5QSdh5Bphkblm9rBHdb8ot1CYSnHjKYfDr6IEDaQjiN1yw7YyjtXAjGF6a6El1AWHTnQPI5lYqXa5sL5XxjIP22NP2AihLeCey/e6sms4RrapKD5f6rnOF4zrMVkU8L40brpe3TsmqnYcmqRvj8h9U/2mMmPHzaUJvgf44JjQEXa57brU5BzQZJKZM7tBbIqGKwgI0VjYyHzfCWRd/TGvccPsCQajqIBrMet8EQc7TY4FLuZZyW+B3Jx7Tr2xSg03PJ+ODNjd1LL3e/vq6NdBXA2gNGY+9GrytfCQd3Oot4KV6JLgk+lHKlvk+24rxwPj/T9koimntQff5V+qS+NUqh/OpQSphecn6gz03rtmOCeOhLPADwdRmqSdbtSYZSr1HA+/yPsgcWBxrM2ag0g6SLC+w== root@maqabi
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC5deDSXoounrijOls1qxtKFqT4xhaOdTZ5qWVYvF/2+O/Jq4B88pYbwFxd1YN1Dr67t/WUCToAUDiHBxxq3qSEbwQ1fNXnYPq7/2FvB715K5RIuQicAcHRmBHu70MZ9axPNMA+66I49Ps1t9rtssHBNvytrKHJ7/ACEsl024YQCxRtvM7MJH8iuZEO+pq2FTPHB1q2v4Bv22JY2rYe2/N2I4GMDIOz9sAreKAHSQWo7BX46AUhHqH6yNpLsLXGqq6xT6+/hJ5saUdjtd+zdYS5jsob2eHbwxoKBpsh9S7hwilyBPQ/2MpyYRh23RNu3km3fAKuN3lkbLL6SU+oa2OntfcdMC91p5GL6iYCABAteGKocz+4AxUfCdipPID/A55Q4J8YaN9xWQTHJhQ/mDuXBPZUJD4KwgDyIXBfRAmarWsVO//XzdrzQf/t4eVhkaOYUtRuWC+hFbXBI0tVII13myG1ZqvDD/ApLgQ7/Gx+3xy2ybG3aRJSzzX7C1qrNldarXXSYG6+29R+LOJUGmMj/36NhR1cryWUPxQuPr4//qRMtBOFPCxI2LlDlvXl69ZPbVr67or8iZBJyv9Y53l5rNZ1Vw7DPNwQI+PopP7GPDYjH7gfqtpUVQ6+lbaRX4pmkGwl3CfZvb0e1r71gGaCMwgaNu1LC1jVSZoZyb86zQ== bts@g.rainwreck.com
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC5zY/ri5Fiyp4qArfZnBfCegU62QhNb6hUR+jtv7oRKZs7fC79BtUMqN/7NFkvDUmN5mM3sj8dVxAgCg+IabRb460yuklDTII8ojgSIpYCjoLNcOteWT9sclm1HjuH07YOAnZE/aXv0/rzhoQEKDw/9dWXFwJKaal2xw6jMQlyqO1wj21c45YnW83DrpjxUSRDo0T53NVlpLK77xar/guEopk4Q29Cr7A1pSEtHSFbSjqxTkpEBn8jyRHvH9F+S8qMyj0LoyRanAjvsny1snjuJXArDkLAAgGMWav5v8OMMrtTvSgf/2B/D74TeQiLiG1q/cN6FX+lSlOhmbvgT50MCOunuJqVeS9OvQgxw+R7OJcHVtH30wlZiQ/Zu7w4wN9ZSDYApqbtSgsqfUkbh5v3fgdWccsP/mKAYO6/NzII5pP+Xgosmi+ebZR3NutuX7nvclPDaDSHdO6ERYcRHEwxG+DinumssnirwdrNtbTOErEHrqKebf3ehBdcN2LIoyK34p8F4VaBOwE1OxdeEP012//bG4hULpFGryVfDYyItzdXksBgp3ujPjt5lqhvC9mm5UsPlT0792xUycgz8xWPxburJ1svlYoHnUENEApvmXGwiSFtedr3wdk3/Jg2C0LDMGZmIUzd8SEX9vf/+qcw6kMWYxatGbSi920uEO+9ZQ== root@dawid
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCRW5+ErOj0miGagL44vvhdYhYZVVNn7I3r58a67fE2X/R73b5ibPY9ngYZpG37ObzuGDT7Ld3Zx8H8LWpKsWyOGpAhilqM0wiQ4PXiFnZShHhRIZwam7j+9h8NBySbJHsFPBoNDqcmKXu2JCk1sD351N5J/xsVJL5qlpjnfNlcitf1yi6nf95bMiiFcVRF7cWeXqxhFO1Jl4RkHSlsljaDFg/dOlor5cNrv/cMcZ5IKJSAj58lRWHF2Bw0ip/75/1YgdzLxcYrLIeZwDKrg0U+9Mk4oBMCvQ9XUonpEGDWKz+2NyDuGa3nRcuYyv4PnKAlMdsreoGU8b9U9kvLKa3DreI4JdhcoEt5sEpY0wwblVfefRRQbebHE7JuQfFHHNLBLqGi08AwV+/8JwwvIrvoPoHfqnarocxqWSnHbaPr6CIeH764pWzZYvPSjSlf1eneVwCEmiH23zgiifL5pLzrZ56f4u+i9oQw4tSKnvpkOf+fGqnMAPdTGN0qFEOItXECXDCxB2z5mMmkL7rdVETUNpi40of1AABmLCeleeK5M6qht6tx6lTokD8Sgj3rMvRjG81XRJUP98CU2Ea8JJCXJLbXCBIb8AO/pYt4/3Xzw9kGeSKgYasj7PIUPuIIZvhFHM9sKgEfjCO//7FMGswR4Y/U+OF4DqMHMLeMrg85Pw== root@workhorse
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDaJpWY+mWEaZ8VHcm7YWZ+HaIRKW1jOuWc0posfrSTfWaewzmXYWiOFl7axXncEvpqcgO0G7dv3XAgvzaLj3t7TWPv+6sXcZi1VbPTC9R49k/iWm6F1iYVHxEkd4CIFQIpR//O1HZqTOrTLTSV7KuzRvJL74l6Egq8mfCw0LiKhXGLEONMOsjiQqeyivXTqb2CS7SnO/Ep40oUuS5KFbRAu+KIEhs0koSwgXxtT9ro+7BXT9sjC2nYFwEKtvFlMFEOIsBhFTk1zWpQjk79lngO+bNlpmBIuAcGhWr5Eju9nYqUaaf+QuK7oPUI+UPLK3biolg30cfk3U9N/IEUqHjZXHm2QKp3/jof1paa2Xs9twK/YetMpwvS0yshSDVIqMrVckx2foZn9hbfn06hcr6/JuxmV6ZG3Loci1H0CrXhT5T69IK2UDTYdIVqrVcVXOH9SpYZz2WRsJLavkrAfarSLFZsOoYsvYYPkKmN7YnKQFJSgPBzntaUmYpKRe2jXkwGDZBMCtQYOsmVHTwaI3nDAde7n6cad/DqTJO22XKV3EOsfbWFQ57GSX8evhR9N7nGYMs0JZ8dhNYa0rypV4+Us9Krlyi5tTjx9P56UGX5B4cfvkJfMPnojxbSEpxXR4OLjIQwy2WYfj5tzLhqXzD/1MktvRgEkjS1QmGN22k5Iw== bts@dawid
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDaXAvmExdcog1ZnNBgjR6Zd8G/VJamG2S5BU5lhpmk+iu7hRs29tPi1j1vjy1Sky5aDbh1AXM0W1ClvkNfx0QiJzlJWyDzd6bEh985tI3O1++uYiPJa8P9Iz+EMQuaXhfLgAMIZNZUWIRpctHqL2M+LPlgh/+sj5i+N0oELmIoSBVLY1XyO6Iid4J+aKBCht4xmtr/iGhyGb09xBvpvbVs96Fe4v+Yo1U/Wjbbj88Mb2qZ+00J0tANUHqiDwBTt6vBq3gQLjvZTEezd+VWj23nAr/9Z7ta3Vw5B1y+Q4XOJgPsYl59kaeHuestvuH2jSfgJ5DfhcrjaWvM8oFpi27HN1A020WKlt94wDH/F6qucnGGj2w8KN8Y7WKmhZ23tlelzhl38rMaJOQ8d92Pg+vQOQpBf1dkWyZ1K3bTTZ41tahIGvwGJ3qtez20FW31emWLo5dTBQXdn+FTvesUpbUyq9rxBbDNcnCgOSj1yUPP2BCjBOc0fSaYikwpTSCy5o8XlWvVbpRnPAhqTSoL9LUIKUzX3QtCRM7Vws/XKxhIK+ZXKUn3HxihHdC5uKv+JVQEc5yUbPgyjdZFIwAXC76mpOjDZGZiZbSVYVVRD6M8bIqekb/uhVsH5DXtO+54k9yEUladHg9fXSYzwXz2ehAkSWJzMrwYgp8Q7swpasLaPQ== bts@phone
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEu4B0qHRZ8mm+1TisJ5WmVmniBHkKDOcHvXG2J8gmV1Qe0wtNC0epgM1ekAfMVqoirAc6KllJn76nT0KbzcoQMQOnCPCmqPMQFC4p0uY4pI2GR5WbujrZzSro0RUOjxskPQtPHsq8ppreIlUMRAZd7GDvR1Y7kIjnfEcf99Y+nc2LhcNN9xGn7aOt8sW5EcgAHsq4pvTAw7J7+FMNQN1HQbZoC1F1pY/I8OJd3HpnwSnNlkZG9WD+kc4RNPQk/5RO5HlNYFsUQoooRBGCde3oIhsJgl07f/JolE2wio+Obsx11FD48enOGlq162p3USQQwgTTQaG9kKg/yiiqlmvwuUHBcOJ/zXlPYF72DlMw1UNLxHXV27x0LRpl9KISq1d/lgdRD6612iuYvRaqvxQG3E9ctgylJWKfxxUev5pPiQW5k/Wu0FGFFo3wMUzIZwpLezBAIK2j49u3Jh7+LCcl6Id4rHbFWW9nh1f7GtdGmtuoadEdE4lo5QSXFX58jXuZET4u90fHCqRlxCbzQxLgoXclcAUPmjJJr/HlR9qpGyQt/yNQbya8wTcm6MSjQprY92YpW22MHHxYpBgyx/j1fqno7qDig4QriRfOSSEgDr7KgwAfmO/Kg4ChFVppwe88bbFdAFfiEHTLRZFRIm3Oe+VZBIeq62lkNKKloKSXzQ== bts@maqabi
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDM13PTELuHUE/0mpHPUKQ/vl1SawYdjFjzpMymZ5Z5c/z3+/lSisYFqRx88hzfpiGdJG8gn4z8XlbpFZJz+onH/794m115hPHisOEskgmc2nSXktPDWf92Yxcy9NxM3jE2k2aAhsyKJmJ4X0+g0JGebSSjmEpneMQrT+M68GYJ6Gduk6t9SrQr1xvgUOm6/Vv55yvffzbiYHopZNdnG3J1iP1TsT9teglNmUHarRIH7q3q5jN4NVPwCMGbXjAvO+Q82b6xSnW2J6Sn8n51k5mDvsqHWCgjpF1UO3XrFn6IBxB+MPsZF58QkRI6AkLZmkdqIEUD5tiEMTFEo+xaxDk8rN+IdV2M4obwpefXdN08jOYcNmGjit41e/nSxnYOmJK47IPXaFn/XFSph2w7dJg00YGVkdj2JqaeoAg0GJGnF1PD1LWdUuOXnU/5dbXrzwy0FfAJVjJecItACaYEcg9R98RMKvBW6VOvQldGZ6VxrrrlrNBoG9ZzRmtNYHXz7AhR9x4HNEhUBAnzyQq7yQJ/5fP5L15I1LP6xQYCLnQyWgGjkyLgpDN7YnfHN2AfE+DwzYB8NgkiQ2JAgTPsxj2e0p2jGrS8QeH2Mqc8pPQkx093m687/u1f23wjwNiwe73PAfUz3kFkTTj/SXYVCHc8cQobjVpxLTV+tXm2r7Ne1w== bts@workhorse
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDWLMELTFGG+2SyiyCvr6rtLoEqk2KvloHoR33/4u2KVWDV2D8JHY8FFldY40n/Ek7lhD97v4tdUJwc4t9orRHangU6HeAnkh8eiJ1o+gqNBPMTxWn859IAK2eHQ811gglbSn3YyyuJk3IR6i43ZI4zy7fg0XN8ByOwscHPRrWs3oa7CmjvLQWgl3yKn7ehIsnhZHTQxFOdaG1wTkAiWgWPn92E+npS0pHvg5/6NYs6yRdK8ohLuxuIyzmCTI0rL8KvawpAO0wM9RRkosMheFgwhFOd7j3wWFLxTUEFeOBV/Qv0+77BkH2WGO5jCru/LSBcln/KtTmDFFIIVMjkRyjx87CwqP/TqbVlHCa0ey2uIQhdMVo8dRLqMYVWbxSoSwGtqctRXPfAA6rg5mcxWvJyUV7G1WLnuix11k8ErHsKQmTzhBwE2P5OgIWcrEygptUNykuy5o/ZlD7Uw+EZPeoqZ8z4wE+ECGqGCcuicviXjy6OPLH/+nIBjoqZaEdiQHSz/778xU9C361CKdRXBWVUUgB0yqE+TQOARefsWVTrMXC0/GnSWYipNRKn1GXN1H7ttHCgsym4a7iOguuMfsYzJ7BY1897xylfHrxhgduX62c4S1QJBfvlfMbgCn82myum5ZrS2Vep0Kl5tizgCNl2mqODdtQPpP+PgmBGHf4/hQ== root@guru.square-r00t.net
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDz53DTICmBDfNUfhdnwQGUbFMGWhFBksAy1Vt6/2L7opdNqyxocIJT3qjlllpZA5Stb0frDnzNW3oe0yq6L9g4h7z4O8jaWgsqZeFzUqNJdsBJIpsmuZxA1PrWb5scxyhZz4JJpVoVDCU3bXesBPVA7OOeWL/pq43q55wwiVzV9A9JDI4wScwshyHrfwkaQJoLv9mRUuYfIghUbyi50B2cVAzna2TDjNFxk33V1PIFmWLoxlJHzrB36w9VoRL5geVeUmTvv+LOiKeOJ+LlWP+H6tu4hygdwpS+ktJ7I+RKOKD0KlqqQHeMGDIeXiXRFLoayp1jx4LnzEmaIKxPmwTdvytrNE9Ejr+SzCgNOaWZVA2CmYF/hvlrAsdZC3v8Gv6D18Au2gWIQUA1UAKe40xMtLNlOip9lE1x+Le4gkDTuGRr8pjv45ewzZnNoP6AymXToXlhvCSMDPMja/u/DEz0p7G28JnbLnGUZDX1xrrQLhZ8OtnwBZEoCeDxLsEmTWv/KVTrf/Sels2cCXT9n3xSSwNjTijeMuQ5afyQO2+XXEwxMbpQKAH/KoBt2Da1xRpq0CSsjYtCkddKdksipgwLVVXwFzib/IzxhNMdguMxLgz1bX1c9pzFJI6gA0CdwJrWqfq0SKzZZQJOBDrmhNJEUQcDT+QYBso+8CdcIZh5ew== root@g.rainwreck.com

View File

@ -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

View File

@ -0,0 +1,350 @@
# Commented lines are supported (via a preceding # only).
# Packages from the AUR can be specified.
# We need to install all X drivers.
abs
acpi
#acpidump
#afflib
aircrack-ng
apr
apr-util
arj
asciidoc
atop
autopsy
autossh
backuppc
## TODO: grab all the bacula packages in here
#bacula
beep
bin86
bind-tools
binutils
bluez-utils
## TODO: ugh. apacman has a new "regex mode"... that you can't disable. https://github.com/oshazard/apacman/issues/79
#bonnie++
boxbackup-client
boxbackup-server
bozocrack-git
bridge-utils
burp-backup-git
btrfs-progs
cabextract
cdrtools
cdw
cfv
chapcrack-git
chntpw
cifs-utils
ckermit
clamav
clonezilla
cmospwd
colordiff
cowpatty
cpio
cpuburn
cpupower
crackpkcs12
cryptcat
cryptsetup
csync2
customizepkg-scripting
dar
dcfldd
ddrescue
dd_rescue
dd_rhelp
debianutils
debootstrap
## giving a weird dependency issue
#dialog
diffutils
djohn
dmidecode
dnssec-anchors
dnstracer
## replaced by bind-tools, https://www.archlinux.org/packages/extra/x86_64/bind-tools/
#dnsutils
dos2unix
dropbear
dstat
dump
dumpet
duplicity
dvd+rw-tools
e2fsprogs
easy-rsa
ecryptfs-utils
ed
elfutils
#elilo-efi
elinks
etc-update
ethtool
exfat-utils
ext3grep
extundelete
f2fs-tools
fang
fbset
fcgi
fcgiwrap
fcrackzip
fdupes
file
findmyhash
findutils
firefox
flac
flashrom
foremost
fsarchiver
fuse
gd
git
gnu-efi-libs
gnu-netcat
gpart
gparted
gperftools
gpm
gptfdisk
gst-libav
gst-plugins-ugly
hashcat
hashdeep
haveged
hddtemp
hdparm
hexcurse
hexedit
hfsprogs
hfsutils
htop
httping
hwdetect
hwinfo
hydra
idnkit
ifenslave
iftop
inetutils
iotop
iozone
ipcalc
iperf
iperf3
ipsec-tools
iptraf-ng
ipython
irssi
iso-codes
isomaster
jasper
jfsutils
#john-mpi
john
keyutils
kismet-allplugins
lftp
links
## requires a /dev/input, which apparently isn't included in the chroots
#logkeys-git
lm_sensors
lrzsz
lshw
## giving intermittent errors when trying to fetch source
#lsiutil
lsof
lsscsi
## apacman currently doesn't like package groups, so...
#lxde
gpicview
lxappearance
lxappearance-obconf
lxde-common
lxde-icon-theme
lxdm
lxinput
lxlauncher
lxmusic
lxpanel
lxrandr
lxsession
lxtask
lxterminal
openbox
pcmanfm
# end lxde
lynx
#lzip
macchanger
## no longer maintained, upstream down
#magicrescue
mbr
mbuffer
mcelog
mdadm
mdcrack
## superseded by storcli
#megaraid-cli
memtester
mfoc
minicom
## mindi-busybox fails to build 09.23.2016
#mondo
mtd-utils
mtr
mtree-git
multipath-tools
myrescue
nbd
ncftp
ncompress
ncrack
net-snmp
netselect
nettle
networkmanager-pptp
nginx-mainline
ngrep
nmap
nmon
ntfs-3g
ntfsfixboot
## broken since they moved to github(?)
#nwipe
nwipe-git
obnam
open-iscsi
openipmi
ophcrack
os-prober
p7zip
pack
par2cmdline
partclone
partclone-utils
parted
partimage
pax-utils
pciutils
pcmciautils
pdfcrack
perf
php
php-fpm
php-gd
php-mcrypt
phrasendrescher
pigz
pkgfile
pkgtools
ppp
pptpclient
procinfo-ng
procps-ng
progsreiserfs
psmisc
pwgen
pixz
pyrit
python2-gnuplot
python2-pyx
rarcrack
rcracki_mt
rdiff-backup
read-edid
reaver-wps-fork-t6x-git
rename
rfkill
rp-pppoe
rpcbind
rpmextract
rp-pppoe
rsnapshot
rygel
safecopy
samba
scalpel-git
scapy
screen
scrounge-ntfs
scrub
scsiadd
sdparm
setserial
sg3_utils
sharutils
sipcalc
sipcrack
smartmontools
smbclient
s-nail
socat
## do people even USE tape backups anymore?
#star
storcli
strace
stress
sucrack
symlinks
sysstat
systemd-sysvcompat
tcpdump
tcpslice
tcptraceroute
testdisk
tftp-hpa
thin-provisioning-tools
thttpd
tmon
tmux
tre
tree
truecrack-git
truecrypt
tor
udftools
#udpcast
unace
unison
unrar
unshield
unzip
usb_modeswitch
usbip
usbutils
vim-a
vim-bufexplorer
vim-indent-object
vim-minibufexpl
vim-nerdtree
vim-syntastic
vim-workspace
vlc
vncrack
vnstat
vpnc
weplab
## currently depends on dialog, which is broke as shit
#whdd
whois
wifite-mod-pixiewps-git
wipe
wireshark-cli
wpscrack
wput
x11vnc
xfburn
xfsdump
xfsprogs
xmlto
xorg
xorg-drivers
xorg-xinit
xterm
zerofree
zip
zsh

View File

@ -0,0 +1,4 @@
# Commented lines are supported (via a preceding # only).
# Packages from the AUR can be specified.
# We need to install all X drivers.
mtree-git

View File

@ -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

View File

@ -0,0 +1,2 @@
#!/bin/bash
# Put any arch-specific tasks here. They will be run after /root/pre-build.sh.

View File

@ -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 %}



View File

@ -0,0 +1 @@
{{ bdisk['uxname']|lower }}.loc.lan

View File

@ -0,0 +1,12 @@
export DISTNAME='{{ bdisk['name']|upper }}'
export UXNAME='{{ bdisk['name']|lower }}'
export PNAME='{{ bdisk['name'] }}'
export DISTPUB='{{ bdisk['dev'] }}'
export DISTDESC='{{ bdisk['desc'] }}'
export REGUSR='{{ user['username']|lower }}'
export REGUSR_GRPS='{{ user['groups'] }}'
export USERCOMMENT='{{ user['name'] }}'
export REGUSR_PASS='{{ user['password'] }}'
export ROOT_PASS='{{ bdisk['root_password'] }}'
export SIGKEY='{{ mygpgkey }}'

View File

@ -1,64 +0,0 @@
#
# /etc/bash.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

PS1='[\u@\h \W]\$ '
PS2='> '
PS3='> '
PS4='+ '

case ${TERM} in
xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'

;;
screen)
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
;;
esac

[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion

alias vi='/usr/bin/vim'
export EDITOR="vim"

if [ -f ~/.bashrc ];
then
source ~/.bashrc
fi
if [ -d ~/bin ];
then
export PATH="$PATH:~/bin"
fi

alias grep='grep --color'
alias egrep='egrep --color'

alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '

export HISTTIMEFORMAT="%F %T "
export PATH="${PATH}:/sbin:/bin:/usr/sbin"

DEFROUTEIF=$(ip route show | egrep '^default' | awk '{print $5}')

echo
echo "==================================="
date
if [ -n "${DEFROUTEIF}" ];
then
IPADDR=$(ip a s dev ${DEFROUTEIF} | egrep '^[[:space:]]*inet\ ' | awk '{print $2}' | cut -f1 -d"/")
HWADDR=$(ip l show dev ${DEFROUTEIF} | egrep '^[[:space:]]*link' | awk '{print $2}')
echo
echo -n "${DEFROUTEIF} (${HWADDR}) is: ${IPADDR}"
fi
echo
echo -n "tun0 is: "
ifconfig tun0 | grep inet | grep -v "inet6" | awk '{print $2}'
echo
echo "http://bdisk.square-r00t.net/"
echo "==================================="
echo

View File

@ -1,62 +0,0 @@
[base]
## uncomment and set autologin username to enable autologin
#autologin=bdisk

## uncomment and set timeout to enable timeout autologin,
## the value should >=5
# timeout=10

## default session or desktop used when no systemwide config
# session=/usr/bin/startlxde

## uncomment and set to set numlock on your keyboard
# numlock=0

## set this if you don't want to put xauth file at ~/.Xauthority
# xauth_path=/tmp

# not ask password for users who have empty password
# skip_password=1

## greeter used to welcome the user
greeter=/usr/lib/lxdm/lxdm-greeter-gtk

[server]
## arg used to start xserver, not fully function
arg=/usr/bin/X -background vt1
# uncomment this if you really want xserver listen to tcp
# tcp_listen=1
# uncoment this if you want reset the xserver after logou
# reset=1

[display]
## gtk theme used by greeter
gtk_theme=Clearlooks

## background of the greeter
# bg=/usr/share/backgrounds/default.png

## if show bottom pane
bottom_pane=1

## if show language select control
lang=1

## if show keyboard layout select control
keyboard=0

## the theme of greeter
theme=Industrial

[input]

[userlist]
## if disable the user list control at greeter
disable=0

## whitelist user
white=

## blacklist user
black=

View File

@ -1 +0,0 @@
/usr/lib/systemd/system/NetworkManager.service

View File

@ -1 +0,0 @@
/usr/lib/systemd/system/NetworkManager-dispatcher.service

View File

@ -1,5 +0,0 @@
#[Service]
##Type=simple
#Type=idle
#ExecStart=
#ExecStart=-/usr/bin/agetty --autologin bdisk --noclear %I 38400 linux

View File

@ -1 +0,0 @@
/usr/lib/systemd/system/NetworkManager.service

View File

@ -1 +0,0 @@
/usr/lib/systemd/system/openvpn-client@.service

View File

@ -1 +0,0 @@
/usr/lib/systemd/system/sshd.service

View File

@ -1,22 +0,0 @@
" All system-wide defaults are set in $VIMRUNTIME/archlinux.vim (usually just
" /usr/share/vim/vimfiles/archlinux.vim) and sourced by the call to :runtime
" you can find below. If you wish to change any of those settings, you should
" do it in this file (/etc/vimrc), since archlinux.vim will be overwritten
" everytime an upgrade of the vim packages is performed. It is recommended to
" make changes after sourcing archlinux.vim since it alters the value of the
" 'compatible' option.

" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages.
runtime! archlinux.vim

" If you prefer the old-style vim functionalty, add 'runtime! vimrc_example.vim'
" Or better yet, read /usr/share/vim/vim74/vimrc_example.vim or the vim manual
" and configure vim to your own liking!

set number
syntax on
set paste
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif