WHOOHOO! it validates finally...
This commit is contained in:
parent
459c48104b
commit
7035dfc490
11
TODO
11
TODO
@ -8,6 +8,16 @@ bf566e594a2ad3e488fef7cfa6832d4ba857d8129b0c00fe3a096e9fbb85e92c268368a201f12f22
|
||||
</disk>
|
||||
...
|
||||
|
||||
|
||||
it seems urllib in python3 doesn't support ftps, so you'll need to use ftplib if so.
|
||||
|
||||
server = ftplib.FTP_TLS(server, user, password)
|
||||
server.login(user, password)
|
||||
server.prot_p()
|
||||
server.retrlines("RETR " + filepath)
|
||||
|
||||
should do it.
|
||||
|
||||
- use sgdisk? scripting (generated by python) for disk partitioning (part types listed at http://www.rodsbooks.com/gdisk/walkthrough.html )
|
||||
-- actually, might want to use parted --script instead? then we can do percentages. https://www.gnu.org/software/parted/manual/parted.html
|
||||
https://unix.stackexchange.com/questions/200582/scripteable-gpt-partitions-using-parted
|
||||
@ -23,7 +33,6 @@ parser: make sure to use https://mikeknoop.com/lxml-xxe-exploit/ fix
|
||||
|
||||
need to set proper location block for https://aif.square-r00t.net/aif.xsd
|
||||
|
||||
|
||||
xmllint --noout --schema aif.xsd aif.xml
|
||||
|
||||
docs:
|
||||
|
78
aif.xml
78
aif.xml
@ -13,70 +13,42 @@
|
||||
<network hostname="aiftest.square-r00t.net">
|
||||
<iface device="auto" address="auto" netproto="ipv4" />
|
||||
</network>
|
||||
<system timezone="EST5EDT" locale="en_US.UTF-8" />
|
||||
<user>
|
||||
<system timezone="EST5EDT" locale="en_US.UTF-8">
|
||||
<!-- note: all password hashes below are "test"; don't waste your time trying to crack. :) -->
|
||||
<root>
|
||||
<password>$6$3YPpiS.l3SQC6ELe$NQ4qMvcDpv5j1cCM6AGNc5Hyg.rsvtzCt2VWlSbuZXCGg2GB21CMUN8TMGS35tdUezZ/n9y3UFGlmLRVWXvZR.</password>
|
||||
</root>
|
||||
<regusr>
|
||||
<username>aifusr</username>
|
||||
<comment>A test user for AIF.</comment>
|
||||
<sudo>true</sudo>
|
||||
<group>aifusr</group>
|
||||
<password>$6$WtxZKOyaahvvWQRG$TUys60kQhF0ffBdnDSJVTA.PovwCOajjMz8HEHL2H0ZMi0bFpDTQvKA7BqzM3nA.ZMAUxNjpJP1dG/eA78Zgw0</password>
|
||||
<homedir path="/home/aifusr" create="true" />
|
||||
<xgroup name="admins" />
|
||||
<users rootpass="$6$3YPpiS.l3SQC6ELe$NQ4qMvcDpv5j1cCM6AGNc5Hyg.rsvtzCt2VWlSbuZXCGg2GB21CMUN8TMGS35tdUezZ/n9y3UFGlmLRVWXvZR.">
|
||||
<user name="aifusr"
|
||||
sudo="true"
|
||||
password="$6$WtxZKOyaahvvWQRG$TUys60kQhF0ffBdnDSJVTA.PovwCOajjMz8HEHL2H0ZMi0bFpDTQvKA7BqzM3nA.ZMAUxNjpJP1dG/eA78Zgw0"
|
||||
comment="A test user for AIF.">
|
||||
<home path="/opt/aifusr" create="true" />
|
||||
<xgroup name="admins" create="true" />
|
||||
<xgroup name="wheel" />
|
||||
<xgroup name="users" />
|
||||
</regusr>
|
||||
</user>
|
||||
</users>
|
||||
</system>
|
||||
<pacman>
|
||||
<repos>
|
||||
<core>
|
||||
<status>enabled</status>
|
||||
<mirror>Include = /etc/pacman.d/mirrorlist</mirror>
|
||||
</core>
|
||||
<extra>
|
||||
<status>enabled</status>
|
||||
<mirror>Include = /etc/pacman.d/mirrorlist</mirror>
|
||||
</extra>
|
||||
<community>
|
||||
<status>enabled</status>
|
||||
<mirror>Include = /etc/pacman.d/mirrorlist</mirror>
|
||||
</community>
|
||||
<multilib>
|
||||
<status>disabled</status>
|
||||
<mirror>Include = /etc/pacman.d/mirrorlist</mirror>
|
||||
</multilib>
|
||||
<testing>
|
||||
<status>disabled</status>
|
||||
<mirror>Include = /etc/pacman.d/mirrorlist</mirror>
|
||||
</testing>
|
||||
<multilib-testing>
|
||||
<status>disabled</status>
|
||||
<mirror>Include = /etc/pacman.d/mirrorlist</mirror>
|
||||
</multilib-testing>
|
||||
<custom name="archlinuxfr">
|
||||
<status>disabled</status>
|
||||
<mirror>http://repo.archlinux.fr/$arch</mirror>
|
||||
<siglevel>Never</siglevel>
|
||||
</custom>
|
||||
<repo name="core" enabled="true" siglevel="default" mirror="file:///etc/pacman.d/mirrorlist" />
|
||||
<repo name="extra" enabled="true" siglevel="default" mirror="file:///etc/pacman.d/mirrorlist" />
|
||||
<repo name="community" enabled="true" siglevel="default" mirror="file:///etc/pacman.d/mirrorlist" />
|
||||
<repo name="multilib" enabled="true" siglevel="default" mirror="file:///etc/pacman.d/mirrorlist" />
|
||||
<repo name="testing" enabled="false" siglevel="default" mirror="file:///etc/pacman.d/mirrorlist" />
|
||||
<repo name="multilib-testing" enabled="false" siglevel="default" mirror="file:///etc/pacman.d/mirrorlist" />
|
||||
<repo name="archlinuxfr" enabled="false" siglevel="Optional TrustedOnly" mirror="http://repo.archlinux.fr/$arch" />
|
||||
</repos>
|
||||
<mirrorlist>
|
||||
<server>http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch</server>
|
||||
<server>http://mirror.us.leaseweb.net/archlinux/$repo/os/$arch</server>
|
||||
<server>http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch</server>
|
||||
<server>http://arch.mirrors.ionfish.org/$repo/os/$arch</server>
|
||||
<server>http://mirrors.gigenet.com/archlinux/$repo/os/$arch</server>
|
||||
<server>http://mirror.jmu.edu/pub/archlinux/$repo/os/$arch</server>
|
||||
<mirror>http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch</mirror>
|
||||
<mirror>http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch</mirror>
|
||||
<mirror>http://mirror.us.leaseweb.net/archlinux/$repo/os/$arch</mirror>
|
||||
<mirror>http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch</mirror>
|
||||
<mirror>http://arch.mirrors.ionfish.org/$repo/os/$arch</mirror>
|
||||
<mirror>http://mirrors.gigenet.com/archlinux/$repo/os/$arch</mirror>
|
||||
<mirror>http://mirror.jmu.edu/pub/archlinux/$repo/os/$arch</mirror>
|
||||
</mirrorlist>
|
||||
<software>
|
||||
<package name="sed" repo="core" />
|
||||
</software>
|
||||
</pacman>
|
||||
<bootloader efi="true">
|
||||
<type>GRUB</type>
|
||||
<where>/boot</where>
|
||||
</bootloader>
|
||||
<bootloader type="grub" target="/boot" efi="true" />
|
||||
</aif>
|
||||
|
163
aif.xsd
163
aif.xsd
@ -54,12 +54,48 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="scripturi">
|
||||
<xs:restriction base="xs:anyURI">
|
||||
<xs:pattern value="(https?|ftps?|file)://" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="devlang">
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:pattern value="/(usr/)?s?bin/[A-Za-z0-9][A-Za-z\.\-]?" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="nixgroup">
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:pattern value="[_a-z][-0-9_a-z]*$?" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="nixpass">
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:pattern value="$(6$[A-Za-z0-9\./\+=]{8,16}$[A-Za-z0-9\./\+=]{86}|1$[A-Za-z0-9\./\+=]{8,16}$[A-Za-z0-9\./\+=]{22}|5$[A-Za-z0-9\./\+=]{8,16}$[A-Za-z0-9\./\+=]{43})" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="pacuri">
|
||||
<xs:restriction base="xs:anyURI">
|
||||
<xs:pattern value="(file|https?)://.*" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="bootloaders">
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:pattern value="(grub|lilo|syslinux)" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<!-- ROOT -->
|
||||
<xs:element name="aif">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<!-- BEGIN STORAGE -->
|
||||
<xs:element name="storage" minOccurs="1">
|
||||
<xs:element name="storage" minOccurs="1" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<!-- BEGIN DISK -->
|
||||
@ -129,6 +165,123 @@
|
||||
</xs:unique>
|
||||
</xs:element>
|
||||
<!-- END NETWORK -->
|
||||
<!-- BEGIN SYSTEM -->
|
||||
<xs:element name="system" maxOccurs="1" minOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="users" minOccurs="1" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="user" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="home" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="path" type="xs:token" />
|
||||
<xs:attribute name="create" type="xs:boolean" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="xgroup" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="nixgroup" use="required" />
|
||||
<xs:attribute name="create" type="xs:boolean" />
|
||||
<xs:attribute name="gid" type="xs:boolean" />
|
||||
</xs:complexType>
|
||||
<xs:unique name="unique-grp">
|
||||
<xs:selector xpath="xgroup" />
|
||||
<xs:field xpath="@name" />
|
||||
</xs:unique>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:token" use="required" />
|
||||
<xs:attribute name="uid" type="xs:token" />
|
||||
<xs:attribute name="group" type="nixgroup" />
|
||||
<xs:attribute name="gid" type="xs:token" />
|
||||
<xs:attribute name="password" type="nixpass" />
|
||||
<xs:attribute name="comment" type="xs:token" />
|
||||
<xs:attribute name="sudo" type="xs:boolean" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="rootpass" type="nixpass" />
|
||||
</xs:complexType>
|
||||
<xs:unique name="unique-usr">
|
||||
<xs:selector xpath="user" />
|
||||
<xs:field xpath="@name" />
|
||||
</xs:unique>
|
||||
</xs:element>
|
||||
<xs:element name="service" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:token" use="required" />
|
||||
<xs:attribute name="status" type="xs:boolean" use="required" />
|
||||
</xs:complexType>
|
||||
<xs:unique name="unique-svc">
|
||||
<xs:selector xpath="service" />
|
||||
<xs:field xpath="@name" />
|
||||
<xs:field xpath="@status" />
|
||||
</xs:unique>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="timezone" type="xs:string" use="required" />
|
||||
<xs:attribute name="locale" type="xs:string" use="required" />
|
||||
<xs:attribute name="kbd" type="xs:token" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<!-- END SYSTEM -->
|
||||
<!-- BEGIN PACMAN -->
|
||||
<xs:element name="pacman" maxOccurs="1" minOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="repos" maxOccurs="1" minOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="repo" maxOccurs="unbounded" minOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:token" use="required" />
|
||||
<xs:attribute name="enabled" type="xs:boolean" use="required" />
|
||||
<xs:attribute name="siglevel" type="xs:token" use="required" />
|
||||
<xs:attribute name="mirror" type="pacuri" use="required" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="mirrorlist" maxOccurs="1" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="mirror" type="pacuri" maxOccurs="unbounded" minOccurs="1" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:unique name="unique-mirrors">
|
||||
<xs:selector xpath="mirror" />
|
||||
<xs:field xpath="." />
|
||||
</xs:unique>
|
||||
</xs:element>
|
||||
<xs:element name="software" maxOccurs="1" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="package" maxOccurs="unbounded" minOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:token" use="required" />
|
||||
<xs:attribute name="repo" type="xs:token" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<!-- END PACMAN -->
|
||||
<!-- BEGIN BOOTLOADER -->
|
||||
<xs:element name="bootloader" maxOccurs="1" minOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="type" type="bootloaders" use="required" />
|
||||
<xs:attribute name="target" type="xs:token" use="required" />
|
||||
<xs:attribute name="efi" type="xs:boolean" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<!-- END BOOTLOADER -->
|
||||
<!--- BEGIN SCRIPTS -->
|
||||
<xs:element name="scripts" maxOccurs="1" minOccurs="0">
|
||||
<xs:complexType>
|
||||
@ -150,13 +303,5 @@
|
||||
<!-- END SCRIPTS -->
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="system" maxOccurs="1" minOccurs="1" />
|
||||
<xs:element ref="user" maxOccurs="1" minOccurs="1" />
|
||||
<xs:element ref="pacman" maxOccurs="1" minOccurs="1" />
|
||||
<xs:element ref="bootloader" maxOccurs="1" minOccurs="1" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
Loading…
Reference in New Issue
Block a user