yay! SSL gen works.

This commit is contained in:
brent s. 2016-12-06 17:51:36 -05:00
parent 21fe72818c
commit c0048b1003
5 changed files with 261 additions and 189 deletions

View File

@ -13,87 +13,182 @@ def verifyCert(cert, key, CA = None):
try:
chk.check_privatekey()
except OpenSSL.SSL.Error:
exit(("{0}: Key does not match certificate!".format(datetime.datetime.now())))
return(False)
exit(("{0}: {1} does not match {2}!".format(datetime.datetime.now(), key, cert)))
else:
print("{0}: Key verified against certificate successfully.".format(datetime.datetime.now()))
print("{0}: {1} verified against {2} successfully.".format(datetime.datetime.now(), key, cert))
return(True)
# This is disabled because there doesn't seem to currently be any way
# to actually verify certificates against a given CA.
#if CA:
# try:
# magic stuff here

def sslCAKey():
key = OpenSSL.crypto.PKey()
print("{0}: Generating SSL CA key...".format(datetime.datetime.now()))
key.generate_key(OpenSSL.crypto.TYPE_RSA, 4096)
#print OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, key)
def sslCAKey(conf):
# TODO: use path from conf, even if it doesn't exist?
# if it does, read it into a pkey object
keyfile = conf['ipxe']['ssl_cakey']
if os.path.isfile(keyfile):
try:
key = OpenSSL.crypto.load_privatekey(
OpenSSL.crypto.FILETYPE_PEM,
open(keyfile).read())
except:
exit('{0}: ERROR: It seems that {1} is not a proper PEM-encoded SSL key.'.format(
datetime.datetime.now(),
keyfile))
else:
key = OpenSSL.crypto.PKey()
print("{0}: Generating SSL CA key...".format(datetime.datetime.now()))
key.generate_key(OpenSSL.crypto.TYPE_RSA, 4096)
with open(keyfile, 'wb') as f:
f.write(OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, key))
return(key)

def sslCA(conf, key = None):
# NOTE: 'key' is a pkey OBJECT, not a file.
keyfile = conf['ipxe']['ssl_cakey']
crtfile = conf['ipxe']['ssl_ca']
if not key:
if os.path.isfile(keyfile):
try:
key = OpenSSL.crypto.load_privatekey(
OpenSSL.crypto.FILETYPE_PEM,
open(keyfile).read())
except:
exit('{0}: ERROR: It seems that {1} is not a proper PEM-encoded SSL key.'.format(
datetime.datetime.now(),
keyfile))
else:
exit('{0}: ERROR: We need a key to generate a CA certificate!'.format(
datetime.datetime.now()))
if os.path.isfile(crtfile):
try:
key = conf['ipxe']['ssl_cakey']
ca = OpenSSL.crypto.load_certificate(
OpenSSL.crypto.FILETYPE_PEM,
open(crtfile).read())
except:
exit("{0}: Cannot find a valid CA Key to use.".format(datetime.datetime.now()))
domain = (re.sub('^(https?|ftp)://([a-z0-9.-]+)/?.*$', '\g<2>',
conf['ipxe']['uri'],
flags=re.IGNORECASE)).lower()
# http://www.pyopenssl.org/en/stable/api/crypto.html#pkey-objects
# http://docs.ganeti.org/ganeti/2.14/html/design-x509-ca.html
ca = OpenSSL.crypto.X509()
ca.set_version(3)
ca.set_serial_number(1)
ca.get_subject().CN = domain
ca.gmtime_adj_notBefore(0)
# valid for ROUGHLY 10 years. years(ish) * days * hours * mins * secs.
# the paramater is in seconds, which is why we need to multiply them all together.
ca.gmtime_adj_notAfter(10 * 365 * 24 * 60 * 60)
ca.set_issuer(ca.get_subject())
ca.set_pubkey(key)
ca.add_extensions([
OpenSSL.crypto.X509Extension("basicConstraints",
True,
"CA:TRUE, pathlen:0"),
OpenSSL.crypto.X509Extension("keyUsage",
True,
"keyCertSign, cRLSign"),
OpenSSL.crypto.X509Extension("subjectKeyIdentifier",
False,
"hash",
subject = ca),])
ca.sign(key, "sha512")
#print OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, ca)
exit('{0}: ERROR: It seems that {1} is not a proper PEM-encoded SSL certificate.'.format(
datetime.datetime.now(),
crtfile))
else:
domain = (re.sub('^(https?|ftp)://([a-z0-9.-]+)/?.*$', '\g<2>',
conf['ipxe']['uri'],
flags=re.IGNORECASE)).lower()
# http://www.pyopenssl.org/en/stable/api/crypto.html#pkey-objects
# http://docs.ganeti.org/ganeti/2.14/html/design-x509-ca.html
ca = OpenSSL.crypto.X509()
ca.set_version(3)
ca.set_serial_number(1)
#ca.get_subject().CN = domain
ca.get_subject().CN = '{0} CA'.format(conf['bdisk']['name'])
ca.gmtime_adj_notBefore(0)
# valid for ROUGHLY 10 years. years(ish) * days * hours * mins * secs.
# the paramater is in seconds, which is why we need to multiply them all together.
ca.gmtime_adj_notAfter(10 * 365 * 24 * 60 * 60)
ca.set_issuer(ca.get_subject())
ca.set_pubkey(key)
ca.add_extensions([
OpenSSL.crypto.X509Extension(b"basicConstraints",
True,
b"CA:TRUE, pathlen:0"),
OpenSSL.crypto.X509Extension(b"keyUsage",
True,
b"keyCertSign, cRLSign"),
OpenSSL.crypto.X509Extension(b"subjectKeyIdentifier",
False,
b"hash",
subject = ca),])
ca.sign(key, "sha512")
with open(crtfile, 'wb') as f:
f.write(OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, ca))
return(ca)

def sslCKey():
key = OpenSSL.crypto.PKey()
print("{0}: Generating SSL Client key...".format(datetime.datetime.now()))
key.generate_key(OpenSSL.crypto.TYPE_RSA, 4096)
#print OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, key)
def sslCKey(conf):
keyfile = conf['ipxe']['ssl_key']
if os.path.isfile(keyfile):
try:
key = OpenSSL.crypto.load_privatekey(
OpenSSL.crypto.FILETYPE_PEM,
open(keyfile).read())
except:
exit('{0}: ERROR: It seems that {1} is not a proper PEM-encoded SSL key.'.format(
datetime.datetime.now(),
keyfile))
else:
key = OpenSSL.crypto.PKey()
print("{0}: Generating SSL Client key...".format(datetime.datetime.now()))
key.generate_key(OpenSSL.crypto.TYPE_RSA, 4096)
with open(keyfile, 'wb') as f:
f.write(OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, key))
return(key)

def sslCSR(conf, key):
def sslCSR(conf, key = None):
# NOTE: 'key' is a pkey OBJECT, not a file.
keyfile = conf['ipxe']['ssl_key']
crtfile = conf['ipxe']['ssl_crt']
if not key:
if os.path.isfile(keyfile):
try:
key = OpenSSL.crypto.load_privatekey(
OpenSSL.crypto.FILETYPE_PEM,
open(keyfile).read())
except:
exit('{0}: ERROR: It seems that {1} is not a proper PEM-encoded SSL key.'.format(
datetime.datetime.now(),
keyfile))
else:
exit('{0}: ERROR: We need a key to generate a CSR!'.format(
datetime.datetime.now()))
domain = (re.sub('^(https?|ftp)://([a-z0-9.-]+)/?.*$', '\g<2>',
conf['ipxe']['uri'],
flags=re.IGNORECASE)).lower()
conf['ipxe']['uri'],
flags=re.IGNORECASE)).lower()
csr = OpenSSL.crypto.X509Req()
csr.get_subject().CN = domain
#req.get_subject().countryName = 'xxx'
#req.get_subject().stateOrProvinceName = 'xxx'
#req.get_subject().localityName = 'xxx'
#req.get_subject().organizationName = 'xxx'
#req.get_subject().organizationalUnitName = 'xxx'
csr.set_pubkey(key)
csr.sign(key, "sha512")
#print OpenSSL.crypto.dump_certificate_request(OpenSSL.crypto.FILETYPE_PEM, req)
with open('/tmp/main.csr', 'wb') as f:
f.write(OpenSSL.crypto.dump_certificate_request(OpenSSL.crypto.FILETYPE_PEM, csr))
return(csr)

def sslSign(ca, key, csr):
ca_cert = OpenSSL.crypto.load_certificate(ca)
ca_key = OpenSSL.crypto.load_privatekey(key)
req = OpenSSL.crypto.load_certificate_request(csr)
def sslSign(conf, ca, key, csr):
#ca_cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, ca)
#ca_key = OpenSSL.crypto.load_privatekey(key)
#req = OpenSSL.crypto.load_certificate_request(csr)
csr = OpenSSL.crypto.load_certificate_request(OpenSSL.crypto.FILETYPE_PEM,
open("/tmp/main.csr").read())
cert = OpenSSL.crypto.X509()
cert.set_subject(req.get_subject())
cert.set_subject(csr.get_subject())
cert.set_serial_number(1)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(24 * 60 * 60)
cert.set_issuer(ca_cert.get_subject())
cert.set_pubkey(req.get_pubkey())
cert.sign(ca_key, "sha512")
#print OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
cert.set_issuer(ca.get_subject())
cert.set_pubkey(csr.get_pubkey())
#cert.set_pubkey(ca.get_pubkey())
cert.sign(key, "sha512")
with open(conf['ipxe']['ssl_crt'], 'wb') as f:
f.write(OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert))
return(cert)

def sslPKI(conf):
# run checks for everything, gen what's missing
certfile = conf['ipxe']['ssl_crt']
key = sslCAKey(conf)
ca = sslCA(conf, key = key)
ckey = sslCKey(conf)
if os.path.isfile(certfile):
cert = OpenSSL.crypto.load_certificate(
OpenSSL.crypto.FILETYPE_PEM,
open(certfile).read())
if not verifyCert(cert, ckey):
csr = sslCSR(conf, ckey)
cert = sslSign(conf, ca, key, csr)
else:
csr = sslCSR(conf, ckey)
cert = sslSign(conf, ca, key, csr)
return(cert)

View File

@ -25,4 +25,6 @@ if __name__ == '__main__':
build.genUEFI(conf['build'], conf['bdisk'])
fulliso = build.genISO(conf)
build.displayStats(fulliso)
if conf['build']['ipxe']:
bSSL.sslPKI(conf)
print('{0}: Finish.'.format(datetime.datetime.now()))

View File

@ -30,9 +30,11 @@ def getConfig(conf_file='/etc/bdisk/build.ini'):
default_conf_paths = ['/etc/bdisk/build.ini',
'/usr/share/bdisk/build.ini',
'/usr/share/bdisk/extra/build.ini',
'/usr/share/docs/bdisk/build.ini',
'/usr/share/docs/bdisk/build.ini', # this is the preferred installation path for packagers
'/usr/local/share/docs/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']
# if we weren't given one/using the default...
if conf_file == '/etc/bdisk/build.ini':
if not os.path.isfile(conf_file):
@ -42,6 +44,7 @@ def getConfig(conf_file='/etc/bdisk/build.ini'):
break
else:
conf = conf_file
defconf = '{0}/../extra/dist.build.ini'.format(os.path.dirname(os.path.realpath(__file__)))
if not conf:
# okay, so let's check for distributed/"blank" ini's
# since we can't seem to find one.
@ -50,13 +53,15 @@ def getConfig(conf_file='/etc/bdisk/build.ini'):
if os.path.isfile(q):
conf = q
break
return(conf)
if os.path.isfile(default_conf_paths[4]):
defconf = default_conf_paths[4]
confs = [defconf, conf]
return(confs)

def parseConfig(conf):
def parseConfig(confs):
config = configparser.ConfigParser()
config._interpolation = configparser.ExtendedInterpolation()
config.read(conf)
bdisk_repo_dir = config['build']['basedir']
config.read(confs)
# a dict makes this so much easier.
config_dict = {s:dict(config.items(s)) for s in config.sections()}
# Convert the booleans to pythonic booleans in the dict...
@ -67,7 +72,7 @@ def parseConfig(conf):
if config_dict['bdisk']['ver'] == '':
repo = git.Repo(config_dict['build']['basedir'])
refs = repo.git.describe(repo.head.commit).split('-')
config_dict['bdisk']['ver'] = refs[0] + '-' + refs[2]
config_dict['bdisk']['ver'] = refs[0] + 'r' + refs[2]
for i in ('http', 'tftp', 'rsync', 'git'):
config_dict['sync'][i] = config['sync'].getboolean(i)
config_dict['ipxe']['iso'] = config['ipxe'].getboolean('iso')
@ -135,20 +140,4 @@ def parseConfig(conf):
for x in ('http', 'tftp'):
if config_dict['sync'][x]:
os.makedirs(config_dict[x]['path'], exist_ok = True)
# Hoo boy. Now we test paths for SSL in iPXE...
if config_dict['build']['ipxe']:
if config_dict['ipxe']['ssl_crt']:
for x in ('ssl_key', 'ssl_cakey'):
if config_dict['ipxe'][x]:
if not os.path.isfile(config_dict['ipxe'][x]):
exit(('{0}: ERROR: {1} is not an existing file. Check your' +
'configuration.').format(
datetime.datetime.now(),
config_dict['ipxe'][x]))
if config_dict['ipxe']['ssl_ca']:
if not os.path.isfile(config_dict['ipxe']['ssl_ca']):
exit(('{0}: ERROR: {1} is not an existing file. Check your' +
'configuration.').format(
datetime.datetime.now(),
config_dict['ipxe']['ssl_ca']))
return(config, config_dict)

View File

@ -1,24 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>

<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
<office:meta><meta:creation-date>2016-12-01T11:27:37.665510821</meta:creation-date><dc:date>2016-12-04T05:22:38.498441678</dc:date><meta:editing-duration>PT12H18M12S</meta:editing-duration><meta:editing-cycles>33</meta:editing-cycles><meta:generator>LibreOffice/5.2.3.3$Linux_X86_64 LibreOffice_project/20m0$Build-3</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="5" meta:paragraph-count="49" meta:word-count="695" meta:character-count="4130" meta:non-whitespace-character-count="3475"/></office:meta>
<office:meta><meta:creation-date>2016-12-01T11:27:37.665510821</meta:creation-date><dc:date>2016-12-04T05:22:38.498441678</dc:date><meta:editing-duration>PT12H18M12S</meta:editing-duration><meta:editing-cycles>33</meta:editing-cycles><meta:generator>LibreOffice/5.2.3.3$Linux_X86_64 LibreOffice_project/20m0$Build-3</meta:generator><meta:document-statistic meta:character-count="4130" meta:image-count="0" meta:non-whitespace-character-count="3475" meta:object-count="0" meta:page-count="5" meta:paragraph-count="49" meta:table-count="0" meta:word-count="695"/></office:meta>
<office:settings>
<config:config-item-set config:name="ooo:view-settings">
<config:config-item config:name="ViewAreaTop" config:type="long">96203</config:config-item>
<config:config-item config:name="ViewAreaTop" config:type="long">93054</config:config-item>
<config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
<config:config-item config:name="ViewAreaWidth" config:type="long">40748</config:config-item>
<config:config-item config:name="ViewAreaHeight" config:type="long">20719</config:config-item>
<config:config-item config:name="ViewAreaHeight" config:type="long">21751</config:config-item>
<config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
<config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
<config:config-item-map-indexed config:name="Views">
<config:config-item-map-entry>
<config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
<config:config-item config:name="ViewLeft" config:type="long">14942</config:config-item>
<config:config-item config:name="ViewTop" config:type="long">106932</config:config-item>
<config:config-item config:name="ViewLeft" config:type="long">11578</config:config-item>
<config:config-item config:name="ViewTop" config:type="long">3494</config:config-item>
<config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
<config:config-item config:name="VisibleTop" config:type="long">96203</config:config-item>
<config:config-item config:name="VisibleTop" config:type="long">93054</config:config-item>
<config:config-item config:name="VisibleRight" config:type="long">40746</config:config-item>
<config:config-item config:name="VisibleBottom" config:type="long">116919</config:config-item>
<config:config-item config:name="VisibleBottom" config:type="long">114803</config:config-item>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
<config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
<config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
@ -69,7 +69,7 @@
<config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
<config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
<config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
<config:config-item config:name="Rsid" config:type="int">947814</config:config-item>
<config:config-item config:name="Rsid" config:type="int">1037822</config:config-item>
<config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrintEmptyPages" config:type="boolean">false</config:config-item>
<config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
@ -345,114 +345,96 @@
<style:style style:name="P10" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties officeooo:paragraph-rsid="0004d562"/>
</style:style>
<style:style style:name="P11" style:family="paragraph" style:parent-style-name="Title" style:master-page-name="">
<style:style style:name="P11" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties officeooo:paragraph-rsid="000d91dc"/>
</style:style>
<style:style style:name="P12" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties officeooo:rsid="000d91dc" officeooo:paragraph-rsid="000d91dc"/>
</style:style>
<style:style style:name="P13" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties officeooo:rsid="000e7666" officeooo:paragraph-rsid="000e7666"/>
</style:style>
<style:style style:name="P14" style:family="paragraph" style:parent-style-name="Title" style:master-page-name="">
<loext:graphic-properties draw:fill="none"/>
<style:paragraph-properties fo:margin-left="0in" fo:margin-right="0in" fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" loext:contextual-spacing="false" fo:text-align="center" style:justify-single-word="false" fo:text-indent="0in" style:auto-text-indent="false" style:page-number="auto" fo:background-color="transparent" fo:keep-with-next="always"/>
<style:text-properties officeooo:rsid="0000966e" officeooo:paragraph-rsid="0000966e"/>
</style:style>
<style:style style:name="P12" style:family="paragraph" style:parent-style-name="Subtitle">
<style:style style:name="P15" style:family="paragraph" style:parent-style-name="Subtitle">
<style:text-properties officeooo:rsid="000165f1" officeooo:paragraph-rsid="000165f1"/>
</style:style>
<style:style style:name="P13" style:family="paragraph" style:parent-style-name="Standard">
<style:style style:name="P16" style:family="paragraph" style:parent-style-name="Standard">
<style:text-properties officeooo:rsid="0000966e" officeooo:paragraph-rsid="0000966e"/>
</style:style>
<style:style style:name="P14" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="">
<style:style style:name="P17" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="">
<style:paragraph-properties style:page-number="auto"/>
<style:text-properties officeooo:rsid="0000966e" officeooo:paragraph-rsid="0000966e"/>
</style:style>
<style:style style:name="P15" style:family="paragraph" style:parent-style-name="Contents_20_Heading">
<style:style style:name="P18" style:family="paragraph" style:parent-style-name="Contents_20_Heading">
<style:paragraph-properties fo:break-before="page"/>
</style:style>
<style:style style:name="P16" style:family="paragraph" style:parent-style-name="Heading_20_1">
<style:style style:name="P19" style:family="paragraph" style:parent-style-name="Heading_20_1">
<style:paragraph-properties fo:break-before="page"/>
<style:text-properties officeooo:rsid="0002592b" officeooo:paragraph-rsid="0002592b"/>
</style:style>
<style:style style:name="P17" style:family="paragraph" style:parent-style-name="Heading_20_2">
<style:style style:name="P20" style:family="paragraph" style:parent-style-name="Heading_20_2">
<style:text-properties officeooo:rsid="0002592b" officeooo:paragraph-rsid="0002592b"/>
</style:style>
<style:style style:name="P18" style:family="paragraph" style:parent-style-name="Heading_20_2">
<style:style style:name="P21" style:family="paragraph" style:parent-style-name="Heading_20_2">
<style:text-properties officeooo:paragraph-rsid="0002592b"/>
</style:style>
<style:style style:name="P19" style:family="paragraph" style:parent-style-name="Contents_20_1">
<style:style style:name="P22" style:family="paragraph" style:parent-style-name="Contents_20_1">
<style:paragraph-properties>
<style:tab-stops>
<style:tab-stop style:position="6.9252in" style:type="right" style:leader-style="dotted" style:leader-text="."/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="P20" style:family="paragraph" style:parent-style-name="Heading_20_3">
<style:style style:name="P23" style:family="paragraph" style:parent-style-name="Heading_20_3">
<style:text-properties officeooo:rsid="0004d562" officeooo:paragraph-rsid="0004d562"/>
</style:style>
<style:style style:name="P21" style:family="paragraph" style:parent-style-name="Contents_20_2">
<style:style style:name="P24" style:family="paragraph" style:parent-style-name="Contents_20_2">
<style:paragraph-properties>
<style:tab-stops>
<style:tab-stop style:position="6.7283in" style:type="right" style:leader-style="dotted" style:leader-text="."/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="P22" style:family="paragraph" style:parent-style-name="Contents_20_3">
<style:style style:name="P25" style:family="paragraph" style:parent-style-name="Contents_20_3">
<style:paragraph-properties>
<style:tab-stops>
<style:tab-stop style:position="6.5319in" style:type="right" style:leader-style="dotted" style:leader-text="."/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="P23" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="First_20_Page">
<style:style style:name="P26" style:family="paragraph" style:parent-style-name="Footnote">
<style:text-properties fo:font-weight="bold" officeooo:rsid="00087adf" officeooo:paragraph-rsid="00087adf" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="P27" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="First_20_Page">
<style:paragraph-properties style:page-number="auto"/>
<style:text-properties officeooo:rsid="0000966e" officeooo:paragraph-rsid="0000966e"/>
</style:style>
<style:style style:name="P24" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:text-properties officeooo:rsid="0002592b" officeooo:paragraph-rsid="0002592b"/>
</style:style>
<style:style style:name="P25" style:family="paragraph" style:parent-style-name="Text_20_body">
<style:style style:name="P28" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L1">
<style:text-properties officeooo:paragraph-rsid="000d91dc"/>
</style:style>
<style:style style:name="P26" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L1">
<style:text-properties officeooo:paragraph-rsid="000d91dc"/>
</style:style>
<style:style style:name="P27" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L1">
<style:style style:name="P29" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L1">
<style:text-properties officeooo:rsid="000d91dc" officeooo:paragraph-rsid="000d91dc"/>
</style:style>
<style:style style:name="P28" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L1">
<style:style style:name="P30" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L1">
<style:text-properties officeooo:rsid="000e7666" officeooo:paragraph-rsid="000e7666"/>
</style:style>
<style:style style:name="P29" style:family="paragraph" style:parent-style-name="Heading_20_2">
<style:style style:name="P31" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L1">
<style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:rsid="000e7666" officeooo:paragraph-rsid="000e7666" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="P32" style:family="paragraph" style:parent-style-name="Heading_20_2">
<style:text-properties officeooo:rsid="0002592b" officeooo:paragraph-rsid="0002592b"/>
</style:style>
<style:style style:name="P30" style:family="paragraph" style:parent-style-name="Contents_20_Heading">
<style:paragraph-properties fo:break-before="page"/>
</style:style>
<style:style style:name="P31" style:family="paragraph" style:parent-style-name="Heading_20_1">
<style:style style:name="P33" style:family="paragraph" style:parent-style-name="Heading_20_1">
<style:paragraph-properties fo:break-before="page"/>
<style:text-properties officeooo:rsid="0002592b" officeooo:paragraph-rsid="0002592b"/>
</style:style>
<style:style style:name="P32" style:family="paragraph" style:parent-style-name="Contents_20_1">
<style:paragraph-properties>
<style:tab-stops>
<style:tab-stop style:position="6.9252in" style:type="right" style:leader-style="dotted" style:leader-text="."/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="P33" style:family="paragraph" style:parent-style-name="Heading_20_3">
<style:style style:name="P34" style:family="paragraph" style:parent-style-name="Heading_20_3">
<style:text-properties officeooo:rsid="0004d562" officeooo:paragraph-rsid="0004d562"/>
</style:style>
<style:style style:name="P34" style:family="paragraph" style:parent-style-name="Contents_20_3">
<style:paragraph-properties>
<style:tab-stops>
<style:tab-stop style:position="6.5319in" style:type="right" style:leader-style="dotted" style:leader-text="."/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="P35" style:family="paragraph" style:parent-style-name="Contents_20_2">
<style:paragraph-properties>
<style:tab-stops>
<style:tab-stop style:position="6.7283in" style:type="right" style:leader-style="dotted" style:leader-text="."/>
</style:tab-stops>
</style:paragraph-properties>
</style:style>
<style:style style:name="P36" style:family="paragraph" style:parent-style-name="Footnote">
<style:text-properties fo:font-weight="bold" officeooo:rsid="00087adf" officeooo:paragraph-rsid="00087adf" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="T1" style:family="text">
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
@ -668,13 +650,13 @@
<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
</text:sequence-decls><draw:frame draw:style-name="fr1" draw:name="Frame1" text:anchor-type="page" text:anchor-page-number="1" svg:x="1in" svg:width="6.4374in" draw:z-index="0">
<draw:text-box fo:min-height="0.2in">
<text:p text:style-name="P11">BDISK</text:p>
<text:p text:style-name="P12">Manual v1.0</text:p>
<text:p text:style-name="P14">BDISK</text:p>
<text:p text:style-name="P15">Manual v1.0</text:p>
<text:p text:style-name="P5">Brent Saner</text:p>
<text:p text:style-name="P5"><text:a xlink:type="simple" xlink:href="mailto:bts@square-r00t.net?subject=BDisk%20Manual" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">bts@square-r00t.net</text:a></text:p>
</draw:text-box>
</draw:frame>
<text:p text:style-name="P23"/>
<text:p text:style-name="P27"/>
<text:table-of-content text:style-name="Sect1" text:protected="true" text:name="Table of Contents1">
<text:table-of-content-source text:outline-level="10">
<text:index-title-template text:style-name="Contents_20_Heading">Table of Contents</text:index-title-template>
@ -761,87 +743,87 @@
</text:table-of-content-source>
<text:index-body>
<text:index-title text:style-name="Sect1" text:name="Table of Contents1_Head">
<text:p text:style-name="P15">Table of Contents</text:p>
<text:p text:style-name="P18">Table of Contents</text:p>
</text:index-title>
<text:p text:style-name="P32"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc237_1260022884">Chapter I: Introduction<text:tab/>3</text:a></text:p>
<text:p text:style-name="P35"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc254_1260022884" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link"><text:s/>Section I.1: What is BDisk?<text:tab/>3</text:a></text:p>
<text:p text:style-name="P35"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc379_1260022884" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link"><text:s/>Section I.2: Who wrote it?<text:tab/>3</text:a></text:p>
<text:p text:style-name="P35"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc256_1260022884" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link"><text:s/>Section I.3: What is this document?<text:tab/>3</text:a></text:p>
<text:p text:style-name="P34"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc173_449581326" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">I.3.i: Conventions used in this document<text:tab/>3</text:a></text:p>
<text:p text:style-name="P35"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc258_1260022884" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link"><text:s/>Section I.4: Further information/resources<text:tab/>3</text:a></text:p>
<text:p text:style-name="P34"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc220_1657685180" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">I.4.i: For Users<text:tab/>3</text:a></text:p>
<text:p text:style-name="P34"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc175_449581326" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">I.4.ii: For Developers<text:tab/>4</text:a></text:p>
<text:p text:style-name="P32"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc232_667539389">Chapter II: Getting Started<text:tab/>4</text:a></text:p>
<text:p text:style-name="P22"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc237_1260022884" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">Chapter I: Introduction<text:tab/>3</text:a></text:p>
<text:p text:style-name="P24"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc254_1260022884" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link"><text:s/>Section I.1: What is BDisk?<text:tab/>3</text:a></text:p>
<text:p text:style-name="P24"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc379_1260022884" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link"><text:s/>Section I.2: Who wrote it?<text:tab/>3</text:a></text:p>
<text:p text:style-name="P24"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc256_1260022884" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link"><text:s/>Section I.3: What is this document?<text:tab/>3</text:a></text:p>
<text:p text:style-name="P25"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc173_449581326" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">I.3.i: Conventions used in this document<text:tab/>3</text:a></text:p>
<text:p text:style-name="P24"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc258_1260022884" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link"><text:s/>Section I.4: Further information/resources<text:tab/>3</text:a></text:p>
<text:p text:style-name="P25"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc220_1657685180" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">I.4.i: For Users<text:tab/>3</text:a></text:p>
<text:p text:style-name="P25"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc175_449581326" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">I.4.ii: For Developers<text:tab/>4</text:a></text:p>
<text:p text:style-name="P22"><text:a xlink:type="simple" xlink:href="#__RefHeading___Toc232_667539389" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">Chapter II: Getting Started<text:tab/>4</text:a></text:p>
</text:index-body>
</text:table-of-content>
<text:p text:style-name="P13"/>
<text:h text:style-name="P16" text:outline-level="1"><text:bookmark-start text:name="__RefHeading___Toc237_1260022884"/>Introduction<text:bookmark-end text:name="__RefHeading___Toc237_1260022884"/></text:h>
<text:h text:style-name="P17" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc254_1260022884"/>What is BDisk?<text:bookmark-end text:name="__RefHeading___Toc254_1260022884"/></text:h>
<text:p text:style-name="P16"/>
<text:h text:style-name="P19" text:outline-level="1"><text:bookmark-start text:name="__RefHeading___Toc237_1260022884"/>Introduction<text:bookmark-end text:name="__RefHeading___Toc237_1260022884"/></text:h>
<text:h text:style-name="P20" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc254_1260022884"/>What is BDisk?<text:bookmark-end text:name="__RefHeading___Toc254_1260022884"/></text:h>
<text:p text:style-name="P6"><text:tab/>BDisk refers to both a live distribution I use in my own uses (for rescue situations, recovery, etc.) but foremost and most importantly, it refers to the tool I use for <text:span text:style-name="T1">building</text:span><text:span text:style-name="T3"> that distribution. This is what this project and documentation refer to when the word “BDisk” is used.</text:span></text:p>
<text:p text:style-name="First_20_line_20_indent"><text:tab/>BDisk is <text:a xlink:type="simple" xlink:href="https://www.gnu.org/licenses/gpl-3.0.en.html" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">GPLv3</text:a>-licensed. This means that you can use it for business reasons, personal reasons, modify it, etc. There are a few restrictions I retain, however, on this (dont worry; theyre all in line with the GPLv3). You can find the full license in <text:span text:style-name="T1">docs/LICENSE</text:span>.</text:p>
<text:p text:style-name="P7"><text:span text:style-name="T18"><text:tab/></text:span><text:span text:style-name="T19">When I rewrote BDisk in Python 3.x (I should take the time to note that I am still quite new to python so expect there to be plenty of optimizations to be made and general WTF-ery from seasoned python developers), one of my main goals was to make it as easy to use as possible. This is surprisingly hard to do- its quite challenging to try to approach software youve written with the mindset of someone other than you. Please see </text:span><text:span text:style-name="T20">the</text:span><text:span text:style-name="T19"> </text:span><text:span text:style-name="T9"><text:bookmark-ref text:reference-format="text" text:ref-name="__RefHeading___Toc220_1657685180">For Users</text:bookmark-ref></text:span><text:span text:style-name="T19"> </text:span><text:span text:style-name="T20">section (</text:span><text:span text:style-name="T20"><text:bookmark-ref text:reference-format="chapter" text:ref-name="__RefHeading___Toc220_1657685180">I.4.i</text:bookmark-ref></text:span><text:span text:style-name="T20">).</text:span></text:p>
<text:h text:style-name="P17" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc379_1260022884"/>Who wrote it?<text:bookmark-end text:name="__RefHeading___Toc379_1260022884"/></text:h>
<text:h text:style-name="P20" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc379_1260022884"/>Who wrote it?<text:bookmark-end text:name="__RefHeading___Toc379_1260022884"/></text:h>
<text:p text:style-name="P6"><text:tab/>I (Brent Saner) am a GNU/Linux Systems/Network Administrator/Engineer- I wear a lot of hats. I have a lot of side projects to keep me busy when Im not working at <text:span text:style-name="T7">${dayjob}</text:span><text:span text:style-name="T17">, </text:span><text:span text:style-name="T18">mostly to assist in </text:span><text:span text:style-name="T8">other</text:span><text:span text:style-name="T18"> side projects and become more efficient and proficient </text:span><text:span text:style-name="T19">at those tasks. “</text:span><text:a xlink:type="simple" xlink:href="http://catb.org/jargon/html/Y/yak-shaving.html" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link"><text:span text:style-name="T19">Shaving the yak</text:span></text:a><text:span text:style-name="T19">,” indeed.</text:span></text:p>
<text:p text:style-name="P6"><text:span text:style-name="T19"><text:tab/></text:span><text:span text:style-name="T20">I did a lot of research into how low-level boot operations take place, both in BIOS and UEFI</text:span><text:span text:style-name="T20"><text:note text:id="ftn1" text:note-class="footnote"><text:note-citation>1</text:note-citation><text:note-body>
<text:p text:style-name="P36">Unified Extensible Firmware Interface<text:span text:style-name="T3">. UEFI </text:span><text:span text:style-name="T14">is not</text:span><text:span text:style-name="T24"> BIOS, and BIOS </text:span><text:span text:style-name="T14">is not</text:span><text:span text:style-name="T24"> UEFI.</text:span></text:p></text:note-body></text:note></text:span><text:span text:style-name="T20"> (and corresponding concepts such as Secureboot, etc.) which is no easy task to understand and very commonly misunderstood. (For instance, a common misconception is that UEFI necessarily implies Secureboot. This is quite far from the truth and UEFI by itself is quite a useful replacement for BIOS). Many of these misconceptions are simply due to lack of knowledge about the intricacies and complexities behind these technologies. Some of it is simply FUD</text:span><text:span text:style-name="T25"><text:note text:id="ftn0" text:note-class="footnote"><text:note-citation>2</text:note-citation><text:note-body>
<text:p text:style-name="P36">Fear, Uncertainty, Doubt<text:span text:style-name="T3">- propaganda, in other words.</text:span></text:p></text:note-body></text:note></text:span><text:span text:style-name="T25"> generated to prey on the fears of those who dont understand the underlying specifications or technology.</text:span></text:p>
<text:p text:style-name="P26">Unified Extensible Firmware Interface<text:span text:style-name="T3">. UEFI </text:span><text:span text:style-name="T14">is not</text:span><text:span text:style-name="T24"> BIOS, and BIOS </text:span><text:span text:style-name="T14">is not</text:span><text:span text:style-name="T24"> UEFI.</text:span></text:p></text:note-body></text:note></text:span><text:span text:style-name="T20"> (and corresponding concepts such as Secureboot, etc.) which is no easy task to understand and very commonly misunderstood. (For instance, a common misconception is that UEFI necessarily implies Secureboot. This is quite far from the truth and UEFI by itself is quite a useful replacement for BIOS). Many of these misconceptions are simply due to lack of knowledge about the intricacies and complexities behind these technologies. Some of it is simply FUD</text:span><text:span text:style-name="T25"><text:note text:id="ftn2" text:note-class="footnote"><text:note-citation>2</text:note-citation><text:note-body>
<text:p text:style-name="P26">Fear, Uncertainty, Doubt<text:span text:style-name="T3">- propaganda, in other words.</text:span></text:p></text:note-body></text:note></text:span><text:span text:style-name="T25"> generated to prey on the fears of those who dont understand the underlying specifications or technology.</text:span></text:p>
<text:p text:style-name="P6"><text:soft-page-break/><text:span text:style-name="T19"><text:tab/></text:span><text:span text:style-name="T20">Its my hope that by releasing this utility and documenting it that you can use it and save some time for yourself as well </text:span><text:span text:style-name="T21">(and hopefully get the chance to learn a bit more in the process!)</text:span><text:span text:style-name="T20">. </text:span></text:p>
<text:h text:style-name="P17" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc256_1260022884"/>What is this document?<text:bookmark-end text:name="__RefHeading___Toc256_1260022884"/></text:h>
<text:h text:style-name="P20" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc256_1260022884"/>What is this document?<text:bookmark-end text:name="__RefHeading___Toc256_1260022884"/></text:h>
<text:p text:style-name="P8"><text:tab/><text:span text:style-name="T34">This document is intended to be an indexed and easier-to-use reference than the other plaintext files (in </text:span><text:span text:style-name="T2">docs/</text:span><text:span text:style-name="T6">). </text:span></text:p>
<text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc173_449581326"/>Conventions used in this document<text:bookmark-end text:name="__RefHeading___Toc173_449581326"/></text:h>
<text:p text:style-name="P25"><text:tab/><text:span text:style-name="T35">There are certain formats used in this document to specify what type of text they are representing.</text:span></text:p>
<text:list xml:id="list4863602129491927673" text:style-name="L1">
<text:p text:style-name="P11"><text:tab/><text:span text:style-name="T35">There are certain formats used in this document to specify what type of text they are representing.</text:span></text:p>
<text:list xml:id="list4073382874348611620" text:style-name="L1">
<text:list-item>
<text:p text:style-name="P26"><text:span text:style-name="T35">Commands will be </text:span><text:span text:style-name="T10">in italics</text:span><text:span text:style-name="T20">.</text:span></text:p>
<text:p text:style-name="P28"><text:span text:style-name="T35">Commands will be </text:span><text:span text:style-name="T10">in italics</text:span><text:span text:style-name="T20">.</text:span></text:p>
<text:list>
<text:list-item>
<text:p text:style-name="P26"><text:span text:style-name="T21">e.g. </text:span><text:span text:style-name="T11">cat /tmp/file.txt</text:span></text:p>
<text:p text:style-name="P28"><text:span text:style-name="T21">e.g. </text:span><text:span text:style-name="T11">cat /tmp/file.txt</text:span></text:p>
</text:list-item>
</text:list>
</text:list-item>
<text:list-item>
<text:p text:style-name="P26"><text:span text:style-name="T20">Paths (files, directories) will be </text:span><text:span text:style-name="T22">in bold</text:span><text:span text:style-name="T25"> </text:span><text:span text:style-name="T27">(unless part of a command, output, etc.)</text:span><text:span text:style-name="T15">.</text:span></text:p>
<text:p text:style-name="P28"><text:span text:style-name="T20">Paths (files, directories) will be </text:span><text:span text:style-name="T22">in bold</text:span><text:span text:style-name="T25"> </text:span><text:span text:style-name="T27">(unless part of a command, output, etc.)</text:span><text:span text:style-name="T15">.</text:span></text:p>
<text:list>
<text:list-item>
<text:p text:style-name="P26"><text:span text:style-name="T26">e.g. </text:span><text:span text:style-name="T15"><text:s/></text:span><text:span text:style-name="T12">/</text:span><text:span text:style-name="T13">tmp/file.txt</text:span></text:p>
<text:p text:style-name="P28"><text:span text:style-name="T26">e.g. </text:span><text:span text:style-name="T15"><text:s/></text:span><text:span text:style-name="T12">/</text:span><text:span text:style-name="T13">tmp/file.txt</text:span></text:p>
</text:list-item>
</text:list>
</text:list-item>
<text:list-item>
<text:p text:style-name="P27"><text:span text:style-name="T24">Variables will be </text:span><text:span text:style-name="T28">underlined</text:span></text:p>
<text:p text:style-name="P29"><text:span text:style-name="T24">Variables will be </text:span><text:span text:style-name="T28">underlined</text:span></text:p>
<text:list>
<text:list-item>
<text:p text:style-name="P27"><text:span text:style-name="T30">e.g. print(</text:span><text:span text:style-name="T28">foo</text:span><text:span text:style-name="T30">)</text:span></text:p>
<text:p text:style-name="P29"><text:span text:style-name="T30">e.g. print(</text:span><text:span text:style-name="T28">foo</text:span><text:span text:style-name="T30">)</text:span></text:p>
</text:list-item>
</text:list>
</text:list-item>
<text:list-item>
<text:p text:style-name="P27"><text:span text:style-name="T30">URLs (hyperlinks, really; you should be able to click on them) are </text:span><text:span text:style-name="T29">bold and underlined</text:span><text:span text:style-name="T30">.</text:span></text:p>
<text:p text:style-name="P29"><text:span text:style-name="T30">URLs (hyperlinks, really; you should be able to click on them) are </text:span><text:span text:style-name="T29">bold and underlined</text:span><text:span text:style-name="T30">.</text:span></text:p>
<text:list>
<text:list-item>
<text:p text:style-name="P27"><text:span text:style-name="T30">e.g. </text:span><text:a xlink:type="simple" xlink:href="https://bdisk.square-r00t.net/" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">https://bdisk.square-r00t.net</text:a></text:p>
<text:p text:style-name="P29"><text:span text:style-name="T30">e.g. </text:span><text:a xlink:type="simple" xlink:href="https://bdisk.square-r00t.net/" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">https://bdisk.square-r00t.net</text:a></text:p>
</text:list-item>
</text:list>
</text:list-item>
<text:list-item>
<text:p text:style-name="P27"><text:span text:style-name="T30">Paramaters/arguments will be either </text:span><text:span text:style-name="T31">in</text:span><text:span text:style-name="T30"> &lt;</text:span><text:span text:style-name="T31">angled brackets&gt;, [square brackets], or [&lt;both&gt;]</text:span></text:p>
<text:p text:style-name="P29"><text:span text:style-name="T30">Paramaters/arguments will be either </text:span><text:span text:style-name="T31">in</text:span><text:span text:style-name="T30"> &lt;</text:span><text:span text:style-name="T31">angled brackets&gt;, [square brackets], or [&lt;both&gt;]</text:span></text:p>
<text:list>
<text:list-item>
<text:p text:style-name="P28"><text:span text:style-name="T30">&lt;&gt; are used for positional arguments/parameters, or “placeholders”</text:span></text:p>
<text:p text:style-name="P31">&lt;&gt; are used for positional arguments/parameters, or “placeholders”</text:p>
</text:list-item>
<text:list-item>
<text:p text:style-name="P28"><text:span text:style-name="T30">[] are used for optional arguments/parameters</text:span></text:p>
<text:p text:style-name="P31">[] are used for optional arguments/parameters</text:p>
</text:list-item>
<text:list-item>
<text:p text:style-name="P28"><text:span text:style-name="T30">Thus e.g. </text:span><text:span text:style-name="T16">someprog dostuff &lt;stufftodo&gt; [--domorestuff &lt;morestufftodo&gt;]</text:span></text:p>
<text:p text:style-name="P30"><text:span text:style-name="T30">Thus e.g. </text:span><text:span text:style-name="T16">someprog dostuff &lt;stufftodo&gt; [--domorestuff &lt;morestufftodo&gt;]</text:span></text:p>
</text:list-item>
</text:list>
</text:list-item>
</text:list>
<text:h text:style-name="P17" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc258_1260022884"/><text:soft-page-break/>Further information/resources<text:bookmark-end text:name="__RefHeading___Toc258_1260022884"/></text:h>
<text:h text:style-name="P20" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc220_1657685180"/>For Users<text:bookmark-end text:name="__RefHeading___Toc220_1657685180"/></text:h>
<text:h text:style-name="P20" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc258_1260022884"/><text:soft-page-break/>Further information/resources<text:bookmark-end text:name="__RefHeading___Toc258_1260022884"/></text:h>
<text:h text:style-name="P23" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc220_1657685180"/>For Users<text:bookmark-end text:name="__RefHeading___Toc220_1657685180"/></text:h>
<text:p text:style-name="P10"><text:tab/><text:span text:style-name="T33">If you encounter any bugs (or have any suggestions on how to improve BDisk!), please file a bug report in my </text:span><text:a xlink:type="simple" xlink:href="https://bugs.square-r00t.net/index.php?project=2" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link"><text:span text:style-name="T33">bug tracker</text:span></text:a><text:span text:style-name="T33">.</text:span></text:p>
<text:h text:style-name="P20" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc175_449581326"/>For Developers<text:bookmark-end text:name="__RefHeading___Toc175_449581326"/></text:h>
<text:h text:style-name="P23" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc175_449581326"/>For Developers<text:bookmark-end text:name="__RefHeading___Toc175_449581326"/></text:h>
<text:p text:style-name="P9"><text:span text:style-name="T4"><text:tab/>The source is available to browse </text:span><text:a xlink:type="simple" xlink:href="https://git.square-r00t.net/BDisk/" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">online</text:a><text:span text:style-name="T4"> or can be checked out via </text:span><text:a xlink:type="simple" xlink:href="https://git-scm.com/" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">git</text:a><text:span text:style-name="T4"> (via the </text:span><text:a xlink:type="simple" xlink:href="git://git.square-r00t.net/bdisk.git" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">git protocol</text:a><text:span text:style-name="T4"> or </text:span><text:a xlink:type="simple" xlink:href="https://git.square-r00t.net/BDisk" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">http protocol</text:a><text:span text:style-name="T4">). It is also available via Arch Linuxs </text:span><text:a xlink:type="simple" xlink:href="https://aur.archlinux.org/packages/bdisk/" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">AUR</text:a><text:span text:style-name="T4">. If you are interested in packaging </text:span><text:span text:style-name="T5">BDisk for other distributions, please feel free to </text:span><text:a xlink:type="simple" xlink:href="mailto:bts@square-r00t.net?subject=[BDISK]%20Packaging" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">contact me</text:a><text:span text:style-name="T5">.</text:span></text:p>
<text:h text:style-name="Heading_20_1" text:outline-level="1"><text:bookmark-start text:name="__RefHeading___Toc232_667539389"/><text:span text:style-name="T5">G</text:span><text:span text:style-name="T3">etting Started</text:span><text:bookmark-end text:name="__RefHeading___Toc232_667539389"/></text:h>
<text:p text:style-name="P8"/>

View File

@ -403,6 +403,10 @@ usb = yes
; of curl.
uri = https://bdisk.square-r00t.net

; Directory to hold SSL results, if we are generating
; keys, certificates, etc.
ssldir = ${build:dlpath}/ssl

; Path to the (root) CA certificate file iPXE should use.
; Note that you can use your own CA to sign existing certs.
; See http://ipxe.org/crypto for more info. This is handy if
@ -411,39 +415,39 @@ uri = https://bdisk.square-r00t.net
; 0.) No whitespace
; 1.) Must be in PEM/X509 format
; 2.) REQUIRED if iso and/or usb is set to True/yes/etc.
; 3.) If specified, a matching key (ssl_cakey) MUST be
; 3.) If it exists, a matching key (ssl_cakey) MUST be
; specified
; 4.) HOWEVER, if left blank, one will be automatically
; generated
ssl_ca =
; 4.) HOWEVER, if left blank/doesn't exist, one will be
; automatically generated
ssl_ca = ${ssldir}/ca.crt

; Path to the (root) CA key file iPXE should use.
; 0.) No whitespace
; 1.) Must be in PEM/X509 format
; 2.) REQUIRED if iso and/or usb is set to True/yes/etc.
; 3.) If left blank (and ssl_ca is also blank),
; one will be automatically generated
; 4.) MUST match ssl_ca if specified
; 3.) If left blank or it doesn't exist (and ssl_ca is also
; blank), one will be automatically generated
; 4.) MUST match ssl_ca if specified/exists
; 5.) MUST NOT be passphrase-protected
ssl_cakey =
ssl_cakey = ${ssldir}/ca.key

; Path to the CLIENT certificate iPXE should use.
; 0.) No whitespace
; 1.) Must be in PEM/X509 format
; 2.) REQUIRED if iso and/or usb is set to True/yes/etc.
; 3.) If unspecified, a CA cert (ssl_ca) and key
; (ssl_cakey) MUST be specified
; 4.) HOWEVER, if left blank one will be generated
; 3.) If specified/existent, a matching CA cert (ssl_ca)
; and key (ssl_cakey) MUST be specified
; 4.) HOWEVER, if left blank/nonexistent, one will be generated
; 5.) MUST be signed by ssl_ca/ssl_ca if specified
ssl_crt =
ssl_crt = ${ssldir}/main.crt

; Path to the CLIENT key iPXE should use.
; 0.) No whitespace
; 1.) Must be in PEM/X509 format
; 2.) REQUIRED if iso and/or usb is set to True/yes/etc.
; 4.) If left blank (and ssl_ca is also blank),
; 4.) If left blank/nonexistent (and ssl_ca is also blank),
; one will be automatically generated
ssl_key =
ssl_key = ${ssldir}/main.key


#---------------------------------------------------------#