Compare commits

...

101 Commits

Author SHA1 Message Date
42f7cf5903 RIP d00d 2016-12-04 03:01:56 -05:00
ef2790eb68 minor modifications 2016-11-14 03:41:27 -05:00
6d9f24ee28 updating package list, minor tweak to mk chroot 2016-09-26 05:06:04 -04:00
c418fca548 added instructions for submitting patch 2016-07-09 14:15:39 -04:00
2d6384e15d updating mirrorlist 2016-07-09 01:09:27 -04:00
a08ae5dd06 updating patches, tweaks, etc. 2016-07-04 06:23:52 -04:00
91b8edcc26 updating, adding some package fixes 2016-04-30 06:49:05 -04:00
3cbf32be30 updating docs 2016-04-27 20:49:56 -04:00
4e2a2fecb1 adding key for my packages 2016-04-07 00:35:52 -04:00
001fdf99d3 fixing this stupid fucking patch. gorram whitespace tabs gorram it 2016-03-02 01:29:05 -05:00
e95c4f3cff updating patch... 2016-03-01 22:15:03 -05:00
f43ceb501f updating package list with some temporary workarounds (my customizepkg-scripting might be causing some to fail?), updated some embedded confs, cleaned up some functions, updated ipxe patches 2016-02-25 10:08:43 -05:00
d826082f2b ipxe update, packages update 2016-01-10 14:34:49 -05:00
5ea464fac9 fixing build 2015-10-02 02:17:33 -04:00
8726f63c7c updating TODO, etc. 2015-09-26 15:03:11 -04:00
673a54ef2e hrmm.. gpg throwing errors and killing chroot 2015-09-23 15:27:49 -04:00
f4397354a9 adding some gitignores in prep for SSL support in iPXE 2015-09-18 01:31:58 -04:00
ac6d269a64 POINT RELEASE: all distros listed done testing 2015-09-03 00:09:48 -04:00
59bec45449 workaround for importing some SUSE vars... 2015-08-31 04:54:29 -04:00
164032088a some updates from testing.. 2015-08-29 18:09:45 -04:00
2870866232 point update 2015-08-27 20:57:45 -04:00
b2c9fc731a successful build 2015-08-25 17:33:29 -04:00
0e121285bf oops. 2015-08-24 01:51:17 -04:00
bd11e3e9ec checking in before test build and tag 2015-08-24 01:50:30 -04:00
cbde8105c1 new patches... 2015-08-21 14:45:51 -04:00
6f33687230 checking in 2015-08-17 02:07:46 -04:00
24409fe287 fixing some runtime and http stuff 2015-08-05 14:19:34 -04:00
7bf72d3987 fixing blank passwords per build.conf and updating ipxe src checkout 2015-08-04 03:19:22 -04:00
559e989e1b Merge branch 'master' of square-r00t.net:bdisk 2015-08-03 11:19:21 -04:00
7ffa278b19 merging 2015-08-03 11:19:16 -04:00
65200c2a00 fixing files 2015-08-03 11:18:33 -04:00
79a87e4789 fixing some naming stuffz... 2015-08-03 04:05:03 -04:00
e2a5ef10eb fedora passes. also discovered bug- AUR4's missing some packages. TODO: port over/adopt pkgs that are missing. 2015-07-30 12:55:54 -04:00
21dccef17c devuan and elementary not supported- non-systemd chrooting broken atm 2015-07-30 03:35:29 -04:00
c6f5a880c5 Merge branch 'master' of square-r00t.net:bdisk 2015-07-30 01:26:36 -04:00
fa5a962552 centos tested 2015-07-30 01:24:54 -04:00
0036055330 updating ipxe sources. fingers crossed patches still work, haven't tested yet. 2015-07-24 04:53:55 -04:00
71e9d7be5d adding some backup packages, disabling untested distros 2015-07-24 04:50:51 -04:00
8b351731bd squashfs3-tools shouldn't be necessary... which is good, because it isn't working in AUR4 anyways. 2015-07-23 18:10:07 -04:00
c6dd840e43 updating apacman 2015-07-23 15:40:23 -04:00
b36ef29900 some minor modifications.. 2015-07-23 03:49:14 -04:00
f4c8f45ee3 oops. forgot the noconfirm for haveged. 2015-07-22 22:21:57 -04:00
342d9894f5 FINALLY. testing cross-distro after many tweaks. also switched to github mirrors for the UEFI shells because sourceforge sucks. 2015-07-21 15:06:28 -04:00
4403901d8f i'm a dumb. 2015-07-17 07:36:19 -04:00
fc0a1ec94a now during testing... 2015-07-17 06:41:16 -04:00
eca04c2140 adding baseline pkgs 2015-07-16 12:48:35 -04:00
6c4634a11d mageia/(open)?SUSE pkgs list done, untested. also, i am an idiot. 2015-07-16 05:18:34 -04:00
7fb7871daf gentoo pkgs list done, untested 2015-07-16 04:07:31 -04:00
43cd3ab4b9 Fedora pkgs list done, added elementaryOS. both untested. 2015-07-16 03:13:36 -04:00
ef664d39b9 Debian, Devuan, Ubuntu, etc. pkgs list done- untested 2015-07-16 00:25:41 -04:00
411a544d4b arch/arch-based, rhel/rhel-based pkglists done. untested. 2015-07-15 22:04:45 -04:00
7fb6e77c32 more work done... still 100% untested, and i need to finish the package lists, but i have a testing platform built for all the distros. 2015-07-15 03:56:53 -04:00
0153d38a33 halfway there. now i just need to build the package lists. 2015-07-14 01:30:03 -04:00
52cb0ea321 working on dat cross-distro support.... 2015-07-12 03:04:09 -04:00
67aba34ed1 adding custom EMBED URI 2015-07-12 00:46:45 -04:00
b4d619f2f9 updating gitignore 2015-07-12 00:45:54 -04:00
3d5e724bd5 updating TODO, changing default EMBED for iPXE to use https 2015-07-09 22:02:03 -04:00
8f6a03ef21 i should probably license this shit now that it's public. 2015-07-07 22:40:45 -04:00
7b36d3fed2 updating TODO 2015-07-07 10:59:15 -04:00
97fa4ca798 aaaand new iPXE sources 2015-07-07 10:57:20 -04:00
1cb4515fd9 and one more gitignore... 2015-07-07 08:55:02 -04:00
485b6675c4 updating ignores.. 2015-07-07 08:52:01 -04:00
fd5855c30a fixing some lib names 2015-07-07 08:16:29 -04:00
15ec5edbee whoo dogy. finally got around to renaming those lib names? 2015-07-05 05:03:27 -04:00
7e16ab2b9a adding example files/hierarchy for HTTP ipxe 2015-07-05 04:33:33 -04:00
334cf89cb5 finally fixing ipxe dns bug. 2015-07-03 22:48:37 -04:00
683fdc89b0 fixing some dns bugs if running in VM 2015-07-03 15:42:27 -04:00
951333ae10 finally. v1.20 builds. 2015-07-01 05:37:57 -04:00
f3d08daab8 make mini opt-in 2015-07-01 04:00:34 -04:00
a20104dcb4 okay. finally cleaning up. 2015-06-30 20:09:59 -04:00
4a446e8cbf cleaning up git cleanup 2015-06-30 20:01:54 -04:00
edc860fe27 pruning submodule for ipxe 2015-06-30 19:55:00 -04:00
d96d43054c i think i have a v1.20... need to test. 2015-06-29 23:25:20 -04:00
9237c666c0 okay. think i've got it now. 2015-06-29 22:44:43 -04:00
7e39792c22 fixing patch
more fixes

fixing new patches

fixing new patches
2015-06-29 22:33:04 -04:00
114fbed031 adding patches 2015-06-29 21:46:24 -04:00
801c5950e6 adding upstream arch patches to ipxe... 2015-06-29 20:59:57 -04:00
6f9e2be865 adding ref in TODO to patches for ipxe-git in AUR 2015-06-29 13:21:42 -04:00
f34c5145b5 updating TODO 2015-06-29 12:44:57 -04:00
8c44a222fa adding embeds 2015-06-29 04:34:09 -04:00
8b617c6fb1 updating README for git submodules 2015-06-29 04:19:56 -04:00
ab53094f90 updating TODO 2015-06-27 22:53:28 -04:00
cab43beffc adding ipxe notes 2015-06-27 22:02:07 -04:00
8de80fde9d adding iPXE, fixing changed package name 2015-06-27 21:07:24 -04:00
1503f55f5b adding iPXE 2015-06-26 22:32:25 -04:00
e97cda244e adding newer wps breaking stuffs 2015-06-25 16:02:56 -04:00
aa68cd49fb oops- *don't* remove machine-id. 2015-06-07 15:20:41 -04:00
71a2e1ad88 fixing split arch 2015-05-21 15:31:49 -04:00
32c39ff7e1 finalized split-iso. working 2015-05-21 02:47:36 -04:00
56806ba880 yeah, fuck NetworkManager, use --purgebuild 2015-05-20 23:55:54 -04:00
7f62dbb3ee disabling acpidump- no longer in repos 2015-05-15 14:05:25 -04:00
812e861152 adding apacman.conf 2015-05-15 13:53:16 -04:00
e601e50570 updating TODO 2015-05-15 02:48:35 -04:00
a131b1288a updating TODO 2015-05-08 13:55:38 -04:00
ff24710b95 adding pv for progress bar for RAM loading 2015-05-08 13:45:36 -04:00
145a7d6271 changing default to run from media, not RAM) 2015-05-06 18:12:26 -04:00
318469f993 adding iperf3 to install list 2015-05-06 10:49:36 -04:00
d8ae21c31b added SmcDumpKey.c source; TODO: include on disk itself. maybe make a /tools or something. 2015-05-05 16:19:33 -04:00
e337afdeb7 updating TODO 2015-04-21 00:18:23 -04:00
591ef6b826 fuck you, connect to the internet 2015-03-25 04:41:47 -04:00
4c562f7be6 forcing networking in case it fails 2015-03-21 04:55:07 -04:00
109 changed files with 3076 additions and 682 deletions

11
.gitignore vendored
View File

@@ -23,3 +23,14 @@
/screenlog* /screenlog*
/logs /logs
*.swp *.swp
*.lck
/extrasrc
# You should really generate local copies of these, as they're pretty private.
extra/pre-build.d/etc/openvpn/client.conf
overlay/etc/ssh/*
overlay/home/bdisk
overlay/etc/systemd/system/multi-user.target.wants/openvpn@client.service
src/ipxe_local/ssl/keys
src/ipxe_local/ssl/crts
src/ipxe_local/ssl/txt

5
.gitmodules vendored Normal file
View File

@@ -0,0 +1,5 @@
[submodule "ipxe"]
branch = master
[submodule "src/ipxe"]
path = src/ipxe
url = git://git.ipxe.org/ipxe.git

7
README.obsolete Normal file
View File

@@ -0,0 +1,7 @@
!!!!!!!!!!! NOTE !!!!!!!!!!!!!
THIS BRANCH IS *NO LONGER MAINTAINED*.
IT HAS BEEN OBSOLETED BY THE (now merged into master) "python_rewrite" BRANCH.
DO NOT SEND BUGS REGARDING THIS BRANCH.
DO NOT USE THIS BRANCH.
IT IS ONLY KEPT AROUND FOR HISTORICAL REASONS.

View File

@@ -7,6 +7,8 @@
#DEBUG #DEBUG
#set -x #set -x
echo "Starting at $(date)..."
## Import settings ## Import settings
if [ -f "build.conf" ]; if [ -f "build.conf" ];
then then
@@ -63,7 +65,7 @@ echo "Checking directory structure and creating lockfile at ${LOCKFILE}..."
touch ${LOCKFILE} touch ${LOCKFILE}
# make sure the paths exist and then check for an existing chroot session # make sure the paths exist and then check for an existing chroot session
for i in ${ROOTDIR} ${CHROOTDIR32} ${CHROOTDIR64} ${BUILDDIR}32 ${BUILDDIR}64 ${ISODIR} ${MOUNTPT} ${TEMPDIR}/{${UXNAME},${DISTNAME}} ${ARCHBOOT} ${SRCDIR} ${TFTPDIR} ${HTTPDIR}/${DISTNAME} ${BASEDIR}/logs; for i in ${BASEDIR} ${CHROOTDIR32} ${CHROOTDIR64} ${BUILDDIR}32 ${BUILDDIR}64 ${ISODIR} ${MOUNTPT} ${TEMPDIR}/{${UXNAME},${DISTNAME}} ${ARCHBOOT} ${SRCDIR} ${TFTPDIR} ${HTTPDIR}/${DISTNAME} ${BASEDIR}/logs;
do do
if [ ! -d ${i} ]; if [ ! -d ${i} ];
then then
@@ -72,6 +74,8 @@ do
fi fi
done done
source ${BASEDIR}/lib/00-depcheck.func.sh
if [ ! -f "./BUILDNO" ]; if [ ! -f "./BUILDNO" ];
then then
echo '0' > ./BUILDNO echo '0' > ./BUILDNO
@@ -81,12 +85,12 @@ CHROOTDIR_GLOB="${CHROOTDIR}"
BUILDDIR_GLOB="${BUILDDIR}" BUILDDIR_GLOB="${BUILDDIR}"
# Set the version. # Set the version.
VERSION="$(git describe --abbrev=0 --tags)-$(git rev-parse --short --verify HEAD)" BUILDVERSION="$(git describe --abbrev=0 --tags)-$(git rev-parse --short --verify HEAD)"
BUILD="$(cat BUILDNO)" BUILD="$(cat BUILDNO)"
BUILD="$(expr ${BUILD} + 1)" BUILD="$(expr ${BUILD} + 1)"
echo ${BUILD} > ./BUILDNO echo ${BUILD} > ./BUILDNO
BUILDTIME="$(date)" BUILDTIME="$(date)"
BUILD_MACHINE="$(hostname -f)" BUILD_MACHINE="$(hostname -f) (${HOST_DIST})"
#BUILD_USERNAME="${SUDO_USER}" #BUILD_USERNAME="${SUDO_USER}"
#BUILD_USERNAME="$(who am i | awk '{print $1}')" #BUILD_USERNAME="$(who am i | awk '{print $1}')"
set +e ; logname > /dev/null 2>&1 set +e ; logname > /dev/null 2>&1
@@ -99,8 +103,8 @@ fi
set -e set -e
USERNAME_REAL="$(grep ${BUILD_USERNAME} /etc/passwd | cut -f5 -d':')" USERNAME_REAL="$(grep ${BUILD_USERNAME} /etc/passwd | cut -f5 -d':')"
cat > VERSION_INFO.txt << EOF cat > ${BASEDIR}/VERSION_INFO.txt << EOF
Version: ${VERSION} Version: ${BUILDVERSION}
Build: ${BUILD} Build: ${BUILD}
Time: ${BUILDTIME} Time: ${BUILDTIME}
Machine: ${BUILD_MACHINE} Machine: ${BUILD_MACHINE}
@@ -109,17 +113,18 @@ EOF
## FUNCTIONS ## ## FUNCTIONS ##
source lib/00-im_batman.func.sh #source ${BASEDIR}/lib/00-depcheck.func.sh ## this should be called like, VERYYYY first thing, right after sanity/safety checks and such.
source lib/01-holla_atcha_boi.func.sh source ${BASEDIR}/lib/01-mk.chroot.func.sh ## this is called automatically and only if no chroot exists
source lib/02-release_me.func.sh source ${BASEDIR}/lib/02-holla_atcha_boi.func.sh
source lib/03-facehugger.func.sh source ${BASEDIR}/lib/03-release_me.func.sh
source lib/04-chroot_wrapper.func.sh source ${BASEDIR}/lib/04-facehugger.func.sh
source lib/05-jenny_craig.func.sh source ${BASEDIR}/lib/05-chroot_wrapper.func.sh
source lib/06-centos_is_stupid.func.sh source ${BASEDIR}/lib/06-jenny_craig.func.sh
source lib/07-will_it_blend.func.sh source ${BASEDIR}/lib/07-centos_is_stupid.func.sh
source lib/08-stuffy.func.sh source ${BASEDIR}/lib/08-will_it_blend.func.sh
source lib/09-yo_dj.func.sh source ${BASEDIR}/lib/09-stuffy.func.sh
source lib/10-mentos.func.sh source ${BASEDIR}/lib/10-yo_dj.func.sh
source ${BASEDIR}/lib/11-mentos.func.sh
## The Business-End(TM) ## ## The Business-End(TM) ##
@@ -132,16 +137,6 @@ release_me 64 > /dev/null 2>&1
release_me 32 > /dev/null 2>&1 release_me 32 > /dev/null 2>&1
# do we need to perform any updates? # do we need to perform any updates?
if [[ -f "${CHROOTDIR}root.x86_64/root/chroot" || -f "${CHROOTDIR}root.i686/root/chroot" ]];
then
chroot_wrapper 64
chroot_wrapper 32
centos_is_stupid
will_it_blend 64
will_it_blend 32
yo_dj
fi
if [[ ${1} == "update" ]]; if [[ ${1} == "update" ]];
then then
mentos mentos
@@ -160,8 +155,24 @@ then
exit 0 exit 0
fi fi
# implement for future, needs tweaking- JUST rebuild the ISO.
#if [[ ${1} == "respin" ]];
#then
# if [[ "${MULTIARCH}" == "y" ]];
# then
# centos_is_stupid
# yo_dj any
# else
# centos_is_stupid
# yo_dj 64
# centos_is_stupid
# yo_dj 32
# fi
#fi
#
# or are we just building? # or are we just building?
if [[ ${1} == "build" ]] || [ -z ${1} ] || [[ ${1} == "all" ]]; if [[ ${1} == "build" || -z ${1} || ${1} == "all" ]];
then then
if [[ "${MULTIARCH}" == "y" ]]; if [[ "${MULTIARCH}" == "y" ]];
then then
@@ -183,7 +194,7 @@ fi
echo "Cleaning up some stuff leftover from the build..." echo "Cleaning up some stuff leftover from the build..."
#rm -rf ${TEMPDIR}/* #rm -rf ${TEMPDIR}/*
#rm -rf ${SRCDIR}/* #rm -rf ${SRCDIR}/*
cd ${ROOTDIR} cd ${BASEDIR}
if [[ "${GIT}" == "yes" ]]; if [[ "${GIT}" == "yes" ]];
then then
@@ -194,4 +205,4 @@ fi
# yay! we're done! # yay! we're done!
rm -f ${LOCKFILE} rm -f ${LOCKFILE}
echo "Finished successfully!" echo "Finished successfully at $(date)!"

View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
echo "Started at $(date)..."
## Import settings ## Import settings
if [ -f "build.conf" ]; if [ -f "build.conf" ];
then then
@@ -82,3 +84,5 @@ do
done done
rm -f ${LOCKFILE} rm -f ${LOCKFILE}
echo "Finished successfully at $(date)!"

674
docs/COPYING Normal file
View File

@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

33
docs/FAQ Normal file
View File

@@ -0,0 +1,33 @@
BDisk Frequently Asked(/Unasked) Questions
0.) Why does it take so long to build?
1.) Why is the generated ISO file so big?
2.) How do I find the version/release/etc. number of an ISO?
=========================================================
0.) WHY DOES IT TAKE SO LONG TO BUILD?
A: This typically occurs when you're building from within a LiveCD/LiveUSB situation, in a VM/container/etc., or on a headless server.
If this is the case, you may run into what appears to be "stalling", especially while keys are generating for the chroots.
Thankfully, there is an easy fix. You can install the "haveged"(http://www.issihosts.com/haveged/) software and run it. This will
show an immediate and non-negligible improvement for the above contexts. If you have extra power to throw at it (or are using a dedicated build box)
as well, I recommend enabling I_AM_A_RACECAR in your build.conf. BDisk will then be more aggressive with its resource consumption.
1.) WHY IS THE GENERATED ISO FILE SO BIG?
A: You may have enabled a LOT of packages in extra/packages.(32|64|both). Or you're using the default set of packages, which tries to include a LOT
of different (and in some cases, redundant) packages for widespread utilization and usage. In addition, keep in mind that BDisk builds a single ISO
that can be used on both i686 architectures AND full x86_64 architectures ("AMD64" as you may sometimes see it referenced). Because it doesn't cheat
and just use a 64-bit kernel with a 32-bit userland, it needs two different squash images on each ISO- one for 32-bit userland and one for 64-bit
userland.
2.) HOW DO I FIND THE VERSION/RELEASE/ETC. NUMBER OF AN ISO?
A: This can be found in a multitude of places. The full-size ISO file (iso/<distname>-<git tag>-<git rev number>-(32|64|any).iso) should have the
version right in the file name. If you want more detailed information (or perhaps you renamed the file), you can mount the ISO as loopback in GNU/Linux,
*BSD, or Mac OS X and check /path/to/mounted/iso/VERSION_INTO.txt. Lastly, within the runtime itself (especially handy if booting via iPXE), you can
check /root/VERSION_INFO.txt within the running live environment.

1
docs/LICENSE Symbolic link
View File

@@ -0,0 +1 @@
COPYING

View File

@@ -16,6 +16,9 @@ It should be fine over ethernet, since hardware switches are much faster and eff
Future versions, once this project has a dumping ground, will fetch highly compressed snapshotted chroot filesystems instead Future versions, once this project has a dumping ground, will fetch highly compressed snapshotted chroot filesystems instead
of dynamically building the entire install chroots (both x86_64 and i686) instead (with the option of building fresh locally, of dynamically building the entire install chroots (both x86_64 and i686) instead (with the option of building fresh locally,
disabled by default). disabled by default).
Maybe.
Till then, sorry for the inconvenience. Till then, sorry for the inconvenience.
!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!
@@ -45,7 +48,10 @@ All commands below should be issued in the root working directory of this git re
the inclusion of arbitrary files in the finished filesystem. the inclusion of arbitrary files in the finished filesystem.
-TFP/HTTP/PXE support -TFP/HTTP/PXE support
It will automatically copy over some files to tftpboot/ and http/, greatly saving some time in PXE booting. It also It will automatically copy over some files to tftpboot/ and http/, greatly saving some time in PXE booting. It also
supports, by default, booting PXE with HTTP fetching for the squashed filesystems. Say goodbye to NFS. supports, by default, booting PXE with HTTP fetching for the squashed filesystems. Say goodbye to NFS. You can even
automatically rsync over after the build, if you wish, to your webserver (see sub-point)
-Additionally, it supports iPXE if enabled in the configuration file. Please see examples/HTTP for an example of how to
lay this out and what sort of directory hierarchy is needed.
-Automatic versioning based on git tags -Automatic versioning based on git tags
## Prerequisites ## ## Prerequisites ##
@@ -53,11 +59,6 @@ All commands below should be issued in the root working directory of this git re
but also disk space for working, the finished ISO(s), etc.) but also disk space for working, the finished ISO(s), etc.)
-The following packages installed on the build host: -The following packages installed on the build host:
(NOTE: future versions will have dependencies checked automatically and installed if necessary,
depending on distro your host build machine is. the OS detection and package installation component of that isn't
done yet though. 2014.10.31)
(NOTE2: Make sure all the packages you specify are valid package names. A mistyped package name will cause the chroot creation to
break and everything else will break as a result.)
curl curl
dosfstools dosfstools
@@ -69,9 +70,24 @@ squashfs-tools
xorriso (in RPMForge repo for CentOS 7) xorriso (in RPMForge repo for CentOS 7)
xz xz
and *probably* a few others. The scripts run with set -e for the most part, so if something's missed, you'll know. and maybe a few others. The scripts run with set -e for the most part, so if something's missed, you'll know.
Oh, you will know. Oh, you will know.
If these packages are missing, they will be automatically installed. Currently, the following distros as host build systems
are supported (assumes most recent release):
Antergos
Arch
CentOS
Debian
Fedora
Gentoo
Mageia
Manjaro
openSUSE
RHEL
SUSE
Ubuntu
## Configuration ## ## Configuration ##
See extra/build.conf.sample. Copy to <PROJECT ROOT>/build.conf if you wish to modify any of the values, otherwise the defaults See extra/build.conf.sample. Copy to <PROJECT ROOT>/build.conf if you wish to modify any of the values, otherwise the defaults
@@ -102,10 +118,26 @@ Also note the following files/paths:
--/mirror.lst.sh: --/mirror.lst.sh:
Builds a fresh mirror list. Note that it is US based. Builds a fresh mirror list. Note that it is US based.
-docs:
Documentation for BDisk.
--/COPYING:
See LICENSE.
--/README:
This file.
--/LICENSE:
The license file.
--/FAQ:
Several quick questions you might have.
--/TODO:
Some features, bug fixes, etc. I have planned.
-examples:
Included recommendation for how to lay things out, etc.
--/HTTP:
Recommended layout for webserver layout if using iPXE.
-extra: -extra:
Supporting files for the base building system (mirrorlist, etc.). Supporting files for the base building system (mirrorlist, etc.).
--/${UXNAME}.png: --/${UXNAME}.png:
A 640x480 8-bit RGBA colour PNG which will be used as the background for the bootsplash (if booting via BIOS and not UEFI) L A 640x480 8-bit RGBA colour PNG which will be used as the background for the bootsplash (if booting via BIOS and not UEFI)
--/bootstrap/apacman-*.tar.xz: --/bootstrap/apacman-*.tar.xz:
An AUR-enabled package manager. Necessary for AUR support. An AUR-enabled package manager. Necessary for AUR support.
--/build.conf.sample: --/build.conf.sample:
@@ -123,6 +155,8 @@ Also note the following files/paths:
--/pre-build.d: --/pre-build.d:
Contains files injected into the system. Both 64-bit and 32-bit environments. Note: be sure to place them in hierarchical order Contains files injected into the system. Both 64-bit and 32-bit environments. Note: be sure to place them in hierarchical order
(e.g. if you wish to have a file at /usr/foo/bar, you will need to place it in <PROJECT ROOT>/extra/pre-build.d/usr/foo/bar) (e.g. if you wish to have a file at /usr/foo/bar, you will need to place it in <PROJECT ROOT>/extra/pre-build.d/usr/foo/bar)
(NOTE: Make sure all the packages you specify are valid package names. A mistyped or nonexistent package name will cause the chroot
creation to break and everything else will break as a result.)
--/pre-build.d/32: --/pre-build.d/32:
Same as above, but only for 32-bit environments. Same as above, but only for 32-bit environments.
--/pre-build.d/64: --/pre-build.d/64:
@@ -136,18 +170,20 @@ Also note the following files/paths:
Here you can find full output of the runs. They are prefixed with run's PID number, and named after the function they occur in. Here you can find full output of the runs. They are prefixed with run's PID number, and named after the function they occur in.
-overlay: -overlay:
These files are applied AFTER the initial setup of the chroots. Same hierarchy rules as extra/pre-build.d. These files are applied AFTER the initial setup of the chroots. Same hierarchy rules as extra/pre-build.d.
-README: -src:
This file. Supporting source code/source code from other projects.
--ipxe/:
For iPXE support.
--ipxe_local/:
Various patches and supporting configs to tweak the iPXE build.
-tftpboot: -tftpboot:
Files to be served via TFTP for PXE booting. This directory is wiped out during any bin/clean.sh operation. Files to be served via TFTP for PXE booting. This directory is wiped out during any bin/clean.sh operation.
-TODO:
This is just what I'm using to track stuff I want to add.
You may notice other files come and go; they're mostly there for extra goodies/used to determine other things. You may notice other files come and go; they're mostly there for extra goodies/used to determine other things.
## (Re)Building ## ## (Re)Building ##
Building must be done as root, and on an Arch x86_64 system (future versions will allow for non-Arch distros). Building must be done as root, and on a supported distro (see Prerequisites for a list).
# bin/build.sh # bin/build.sh
@@ -155,3 +191,10 @@ Yeah. It's that easy. The finished product is in iso/.
If you want more verbosity, check out the logs/ directory. If you want more verbosity, check out the logs/ directory.
## Submitting Patches ##
If you have a fix or feature you'd like added, please follow the same pull request process for the kernel
(https://www.kernel.org/doc/Documentation/SubmittingPatches) and email to bts@square-r00t.net
Alternatively, file a bug at https://bugs.square-r00t.net/index.php?project=2 with a patch attached.

View File

@@ -1,7 +1,12 @@
## General ## ## General ##
-include WinMTR, build Mac OS X MTR for dist/tools on CD -include benchmarking
-include pre-compiled DoxBox for opening LUKS parts on Windows (https://github.com/t-d-k/doxbox) -- http://sourceforge.net/projects/unixbench/
-- https://code.google.com/p/byte-unixbench/
-- https://github.com/akopytov/sysbench
-- (http://blog.due.io/2014/linode-digitalocean-and-vultr-comparison/ etc.)
-package in AUR
-base rewrite in python. pyalpm may come in handy here.
## NETWORKING ## ## NETWORKING ##
@@ -9,21 +14,44 @@
-shorewall/some other firewall? -shorewall/some other firewall?
-WISH: locked-down VPN? -WISH: locked-down VPN?
-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?
-WISH: support iPXE? would save on ISO file size (letting us create MUCH bigger squash systems), but the downside is we lose EFI support and it requires a working network configuration- which defeats the purpose of a diagnostic disc.
-SECURE SSH: https://stribika.github.io/2015/01/04/secure-secure-shell.html -SECURE SSH: https://stribika.github.io/2015/01/04/secure-secure-shell.html
-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.conf)
--iPXE's curl
--initrd's curl
## Building ## ## Building ##
-GUMMIBOOT IS GONE FROM THE REPOS. I could repackage it, but better to just see what the hell archiso's doing.
-WISH: Better logging[0] -WISH: Better logging[0]
-WISH: signing for secureboot releases (PreLoader and gummiboot handle this okay, but require manual intervention
-use manual chrooting functions ONLY if distro not detected as arch. if /usr/bin/systemd-nspawn exists, use that instead -use manual chrooting functions ONLY if distro not detected as arch. if /usr/bin/systemd-nspawn exists, use that instead
--does arch-chroot work across all distros? see https://wiki.archlinux.org/index.php/Install_bundled_32-bit_system_in_Arch64 and https://wiki.archlinux.org/index.php/Chroot --does arch-chroot work across all distros? see https://wiki.archlinux.org/index.php/Install_bundled_32-bit_system_in_Arch64 and https://wiki.archlinux.org/index.php/Chroot
--i think this might be unnecessary. testing across other major distros is necessary, but i think i can just use the chroot'd arch-chroot --i think this might be unnecessary. testing across other major distros is necessary, but i think i can just use the chroot'd arch-chroot
-tweak build.conf (and build.conf.sample) to source the pwd and set as BASEDIR ***if*** the project resources are present in pwd, otherwise throw warning -tweak build.conf (and build.conf.sample) to source the pwd and set as BASEDIR ***if*** the project resources are present in pwd, otherwise throw warning
--this is half-done;PWD is currently used by default. --this is half-done;PWD is currently used by default.
-does gummiboot? loader? wtfever it's called support splash backgrounds? can i implement that differently somehow? -does gummiboot? loader? wtfever it's called support splash backgrounds? can i implement that differently somehow?
-Host-specific chroot customizations (i.e. -J in <chroot>/etc/makepkg.conf --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.)
-incorporate iPXE tweaks:
--http://ipxe.org/crypto
--http://ipxe.org/cmd/imgtrust
--http://ipxe.org/cmd/imgverify
--enable use of custom CA/self-signed certs for HTTPS etc. DONE, partially. need to incorporate codesign certs/keys. routines, conf variables
-enable mirror= kernel commandline.
--if mirror_(NAME) is present, use that as repo name.
--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"
-iPXE background support. sed -rf "${BASEDIR}/src/ipxe_local/script.sed" ${SRCDIR}/ipxe/src/config/general.h ; sed -rf "${BASEDIR}/src/ipxe_local/script2.sed" ${SRCDIR}/ipxe/src/config/console.h
--note that iPXE VESAFB console is not (yet) supported in EFI, so this is on hold.
## Split into Separate Tools 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)
--curl -s https://raw.githubusercontent.com/t-d-k/LibreCrypt/master/README.md | egrep 'InstallLibreCrypt_v[A-Za-z0-9\.]*.exe' | cut -f2 -d'"'
__________________________________________________________ __________________________________________________________
FOOTNOTES: FOOTNOTES:

9
examples/HTTP/boot.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
print '#!ipxe
cpuid --ext 29 && set bit_type 64 || set bit_type 32
initrd example.${bit_type}.img
kernel example.${bit_type}.kern initrd=example.${bit_type}.img ip=:::::eth0:dhcp archiso_http_srv=http://domain.tld/path/to/squashes/ archisobasedir=EXAMPLE archisolabel=EXAMPLE checksum=y
boot
'
?>

View File

@@ -0,0 +1 @@
NOT A REAL INITRD IMAGE. REPLACE WITH ACTUAL INITRD.

View File

@@ -0,0 +1 @@
NOT A REAL KERNEL FILE. REPLACE WITH ACTUAL KERNEL

View File

@@ -0,0 +1 @@
NOT A REAL INITRD IMAGE. REPLACE WITH ACTUAL INITRD.

View File

@@ -0,0 +1 @@
NOT A REAL KERNEL FILE. REPLACE WITH ACTUAL KERNEL

View File

@@ -0,0 +1 @@
c18bde6e20c195bfb0a018b5c13dc420 airootfs.sfs

View File

@@ -0,0 +1 @@
NOT A REAL SQUASHED FILESYSTEM FILE. REPLACE WITH ACTUAL SQUASHED FILESYSTEM

View File

@@ -0,0 +1 @@
ada655a13f53702b3fe13cae001ab14f741e10c2bb83869048d4c18e74111c12 airootfs.sfs

View File

@@ -0,0 +1 @@
c18bde6e20c195bfb0a018b5c13dc420 airootfs.sfs

View File

@@ -0,0 +1 @@
NOT A REAL SQUASHED FILESYSTEM FILE. REPLACE WITH ACTUAL SQUASHED FILESYSTEM

View File

@@ -0,0 +1 @@
ada655a13f53702b3fe13cae001ab14f741e10c2bb83869048d4c18e74111c12 airootfs.sfs

Binary file not shown.

View File

@@ -30,7 +30,7 @@ BASEDIR="$(pwd)"
ISODIR="${BASEDIR}/iso" ISODIR="${BASEDIR}/iso"
# Where source code is kept. # Where source code is kept.
SRCDIR="${BASEDIR}/src" SRCDIR="${BASEDIR}/extrasrc"
# Where we mount for chroots etc. # Where we mount for chroots etc.
MOUNTPT="/mnt/${UXNAME}" MOUNTPT="/mnt/${UXNAME}"
@@ -57,7 +57,50 @@ TFTPGRP="root"
# (and thus doesn't fit on a normal CD. Still fits on DVDs and USBs though!) # (and thus doesn't fit on a normal CD. Still fits on DVDs and USBs though!)
MULTIARCH="yes" MULTIARCH="yes"
# set to "yes" to enable pushing new changes to a git repo/committing to a local repo # If you would like to build an iPXE-enabled *mini* ISO *in addition to* the ful ISO,
# set this to "yes". Otherwise, just build the full ISO.
BUILDMINI="no"
# What URI should iPXE's EMBED script use?
# Only used if BUILDMINI is set to yes.
# DO NOT USE A ',' (comma); instead, replace it with:
# %%COMMA%%
# If you require HTTP BASIC Authentication or HTTP Digest Authentication (untested), you can
# format it via the following:
# https://user:password@domain.tld/page.php
# This currently does not work for HTTPS with self-signed certificates.
IPXE_URI="https://bdisk.square-r00t.net"
# Path to the (root) CA certificate file (in PEM/X509 format) iPXE should use.
# If one is not specified, one will be generated.
# Only used if BUILDMINI is set to yes.
# Please properly escape any spaces or other funky characters.
# Note that you can use your own CA to sign existing certs. See http://ipxe.org/crypto for
# more info. This is handy if you run a third-party/"Trusted" root-CA-signed certificate
# for the HTTPS target.
# Requires IPXE_SSL_CAKEY if specified.
IPXE_SSL_CA=""
# Path to the (root) CA key file (in PEM/X509 format) iPXE should use.
# If one is not specified, one will be generated.
# Only used if BUILDMINI is set to yes.
# Please properly escape any spaces or other funky characters.
# Requires IPXE_SSL_CA if specified.
IPXE_SSL_CAKEY=""
# Path to the CLIENT certificate (in PEM/X509). If one is not specified, one will be generated.
# Only used if BUILDMINI is set to yes.
# Please properly escape any spaces or other funky characters.
# Requires IPXE_SSL_KEY if specified.
IPXE_SSL_CRT=""
# Path to the CLIENT key (in PEM/X509). If one is not specified, one will be generated.
# Only used if BUILDMINI is set to yes.
# Please properly escape any spaces or other funky characters.
# Requires IPXE_SSL_CRT if specified.
IPXE_SSL_KEY=""
# Set to "yes" to enable pushing new changes to a git repo/committing to a local repo
GIT="no" GIT="no"
# If this is set, use rsync to copy the http and iso files. This is the rsync destination host. # If this is set, use rsync to copy the http and iso files. This is the rsync destination host.
@@ -115,31 +158,33 @@ I_AM_A_RACECAR="no"
# ________________________________________________________________________________________________ # ________________________________________________________________________________________________
## RECOMMENDED DEFALTS ## ## RECOMMENDED DEFALTS ##
# The following shoult not be changed unless you are ABSOLUTELY, 100% SURE and COMPLETELY POSITIVE # The following should not be changed unless you are ABSOLUTELY, 100% SURE and COMPLETELY POSITIVE
# about what you are doing!!! # about what you are doing!!!
# Legacy support. # This can be used to override automatic distro-detection.
ROOTDIR="${BASEDIR}" # If you DO set this, be sure that you have a matching profile in
# ${BASEDIR}/lib/prereqs/<Distro>/meta !!
HOST_DIST=""
# This used to be defined statically (e.g. CHROOTDIR="${ROOTDIR}/chroot"), # This used to be defined statically, but is now dynamically appended. Please don't alter this
# but is now dynamically appended. Please don't alter this unless you renamed the chroot directory paths. # unless you renamed the chroot directory paths.
CHROOTDIR="${BASEDIR}/" CHROOTDIR="${BASEDIR}/"
CHROOTDIR32="${CHROOTDIR}root.i686" CHROOTDIR32="${CHROOTDIR}root.i686"
CHROOTDIR64="${CHROOTDIR}root.x86_64" CHROOTDIR64="${CHROOTDIR}root.x86_64"
# This is a directory we use for staging. It definitely should not be checked into git. # This is a directory we use for staging. It definitely should not be checked into git.
# It used to be defined statically (e.g. BUILDDIR="${ROOTDIR}/build"), # It used to be defined statically (e.g. BUILDDIR="${BASEDIR}/build"),
# but is now dynamically appended. Please don't alter this unless you renamed the chroot directory paths. # but is now dynamically appended. Please don't alter this unless you renamed the chroot directory paths.
BUILDDIR="${BASEDIR}/build" BUILDDIR="${BASEDIR}/build"
# More staging. # More staging.
TEMPDIR="${ROOTDIR}/temp" TEMPDIR="${BASEDIR}/temp"
# This is where we stage the boot files. # This is where we stage the boot files.
ARCHBOOT="${TEMPDIR}/${DISTNAME}" ARCHBOOT="${TEMPDIR}/${DISTNAME}"
# Lockfile for checking for concurrent/failed builds # Lockfile for checking for concurrent/failed builds
LOCKFILE="${ROOTDIR}/lockfile.lck" LOCKFILE="${BASEDIR}/lockfile.lck"
## VARIABLE PROCESSING ## ## VARIABLE PROCESSING ##
@@ -151,7 +196,6 @@ if [ -z "${MULTIARCH}" ];
then then
MULTIARCH="y" MULTIARCH="y"
fi fi
MULTIARCH=${MULTIARCH:0:1} MULTIARCH=${MULTIARCH:0:1}
MULTIARCH=$(echo ${MULTIARCH} | tr [[:upper:]] [[:lower:]]) MULTIARCH=$(echo ${MULTIARCH} | tr [[:upper:]] [[:lower:]])
@@ -160,6 +204,13 @@ if [ -z "${I_AM_A_RACECAR}" ];
then then
I_AM_A_RACECAR="n" I_AM_A_RACECAR="n"
fi fi
I_AM_A_RACECAR=${I_AM_A_RACECAR:0:1} I_AM_A_RACECAR=${I_AM_A_RACECAR:0:1}
I_AM_A_RACECAR=$(echo ${I_AM_A_RACECAR} | tr [[:upper:]] [[:lower:]]) I_AM_A_RACECAR=$(echo ${I_AM_A_RACECAR} | tr [[:upper:]] [[:lower:]])
# BUILD MINI?
if [ -z "${BUILDMINI}" ];
then
BUILDMINI="n"
fi
BUILDMINI=${BUILDMINI:0:1}
BUILDMINI=$(echo ${BUILDMINI} | tr [[:upper:]] [[:lower:]])

3
extra/external/SMC_DumpKey/README vendored Normal file
View File

@@ -0,0 +1,3 @@
taken with graces to http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/
Needs to be compiled on linux with gcc, and only runs on genuine Apple hardware (as it polls the SMC chip for the given value)

193
extra/external/SMC_DumpKey/SmcDumpKey.c vendored Normal file
View File

@@ -0,0 +1,193 @@
/*
* prints out 4-character name of the SMC key at given index position;
*
* by Gabriel L. Somlo <somlo@cmu.edu>, Summer 2014
*
* Compile with: gcc -O2 -o SmcDumpKey SmcDumpKey.c -Wall
*
* You probably want to "modprobe -r applesmc" before running this...
*
* Code bits and pieces shamelessly ripped from the linux kernel driver
* (drivers/hwmon/applesmc.c by N. Boichat and H. Rydberg)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License v2 as published by the
* Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <limits.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include <sys/io.h>
#include <linux/byteorder/little_endian.h>
#define APPLESMC_START 0x300
#define APPLESMC_RANGE 0x20
#define APPLESMC_DATA_PORT (APPLESMC_START + 0x00)
#define APPLESMC_CMD_PORT (APPLESMC_START + 0x04)
#define APPLESMC_READ_CMD 0x10
#define APPLESMC_GET_KEY_BY_INDEX_CMD 0x12
#define APPLESMC_GET_KEY_TYPE_CMD 0x13
/* wait up to 128 ms for a status change. */
#define APPLESMC_MIN_WAIT 0x0010
#define APPLESMC_RETRY_WAIT 0x0100
#define APPLESMC_MAX_WAIT 0x20000
#define APPLESMC_KEY_NAME_LEN 4
#define APPLESMC_KEY_TYPE_LEN 4
typedef struct key_type {
uint8_t data_len;
uint8_t data_type[APPLESMC_KEY_TYPE_LEN];
uint8_t flags;
} __attribute__((packed)) key_type;
/* wait_read - Wait for a byte to appear on SMC port. */
static int
wait_read(void)
{
uint8_t status;
int us;
for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) {
usleep(us);
status = inb(APPLESMC_CMD_PORT);
/* read: wait for smc to settle */
if (status & 0x01)
return 0;
}
fprintf(stderr, "wait_read() fail: 0x%02x\n", status);
return -1;
}
/*send_byte - Write to SMC port, retrying when necessary. */
static int
send_byte(uint8_t cmd, unsigned short port)
{
uint8_t status;
int us;
outb(cmd, port);
for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) {
usleep(us);
status = inb(APPLESMC_CMD_PORT);
/* write: wait for smc to settle */
if (status & 0x02)
continue;
/* ready: cmd accepted, return */
if (status & 0x04)
return 0;
/* timeout: give up */
if (us << 1 == APPLESMC_MAX_WAIT)
break;
/* busy: long wait and resend */
usleep(APPLESMC_RETRY_WAIT);
outb(cmd, port);
}
fprintf(stderr,
"send_byte(0x%02x, 0x%04x) fail: 0x%02x\n", cmd, port, status);
return -1;
}
static int
send_argument(const uint8_t *key)
{
int i;
for (i = 0; i < APPLESMC_KEY_NAME_LEN; i++)
if (send_byte(key[i], APPLESMC_DATA_PORT))
return -1;
return 0;
}
static int
read_smc(uint8_t cmd, const uint8_t *key, uint8_t *buf, uint8_t len)
{
int i;
if (send_byte(cmd, APPLESMC_CMD_PORT) || send_argument(key)) {
fprintf(stderr, "%.4s: read arg fail\n", key);
return -1;
}
if (send_byte(len, APPLESMC_DATA_PORT)) {
fprintf(stderr, "%.4s: read len fail\n", key);
return -1;
}
for (i = 0; i < len; i++) {
if (wait_read()) {
fprintf(stderr, "%.4s: read data[%d] fail\n", key, i);
return -1;
}
buf[i] = inb(APPLESMC_DATA_PORT);
}
return 0;
}
int
main(int argc, char **argv)
{
key_type kt;
uint8_t data_buf[UCHAR_MAX];
uint8_t i;
if (argc != 2 || strlen(argv[1]) != APPLESMC_KEY_NAME_LEN) {
fprintf(stderr, "\nUsage: %s <4-char-key-name>\n\n", argv[0]);
return -1;
}
if (ioperm(APPLESMC_START, APPLESMC_RANGE, 1) != 0) {
perror("ioperm failed");
return -2;
}
if (read_smc(APPLESMC_GET_KEY_TYPE_CMD,
(uint8_t *)argv[1], (uint8_t *)&kt, sizeof(kt)) != 0) {
fprintf(stderr, "\nread_smc get_key_type error\n\n");
return -3;
}
printf(" type=\"");
for (i = 0; i < APPLESMC_KEY_TYPE_LEN; i++)
printf(isprint(kt.data_type[i]) ? "%c" : "\\x%02x",
(uint8_t)kt.data_type[i]);
printf("\" length=%d flags=%x\n", kt.data_len, kt.flags);
if (read_smc(APPLESMC_READ_CMD,
(uint8_t *)argv[1], data_buf, kt.data_len) != 0) {
fprintf(stderr, "\nread_smc get_key_data error\n\n");
return -4;
}
printf(" data=\"");
for (i = 0; i < kt.data_len; i++)
printf(isprint(data_buf[i]) ? "%c" : "\\x%02x",
(uint8_t)data_buf[i]);
printf("\"\n");
return 0;
}

View File

@@ -1,7 +1,7 @@
# Server list generated by rankmirrors on 2015-02-26 # Server list generated by rankmirrors on 2016-07-09
Server = http://mirror.us.leaseweb.net/archlinux/$repo/os/$arch
Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch
Server = http://mirror.umd.edu/archlinux/$repo/os/$arch Server = http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch
Server = http://mirror.vtti.vt.edu/archlinux/$repo/os/$arch
Server = http://mirror.jmu.edu/pub/archlinux/$repo/os/$arch
Server = http://mirror.es.its.nyu.edu/archlinux/$repo/os/$arch
Server = http://mirrors.rutgers.edu/archlinux/$repo/os/$arch Server = http://mirrors.rutgers.edu/archlinux/$repo/os/$arch
Server = http://mirror.jmu.edu/pub/archlinux/$repo/os/$arch
Server = http://arch.mirrors.ionfish.org/$repo/os/$arch

View File

@@ -2,27 +2,30 @@
# We need to install all X drivers. # We need to install all X drivers.
abs abs
acpi acpi
acpidump #acpidump
afflib #afflib
aircrack-ng aircrack-ng
apr apr
apr-util apr-util
arch-install-scripts
archiso
arj arj
asciidoc asciidoc
atop atop
autopsy autopsy
autossh autossh
backuppc
#bacula ## TODO: grab all the bacula packages in here
beep beep
bin86 bin86
bind-tools
binutils binutils
bluez-utils bluez-utils
bonnie++ bonnie++
boxbackup-client
boxbackup-server
bozocrack-git bozocrack-git
bridge-utils bridge-utils
burp-backup-git
btrfs-progs btrfs-progs
bzip2
cabextract cabextract
cdrtools cdrtools
cdw cdw
@@ -32,17 +35,17 @@ chntpw
cifs-utils cifs-utils
ckermit ckermit
clamav clamav
clonezilla
cmospwd cmospwd
colordiff colordiff
coreutils
cowpatty cowpatty
cpio cpio
cpuburn cpuburn
cpupower cpupower
crackpkcs12 crackpkcs12
cronie cryptcat
#cryptcat
cryptsetup cryptsetup
csync2
customizepkg-scripting customizepkg-scripting
dar dar
dcfldd dcfldd
@@ -51,18 +54,14 @@ dd_rescue
dd_rhelp dd_rhelp
debianutils debianutils
debootstrap debootstrap
dhclient #dialog #giving a weird dependency issue
dhcp
dhcpcd
dialog
diffutils diffutils
djohn djohn
dmidecode dmidecode
dnssec-anchors dnssec-anchors
dnstracer dnstracer
dnsutils #dnsutils #replaced by bind-tools, https://www.archlinux.org/packages/extra/x86_64/bind-tools/
dos2unix dos2unix
dosfstools
dropbear dropbear
dstat dstat
dump dump
@@ -72,8 +71,6 @@ dvd+rw-tools
e2fsprogs e2fsprogs
ecryptfs-utils ecryptfs-utils
ed ed
efibootmgr
efivar
elfutils elfutils
#elilo-efi #elilo-efi
elinks elinks
@@ -109,8 +106,8 @@ gpm
gptfdisk gptfdisk
gst-libav gst-libav
gst-plugins-ugly gst-plugins-ugly
gummiboot
hashcat hashcat
hashdeep
hddtemp hddtemp
hdparm hdparm
hexcurse hexcurse
@@ -130,10 +127,9 @@ iotop
iozone iozone
ipcalc ipcalc
iperf iperf
iproute2 iperf3
ipsec-tools ipsec-tools
iptraf-ng iptraf-ng
iputils
irssi irssi
iso-codes iso-codes
isomaster isomaster
@@ -143,43 +139,51 @@ jfsutils
john john
keyutils keyutils
kismet-allplugins kismet-allplugins
libisoburn
lftp lftp
links links
localepurge #logkeys-git # requires a /dev/input, which apparently isn't included in the chroots
#logkeys
logkeys-keymaps
lm_sensors lm_sensors
lrzsz lrzsz
lshw lshw
lsiutil #lsiutil # giving intermittent errors when trying to fetch source
lsof lsof
lsscsi lsscsi
lxde #lxde # apacman currently doesn't like package groups, so...
gpicview
lxappearance
lxappearance-obconf
lxde-common
lxde-icon-theme
lxdm
lxinput
lxlauncher
lxmusic
lxpanel
lxrandr
lxsession
lxtask
lxterminal
openbox
pcmanfm
# end lxde
lynx lynx
lz4
#lzip #lzip
lzo
lzop
macchanger macchanger
magicrescue #magicrescue # no longer maintained, upstream down
mbr mbr
mbuffer mbuffer
mcelog mcelog
md5deep
mdadm mdadm
mdcrack mdcrack
megaraid-cli # superseded by storcli
#megaraid-cli
memtester memtester
mfoc mfoc
minicom minicom
mkinitcpio-nfs-utils #mondo # mindi-busybox fails to build 09.23.2016
ms-sys
mtd-utils mtd-utils
mtools
mtr mtr
mtree mtree
#mtx
multipath-tools multipath-tools
myrescue myrescue
nbd nbd
@@ -187,11 +191,8 @@ ncftp
ncompress ncompress
ncrack ncrack
net-snmp net-snmp
net-tools
netctl
netselect netselect
nettle nettle
networkmanager
networkmanager-pptp networkmanager-pptp
nginx-devel nginx-devel
ngrep ngrep
@@ -199,16 +200,18 @@ nmap
nmon nmon
ntfs-3g ntfs-3g
ntfsfixboot ntfsfixboot
nwipe #nwipe #broken since they moved to github(?)
nwipe-git
obnam
open-iscsi open-iscsi
openipmi openipmi
openssh
openvpn
ophcrack ophcrack
os-prober os-prober
p7zip p7zip
pack pack
par2cmdline par2cmdline
partclone
partclone-utils
parted parted
partimage partimage
pax-utils pax-utils
@@ -220,20 +223,18 @@ php
php-fpm php-fpm
php-gd php-gd
php-mcrypt php-mcrypt
#phrasendrescher phrasendrescher
pigz pigz
pkgfile pkgfile
pkgtools pkgtools
ppp ppp
pptpclient pptpclient
prebootloader
procinfo-ng procinfo-ng
procps-ng procps-ng
progsreiserfs progsreiserfs
psmisc psmisc
pv
pwgen pwgen
pxz pixz
pyrit pyrit
python2-gnuplot python2-gnuplot
python2-pyx python2-pyx
@@ -241,7 +242,7 @@ rarcrack
rcracki_mt rcracki_mt
rdiff-backup rdiff-backup
read-edid read-edid
reaver reaver-wps-fork-t6x-git
rename rename
rfkill rfkill
rp-pppoe rp-pppoe
@@ -249,37 +250,31 @@ rpcbind
rpmextract rpmextract
rp-pppoe rp-pppoe
rsnapshot rsnapshot
rsync
rygel rygel
safecopy safecopy
samba samba
scalpel-git
scapy scapy
screen screen
scrounge-ntfs scrounge-ntfs
scrub scrub
scsiadd scsiadd
sdparm sdparm
sed
setserial setserial
sg3_utils sg3_utils
sharutils sharutils
shorewall
sipcalc sipcalc
sipcrack sipcrack
smartmontools smartmontools
smbclient smbclient
s-nail s-nail
socat socat
squashfs3-tools #star ## do people even USE tape backups anymore?
squashfs-tools storcli
#star
strace strace
stress stress
sucrack sucrack
sudo
symlinks symlinks
sysfsutils
syslinux
sysstat sysstat
tcpdump tcpdump
tcpslice tcpslice
@@ -290,14 +285,14 @@ thin-provisioning-tools
thttpd thttpd
tmon tmon
tmux tmux
traceroute
tre tre
truecrack-svn truecrack-git
truecrypt truecrypt
tor tor
udftools udftools
#udpcast #udpcast
unace unace
unison
unrar unrar
unshield unshield
unzip unzip
@@ -316,9 +311,9 @@ vncrack
vnstat vnstat
vpnc vpnc
weplab weplab
whdd #whdd #currently depends on dialog, which is broke as shit
whois whois
wifite wifite-mod-pixiewps-git
wipe wipe
wireshark-cli wireshark-cli
wpscrack wpscrack
@@ -330,6 +325,8 @@ xfsprogs
xmlto xmlto
xorg xorg
xorg-drivers xorg-drivers
xorg-xinit
xterm
zerofree zerofree
zip zip
zsh zsh

View File

@@ -37,7 +37,8 @@ VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring # By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages. # trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional #SigLevel = Required DatabaseOptional #RE-ENABLE ME WHEN A NEW SNAPSHOT IS RELEASED WITH FIXED GPG
SigLevel = Never
LocalFileSigLevel = Optional LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required #RemoteFileSigLevel = Required

View File

@@ -37,7 +37,8 @@ VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring # By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages. # trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional #SigLevel = Required DatabaseOptional #RE-ENABLE ME WHEN A NEW SNAPSHOT IS RELEASED WITH FIXED GPG
SigLevel = Never
LocalFileSigLevel = Optional LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required #RemoteFileSigLevel = Required

View File

@@ -0,0 +1,58 @@
#
# /etc/apacman.conf
#
# See the apacman.conf(5) manpage for options
#
# GENERAL OPTIONS
#
#auronly=1
#buildonly=1
#cachevcs=1
#ignorearch=1
#keepkeys=1
needed=1
#noaur=1
noconfirm=1
noedit=1
nofail=1
#preview=1
progress=1
purgebuild=1
#quiet=1
skipcache=1
#skipinteg=1
#skiptest=1
#warn=1
#
# CONFIGURATION
#
#builddir="/tmp/pkgbuild-$UID"
#tmpdir="/tmp/apacmantmp-$UID"
#makepkgconf="/etc/makepkg.conf"
#usermakepkgconf="$HOME/.makepkg.conf"
#pacmanconf="/etc/pacman.conf"
#downdir="/var/cache/pacman/pkg"
#savedir="/var/cache/apacman/pkg"
#editor="nano -w"
#pager="less -R"
#RPCURL="https://aur.archlinux.org/rpc.php?type"
#PKGURL="https://aur.archlinux.org"
#WEBURL="https://www.archlinux.org"
#ABSURL="rsync.archlinux.org"
#
# COLORIZATION
#
#COLOR1='\e[1;39m'
#COLOR2='\e[1;32m'
#COLOR3='\e[1;35m'
#COLOR4='\e[1;36m'
#COLOR5='\e[1;34m'
#COLOR6='\e[1;33m'
#COLOR7='\e[1;31m'

View File

@@ -0,0 +1,4 @@
#!/bin/bash
# original URL at sourceforge chokes out
sed -re 's@^(source=\(").*$@\1ftp://ftp.gnome.org/mirror/temp/sf2015/a/au/autopsy/autopsy/2.24/autopsy-2.24.tar.gz")@g' ${1}

View File

@@ -0,0 +1,3 @@
#!/bin/bash
sed -i -e 's/build(/package(/g' ${1}

View File

@@ -0,0 +1,3 @@
#!/bin/bash
sed -i -re 's/^(url=)\((.*)\)$/\1\2/g' ${1}

View File

@@ -0,0 +1,3 @@
#!/bin/bash
sed -i -re 's/^(url=)\((.*)\)$/\1\2/g' ${1}

View File

@@ -0,0 +1,3 @@
#!/bin/bash
sed -i -re 's/^(url=)\((.*)\)$/\1\2/g' ${1}

View File

@@ -0,0 +1,3 @@
#!/bin/bash
sed -re 's@^(source=\(").*$@\1https://github.com/kwilczynski/lsi/blob/master/lsiutil/LSIUtil_1.62.zip?raw=true")@g' ${1}

View File

@@ -0,0 +1,4 @@
#!/bin/bash
# original URL at sourceforge chokes out
sed -re 's@^(source=\(").*$@\1http://fossies.org/linux/privat/${pkgname}-${pkgver}.tar.gz")@g' ${1}

View File

@@ -0,0 +1,7 @@
#!/bin/bash
if [[ ! -f "/usr/lib/libdialog.so" ]];
then
echo "Please run the following: sudo ln -s /usr/lib/libdialog.so.1.2 /usr/lib/libdialog.so"
echo "This package will fail to build otherwise."
fi

View File

@@ -0,0 +1,3 @@
#!/bin/bash
sed -i -re "s/'any'/'i686' 'x86_64'/g" ${1}

View File

@@ -50,7 +50,7 @@ FILES=""
# usr, fsck and shutdown hooks. # usr, fsck and shutdown hooks.
#HOOKS="base udev autodetect modconf block filesystems keyboard fsck" #HOOKS="base udev autodetect modconf block filesystems keyboard fsck"
#HOOKS="base udev memdisk archiso_shutdown archiso modconf net ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd" #HOOKS="base udev memdisk archiso_shutdown archiso modconf net ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd"
HOOKS="base udev memdisk archiso_shutdown archiso-custom modconf net ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd" HOOKS="base udev memdisk archiso_shutdown archiso-custom modconf net ssh archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_http_custom archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard livecd"
# COMPRESSION # COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression # Use this to compress the initramfs image. By default, gzip compression
@@ -64,4 +64,4 @@ COMPRESSION="xz"
# COMPRESSION_OPTIONS # COMPRESSION_OPTIONS
# Additional options for the compressor # Additional options for the compressor
#COMPRESSION_OPTIONS="" COMPRESSION_OPTIONS="-9"

View File

@@ -1,7 +1,6 @@
# Server list generated by rankmirrors on 2014-11-10 Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch
Server = http://mirror.rit.edu/archlinux/$repo/os/$arch Server = http://mirrors.gigenet.com/archlinux/$repo/os/$arch
Server = http://mirror.cc.columbia.edu/pub/linux/archlinux/$repo/os/$arch Server = http://il.mirrors.linaxe.net/archlinux/$repo/os/$arch
Server = http://mirrors.acm.wpi.edu/archlinux/$repo/os/$arch Server = http://mirror.grig.io/archlinux/$repo/os/$arch
Server = http://mirror.jmu.edu/pub/archlinux/$repo/os/$arch Server = http://arch.mirrors.ionfish.org/$repo/os/$arch
Server = http://mirror.cs.pitt.edu/archlinux/$repo/os/$arch Server = http://cosmos.cites.illinois.edu/pub/archlinux/$repo/os/$arch
Server = http://mirror.vtti.vt.edu/archlinux/$repo/os/$arch

View File

@@ -0,0 +1,8 @@
# Configuration for resolvconf(8)
# See resolvconf.conf(5) for details
resolv_conf=/etc/resolv.conf
# If you run a local name server, you should uncomment the below line and
# configure your subscribers configuration files below.
#name_servers=127.0.0.1
append_nameservers='4.2.2.1 4.2.2.2 4.2.2.3'

View File

@@ -3,6 +3,6 @@
set -e set -e
apacman --noconfirm --noedit -S --needed customizepkg-scripting apacman --noconfirm --noedit -S --needed customizepkg-scripting
ln -s /usr/lib/libdialog.so.1.2 /usr/lib/libdialog.so
echo "Done." echo "Done."

View File

@@ -46,7 +46,8 @@ _mnt_sfs() {
if [[ "${copytoram}" == "y" ]]; then if [[ "${copytoram}" == "y" ]]; then
msg -n ":: Copying squashfs image to RAM..." msg -n ":: Copying squashfs image to RAM..."
if ! cp "${img}" "/run/archiso/copytoram/${img_fullname}" ; then #if ! cp "${img}" "/run/archiso/copytoram/${img_fullname}" ; then
if ! pv -pterabT "${img}" > "/run/archiso/copytoram/${img_fullname}" ; then
echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'" echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'"
launch_interactive_shell launch_interactive_shell
fi fi

View File

@@ -0,0 +1,49 @@
# vim: set ft=sh:
run_hook() {
if [[ -n "${ip}" && -n "${archiso_http_srv}" ]]; then
archiso_http_srv=$(eval echo ${archiso_http_srv})
[[ -z "${archiso_http_spc}" ]] && archiso_http_spc="75%"
mount_handler="archiso_pxe_http_mount_handler"
fi
}
# Fetch a file with CURL
#
# $1 URL
# $2 Destination directory inside httpspace/${archisobasedir}
_curl_get() {
local _url="${1}"
local _dst="${2}"
msg ":: Downloading image"
if ! curl -L -f -o "/run/archiso/httpspace/${archisobasedir}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
echo "ERROR: Downloading failed."
#echo " Falling back to interactive prompt"
#echo " You can try to fix the problem manually, log out when you are finished"
#launch_interactive_shell
sleep 4
reboot -f
fi
}
archiso_pxe_http_mount_handler () {
newroot="${1}"
msg ":: Mounting /run/archiso/httpspace (tmpfs) filesystem, size='${archiso_http_spc}'"
mkdir -p "/run/archiso/httpspace"
mount -t tmpfs -o size="${archiso_http_spc}",mode=0755 httpspace "/run/archiso/httpspace"
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sfs" "/${arch}"
if [[ "${checksum}" == "y" ]]; then
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.md5" "/${arch}"
fi
mkdir -p "/run/archiso/bootmnt"
mount -o bind /run/archiso/httpspace /run/archiso/bootmnt
archiso_mount_handler ${newroot}
}

View File

@@ -13,6 +13,7 @@ build() {
add_binary losetup add_binary losetup
add_binary mountpoint add_binary mountpoint
add_binary truncate add_binary truncate
add_binary pv
add_file /usr/lib/udev/rules.d/60-cdrom_id.rules add_file /usr/lib/udev/rules.d/60-cdrom_id.rules
add_file /usr/lib/udev/rules.d/10-dm.rules add_file /usr/lib/udev/rules.d/10-dm.rules

View File

@@ -0,0 +1,18 @@
#!/bin/bash
build() {
add_runscript
add_binary curl
add_full_dir /etc/ssl
add_full_dir /etc/ca-certificates
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via PXE and HTTP.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

93
lib/00-depcheck.func.sh Executable file
View File

@@ -0,0 +1,93 @@
#!/bin/bash
function so_check_me_out {
FUNCNAME="depcheck"
if [[ -n ${HOST_DIST} ]];
then
if [[ ! -f ${BASEDIR}/lib/prereqs/${HOST_DIST}/meta || ! -f ${BASEDIR}/lib/prereqs/${HOST_DIST}/pkgs ]];
then
echo "ERROR: You have specified ${HOST_DIST} as your host system's distro, but it is missing a meta and/or pkgs profile."
exit 1
fi
fi
set +e
if [[ -z "${HOST_DIST}" ]];
then
for dist_profile in $(find "${BASEDIR}"/lib/prereqs -type f -name 'meta');
do
source ${dist_profile}
if [[ "${SUPPORTED}" != "yes" ]];
then
continue
fi
eval "${CHECK_METHOD}" > /dev/null 2>&1
if [[ "${?}" == "0" ]];
then
export HOST_DIST="${NAME}"
echo "Detected distro as ${HOST_DIST}."
break 2
fi
done
fi
set -e
# Sanity is important.
if [[ -z "${HOST_DIST}" ]];
then
echo "ERROR: Your distro was not found/detected, or is flagged as unsupported."
exit 1
fi
# So we've validated the distro. Here, check for packages and install if necessary. maybe use an array, but it'd be better to soft-fail if one of the packages is missing.
DISTRO_DIR="${BASEDIR}/lib/prereqs/${HOST_DIST}"
META="${DISTRO_DIR}/meta"
PKGLIST="${DISTRO_DIR}/pkgs"
# And once more, just to be safe.
source ${META}
## TWEAKS GET RUN HERE.
distro_specific_tweaks
if [[ "${PRE_RUN}" != 'none' ]];
then
echo "Now updating your local package cache..."
set +e
eval "${PRE_RUN}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" != "0" ]];
then
echo "ERROR: Syncing your local package cache via ${PRE_RUN} command failed."
echo "Please ensure you are connected to the Internet/have repositories configured correctly."
exit 1
fi
set -e
fi
set +e
while read pkgname;
do
eval "${PKG_CHK}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" != "0" ]];
then
echo "Installing ${pkgname}..."
eval "${PKG_MGR}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" != "0" ]];
then
echo "ERROR: ${pkgname} was not found to be installed and we can't install it."
echo "This usually means you aren't connected to the Internet or your package repositories"
echo "are not configured correctly. Review the list of packages in ${PKGLIST} and ensure"
echo "they are all available to be installed."
exit 1
fi
fi
done < ${PKGLIST}
set -e
rm -f "${LOCKFILE}"
}
so_check_me_out

View File

@@ -1,30 +0,0 @@
function im_batman {
set +e # false errors are bad mmk
# Detect the distro and set some vars
if [ -f "/usr/bin/yum" ]; # CentOS/Redhat, etc.
then
OS_STRING='RHEL-like'
DISTRO='RHEL'
INST_CMD='yum -y install '
elif [ -f "/usr/bin/pacman" ]; # Arch, Manjaro, etc.
then
OS_STRING='Arch-like'
DISTRO='Arch'
INST_CMD='pacman -S '
elif [ -f "/usr/bin/emerge" ]; # Gentoo
then
OS_STRING='Gentoo-like'
DISTRO='Gentoo'
INST_CMD='emerge '
elif [ -f "/usr/bin/apt-get" ]; # Debian, Ubuntu (and derivatives), etc.
then
OS_STRING='Debian-like'
DISTRO="Debian"
INST_CMD='apt-get install '
else
echo 'Sorry, I cannot detect which distro you are running. Please report this along with what distro you are running. Dying now.'
exit 1
fi
set -e # and turn this back on lolz
}

View File

@@ -94,10 +94,10 @@ function mkchroot {
echo "Local: ${LOCSUM64}" echo "Local: ${LOCSUM64}"
echo "Remote: ${CKSUM64}" echo "Remote: ${CKSUM64}"
echo "Fetching fresh copy." echo "Fetching fresh copy."
curl -o latest.64.tar.gz "${RLSDIR}/${CURRLS64}" >> "${LOGFILE}.${FUNCNAME}" 2>&1 curl -o latest.64.tar.gz "${RLSDIR}/${CURRLS64}"
fi fi
else else
curl -o latest.64.tar.gz "${RLSDIR}/${CURRLS64}" >> "${LOGFILE}.${FUNCNAME}" 2>&1 curl -o latest.64.tar.gz "${RLSDIR}/${CURRLS64}"
fi fi
if [ -f "latest.32.tar.gz" ]; if [ -f "latest.32.tar.gz" ];
@@ -109,10 +109,10 @@ function mkchroot {
echo "Local: ${LOCSUM32}" echo "Local: ${LOCSUM32}"
echo "Remote: ${CKSUM32}" echo "Remote: ${CKSUM32}"
echo "Fetching fresh copy." echo "Fetching fresh copy."
curl -o latest.32.tar.gz "${RLSDIR}/${CURRLS32}" >> "${LOGFILE}.${FUNCNAME}" 2>&1 curl -o latest.32.tar.gz "${RLSDIR}/${CURRLS32}"
fi fi
else else
curl -o latest.32.tar.gz "${RLSDIR}/${CURRLS32}" >> "${LOGFILE}.${FUNCNAME}" 2>&1 curl -o latest.32.tar.gz "${RLSDIR}/${CURRLS32}"
fi fi
if [ ! -f "${CHROOTDIR32}/etc/pacman.d/gnupg/trustdb.gpg" ] || [ ! -f "${CHROOTDIR64}/etc/pacman.d/gnupg/trustdb.gpg" ]; if [ ! -f "${CHROOTDIR32}/etc/pacman.d/gnupg/trustdb.gpg" ] || [ ! -f "${CHROOTDIR64}/etc/pacman.d/gnupg/trustdb.gpg" ];
@@ -147,6 +147,7 @@ HOME_URL="https://www.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/" BUG_REPORT_URL="https://bugs.archlinux.org/"
EOF EOF
cp ${BASEDIR}/VERSION_INFO.txt ${BASEDIR}/root.${i}/.
done done
# And make it usable. # And make it usable.
@@ -154,6 +155,12 @@ EOF
for i in ${CHROOTDIR32} ${CHROOTDIR64}; for i in ${CHROOTDIR32} ${CHROOTDIR64};
do do
# Disable NetworkManager. Fuck that shit.
ln -s /dev/null ${i}/etc/systemd/system/NetworkManager.service
ln -s /dev/null ${i}/etc/systemd/system/NetworkManager-dispatcher.service
# Remove the machine-id file so it's automatically generated.
# NOTE: this kind of fucks things up presently.
#rm -f ${i}/etc/machine-id
# Prep pacman # Prep pacman
echo "Prepping ${i}. This will take a while..." echo "Prepping ${i}. This will take a while..."
echo -n "...Key initializing..." echo -n "...Key initializing..."
@@ -161,6 +168,7 @@ EOF
echo "Done." echo "Done."
echo -n "...Importing keys..." echo -n "...Importing keys..."
${CHROOTCMD} ${i}/ pacman-key --populate archlinux >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ pacman-key --populate archlinux >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${i}/ pacman-key -r 93481F6B >> "${LOGFILE}.${FUNCNAME}" 2>&1 # add developer's keys
echo "Done." echo "Done."
# Prep base building system # Prep base building system
echo -n "...Installing base packages..." echo -n "...Installing base packages..."
@@ -172,7 +180,8 @@ EOF
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
echo "Done." echo "Done."
echo -n "...Upgrading any outdated packages..." echo -n "...Upgrading any outdated packages..."
${CHROOTCMD} ${i}/ pacman -Syyu --noconfirm >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ pacman -Syyu --force --noconfirm >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${i}/ pacman-key --refresh-keys >> "${LOGFILE}.${FUNCNAME}" 2>&1
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
echo "Done. Finishing/cleaning up..." echo "Done. Finishing/cleaning up..."
${CHROOTCMD} ${i}/ pacman -S --noconfirm --needed base-devel >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ pacman -S --noconfirm --needed base-devel >> "${LOGFILE}.${FUNCNAME}" 2>&1
@@ -188,7 +197,8 @@ EOF
#${CHROOTCMD} ${i} "pacman --noconfirm -U /var/tmp/pkg/apacman.tar.xz" >> "${LOGFILE}.${FUNCNAME}" 2>&1 #${CHROOTCMD} ${i} "pacman --noconfirm -U /var/tmp/pkg/apacman.tar.xz" >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${i} bash -c "pacman --noconfirm -U /var/tmp/pkg/apacman.tar.xz && mkdir /var/tmp/apacman && chmod 0750 /var/tmp/apacman && chown root:aurbuild /var/tmp/apacman " >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i} bash -c "pacman --noconfirm -U /var/tmp/pkg/apacman.tar.xz && mkdir /var/tmp/apacman && chmod 0750 /var/tmp/apacman && chown root:aurbuild /var/tmp/apacman " >> "${LOGFILE}.${FUNCNAME}" 2>&1
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
${CHROOTCMD} ${i} bash -c "apacman -S --noconfirm --noedit --skipinteg -S apacman-deps expac" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i} bash -c "apacman -S --noconfirm --noedit --skipinteg -S apacman apacman-deps expac" >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${i} bash -c "apacman --gendb" >> "${LOGFILE}.${FUNCNAME}" 2>&1
#rm -rf ${i}/var/tmp/pkg #rm -rf ${i}/var/tmp/pkg
#${CHROOTCMD} ${i}/ pacman -S --noconfirm --needed yaourt >> "${LOGFILE}.${FUNCNAME}" 2>&1 #${CHROOTCMD} ${i}/ pacman -S --noconfirm --needed yaourt >> "${LOGFILE}.${FUNCNAME}" 2>&1
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
@@ -206,38 +216,76 @@ EOF
sed -i -e "/^[[:space:]]*#*MAKEFLAGS=.*$/aMAKEFLAGS=\"-j${CPUCNT}\"" ${CHROOTDIR32}/etc/makepkg.conf sed -i -e "/^[[:space:]]*#*MAKEFLAGS=.*$/aMAKEFLAGS=\"-j${CPUCNT}\"" ${CHROOTDIR32}/etc/makepkg.conf
fi fi
# preprocessing # Baseline packages
sed -i -e '/base-devel/d ; /multilib-devel/d' ${BASEDIR}/extra/packages.* echo "Installing baseline packages..."
PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/lib/prereqs/iso.pkgs.lst | tr '\n' ' ')
for i in ${CHROOTDIR32} ${CHROOTDIR64};
do
set +e
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
set -e
${CHROOTCMD} ${i}/ bash -c "yes '' | apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${i}/ "apacman --gendb" >> "${LOGFILE}.${FUNCNAME}" 2>&1
set +e
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
set -e
done
# 32-bit
PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/lib/prereqs/iso.pkgs.lst.32 | tr '\n' ' ')
if [ -n "${PKGLIST}" ];
then
${CHROOTCMD} ${CHROOTDIR32}/ /usr/bin/bash -c "apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${CHROOTDIR32}/ "apacman --gendb" >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
set +e
for x in $(find ${CHROOTDIR32}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done
set -e
# 64-bit
PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/lib/prereqs/iso.pkgs.lst.64 | tr '\n' ' ')
if [ -n "${PKGLIST}" ];
then
${CHROOTCMD} ${CHROOTDIR64}/ /usr/bin/bash -c "apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${CHROOTDIR64}/ "apacman --gendb" >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
set +e
for x in $(find ${CHROOTDIR64}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done
set -e
# extra packages
sed -i -e '/base-devel/d ; /multilib-devel/d' ${BASEDIR}/extra/packages.{both,64}
# both # both
echo "Installing common packages..." echo "Installing extra common packages..."
PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.both | tr '\n' ' ') PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.both | tr '\n' ' ')
for i in ${CHROOTDIR32} ${CHROOTDIR64}; for i in ${CHROOTDIR32} ${CHROOTDIR64};
do do
echo "Running post-build tasks in ${i}..." echo "Running post-build tasks in ${i}..."
chmod 700 ${i}/root/post-build.sh
${CHROOTCMD} ${i}/ "/root/post-build.sh" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ "/root/post-build.sh" >> "${LOGFILE}.${FUNCNAME}" 2>&1
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
set +e set +e
${CHROOTCMD} ${i}/ /usr/bin/bash -c "apacman --noconfirm --noedit --skipinteg -S --needed linux" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ /usr/bin/bash -c "apacman --noconfirm --noedit --skipinteg -S --needed linux" >> "${LOGFILE}.${FUNCNAME}" 2>&1
cp -a ${i}/boot/vmlinuz-linux ${i}/boot/vmlinuz-linux-${PNAME} ${CHROOTCMD} ${i}/ "apacman --gendb" >> "${LOGFILE}.${FUNCNAME}" 2>&1
cp -a ${i}/boot/initramfs-linux.img ${i}/boot/initramfs-linux-${PNAME}.img cp -a ${i}/boot/vmlinuz-linux ${i}/boot/vmlinuz-linux-${DISTNAME}
cp -af ${i}/boot/initramfs-linux.img ${i}/boot/initramfs-linux-${DISTNAME}.img
set -e set -e
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
# Uncomment if you wish to use the mkpasswd binary from within the chroot... # Uncomment if you wish to use the mkpasswd binary from within the chroot...
#${CHROOTCMD} ${i}/ bash -c "apacman --noconfirm --noedit --skipinteg -S --needed debian-whois-mkpasswd" >> "${LOGFILE}.${FUNCNAME}" 2>&1 #${CHROOTCMD} ${i}/ bash -c "apacman --noconfirm --noedit --skipinteg -S --needed debian-whois-mkpasswd" >> "${LOGFILE}.${FUNCNAME}" 2>&1
#for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done #for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
echo -n "Regular packages..." echo -n "Regular packages..."
set +e
${CHROOTCMD} ${i}/ bash -c "yes '' | apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ bash -c "yes '' | apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${i}/ "apacman --gendb" >> "${LOGFILE}.${FUNCNAME}" 2>&1
set +e
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%%.pacorig} ; done
# User creation
set -e set -e
# User creation
echo -n "...Creating ${REGUSR} user..." echo -n "...Creating ${REGUSR} user..."
${CHROOTCMD} ${i}/ useradd -m -s /bin/bash -c "Default user" ${REGUSR} >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ useradd -m -s /bin/bash -c "Default user" ${REGUSR} >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${i}/ usermod -aG users,games,video,audio ${REGUSR} >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ usermod -aG users,games,video,audio ${REGUSR} >> "${LOGFILE}.${FUNCNAME}" 2>&1
${CHROOTCMD} ${i}/ passwd -d ${REGUSR} >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ passwd -d ${REGUSR} >> "${LOGFILE}.${FUNCNAME}" 2>&1
mkdir -p ${i}/etc/sudoers.d ; chmod 750 ${i}/etc/sudoers.d mkdir -p ${i}/etc/sudoers.d ; chmod 750 ${i}/etc/sudoers.d
echo "${REGUSR} ALL=(ALL) ALL" >> ${i}/etc/sudoers.d/${REGUSR} printf "Defaults:${REGUSR} \041lecture\n${REGUSR} ALL=(ALL) ALL\n" >> ${i}/etc/sudoers.d/${REGUSR}
if [ -n "${REGUSR_PASS}" ]; if [[ -n "${REGUSR_PASS}" && "${REGUSR_PASS}" != '{[BLANK]}' ]];
then then
#${CHROOTCMD} ${i}/ "/usr/bin/echo ${REGUSR}:${REGUSR_PASS} | chpasswd -e" >> "${LOGFILE}.${FUNCNAME}" 2>&1 #${CHROOTCMD} ${i}/ "/usr/bin/echo ${REGUSR}:${REGUSR_PASS} | chpasswd -e" >> "${LOGFILE}.${FUNCNAME}" 2>&1
sed -i -e "s|^${REGUSR}::|${REGUSR}:${REGUSR_PASS}:|g" ${i}/etc/shadow sed -i -e "s|^${REGUSR}::|${REGUSR}:${REGUSR_PASS}:|g" ${i}/etc/shadow
@@ -247,7 +295,7 @@ EOF
else else
${CHROOTCMD} ${i}/ usermod -L ${REGUSR} >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ usermod -L ${REGUSR} >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi fi
if [ -n "${ROOT_PASS}" ]; if [[ -n "${ROOT_PASS}" && "${ROOT_PASS}" != '{[BLANK]}' ]];
then then
#${CHROOTCMD} ${i}/ "/usr/bin/echo root:${ROOT_PASS} | chpasswd -e" >> "${LOGFILE}.${FUNCNAME}" 2>&1 #${CHROOTCMD} ${i}/ "/usr/bin/echo root:${ROOT_PASS} | chpasswd -e" >> "${LOGFILE}.${FUNCNAME}" 2>&1
sed -i -e "s|^root::|root:${ROOT_PASS}:|g" ${i}/etc/shadow sed -i -e "s|^root::|root:${ROOT_PASS}:|g" ${i}/etc/shadow
@@ -267,12 +315,12 @@ EOF
set +e set +e
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done
${CHROOTCMD} ${i}/ /usr/bin/bash -c "mkinitcpio -p linux" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ /usr/bin/bash -c "mkinitcpio -p linux" >> "${LOGFILE}.${FUNCNAME}" 2>&1
cp -a ${i}/boot/initramfs-linux.img ${i}/boot/initramfs-linux-${PNAME}.img cp -af ${i}/boot/initramfs-linux.img ${i}/boot/initramfs-linux-${DISTNAME}.img
set -e set -e
done done
# 32-bit # 32-bit
echo "Installing packages for 32-bit..." echo "Installing extra packages for 32-bit..."
PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.32 | tr '\n' ' ') PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.32 | tr '\n' ' ')
if [ -n "${PKGLIST}" ]; if [ -n "${PKGLIST}" ];
then then
@@ -284,7 +332,7 @@ EOF
echo "Done." echo "Done."
# 64-bit # 64-bit
echo "Installing packages for 64-bit..." echo "Installing estra packages for 64-bit..."
PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.64 | tr '\n' ' ') PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.64 | tr '\n' ' ')
if [ -n "${PKGLIST}" ]; if [ -n "${PKGLIST}" ];
then then
@@ -320,10 +368,13 @@ EOF
echo "Done." echo "Done."
rm -f ${LOCKFILE} #rm -f ${LOCKFILE}
echo "Chroot setup complete." echo "Chroot setup complete."
} }
if [[ ! -f "${BASEDIR}/root.x86_64/VERSION_INFO.txt" && ! -f "${BASEDIR}/root.x86_64/VERSION_INFO.txt" ]];
then
mkchroot mkchroot
fi

View File

@@ -1,5 +1,7 @@
function holla_atcha_boi { function holla_atcha_boi {
FUNCNAME="holla_atcha_boi"
if [[ "${I_AM_A_RACECAR}" == "y" ]]; if [[ "${I_AM_A_RACECAR}" == "y" ]];
then then
RACECAR_CHK='nice -n -19 ' RACECAR_CHK='nice -n -19 '
@@ -7,13 +9,14 @@ function holla_atcha_boi {
RACECAR_CHK="" RACECAR_CHK=""
fi fi
so_check_me_out
# Do we have an existing chroot set up yet? If not, create. # Do we have an existing chroot set up yet? If not, create.
if [[ ! -d "root.x86_64/root" || ! -d "root.i686/root" ]]; if [[ ! -d "root.x86_64/root" || ! -d "root.i686/root" ]];
then then
echo "No existing chroot environment found. Creating..." echo "No existing chroot environment found. Creating..."
rm -f ${LOCKFILE} rm -f ${LOCKFILE}
${RACECAR_CHK} ${BASEDIR}/lib/mk.chroot.sh ${RACECAR_CHK} ${BASEDIR}/lib/01-mk.chroot.func.sh
touch ${LOCKFILE} touch ${LOCKFILE}
fi fi
} }

View File

@@ -1,4 +1,7 @@
function release_me () { function release_me () {
FUNCNAME="release_me"
## check for mountpoints from a manual chroot and umount them if they're still mounted. ## check for mountpoints from a manual chroot and umount them if they're still mounted.
## NOTE: you can use findmnt(8) to view a tree of mountpoints, including bindmounts etc. ## NOTE: you can use findmnt(8) to view a tree of mountpoints, including bindmounts etc.
# Is there an active chroot? # Is there an active chroot?

View File

@@ -1,4 +1,7 @@
function facehugger () { function facehugger () {
FUNCNAME="facehugger"
local ARCHSUFFIX="${1}" local ARCHSUFFIX="${1}"
if [[ "${1}" == "64" ]]; if [[ "${1}" == "64" ]];
then then

View File

@@ -1,4 +1,7 @@
function chroot_wrapper () { function chroot_wrapper () {
FUNCNAME="chroot_wrapper"
local ARCHSUFFIX="${1}" local ARCHSUFFIX="${1}"
if [[ "${1}" == "64" ]]; if [[ "${1}" == "64" ]];
then then

View File

@@ -1,70 +0,0 @@
function centos_is_stupid {
echo "Checking for appropriate kernel version and mksquashfs version..."
SQFS_VER=$(mksquashfs -version 2>&1 | head -n1 | awk '{print $3}' | sed -re 's/(^[0-9]*\.[0-9]*).*$/\1/g')
KERN_VER=$(uname -r | cut -f1 -d"-")
SQUASH_OPTS="-noappend -comp xz"
set +e
ver_check() {
[ "$1" == "$2" ] && return 10
ver1front=`echo $1 | cut -d "." -f -1`
ver1back=`echo $1 | cut -d "." -f 2-`
ver2front=`echo $2 | cut -d "." -f -1`
ver2back=`echo $2 | cut -d "." -f 2-`
if [ "$ver1front" != "$1" ] || [ "$ver2front" != "$2" ]; then
[ "$ver1front" -gt "$ver2front" ] && return 11
[ "$ver1front" -lt "$ver2front" ] && return 9
[ "$ver1front" == "$1" ] || [ -z "$ver1back" ] && ver1back=0
[ "$ver2front" == "$2" ] || [ -z "$ver2back" ] && ver2back=0
ver_check "$ver1back" "$ver2back"
return $?
else
[ "$1" -gt "$2" ] && return 11 || return 9
fi
}
ver_check ${KERN_VER} "2.6.38"
KERNTEST=${?}
ver_check ${SQFS_VER} "4.2"
SQFSTEST=${?}
if [ ${KERNTEST} -lt "10" ];
then
echo "You need a newer kernel to even think about doing this. (>= 2.6.38)"
echo "If you're on CentOS, there are 3.x branches available via the elrepo repository."
echo "I recommend the 'kernel-lt' package from there."
echo "Bailing out."
exit 1
#elif [ ${SQFS_VER} -ge "4.2" ] && [ ${KERN_VER} -ge "2.6.38" ];
elif [ ${SQFSTEST} -ge "10" ] && [ ${KERNTEST} -ge "10" ];
then
#echo "Awesome; your mksquashfs (if found) is not less than v4.2."
SQUASH_CMD=$(which mksquashfs)
if [ ${?} != "0" ];
then
echo "...Except you need to install whatever package you need to for mksquashfs."
exit 1
else
SQUASH_CMD=$(which mksquashfs)
fi
elif [ ${SQFSTEST} -lt "10" ] && [ ${KERNTEST} -ge "10" ];
then
if [ ! -f ${SRCDIR}/squashfs4.2/squashfs-tools/mksquashfs ];
then
echo "Boy howdy. We need to compile a custom version of the squashfs-tools because you aren't running a version that supports XZ. Give me a second."
set -e
mkdir -p ${SRCDIR} ${ROOTDIR}/bin
cd ${SRCDIR}
#wget --quiet -O squashfs4.2.tar.gz "http://downloads.sourceforge.net/project/squashfs/squashfs/squashfs4.2/squashfs4.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fsquashfs%2Ffiles%2F&ts=1387047818&use_mirror=hivelocity"
curl -o squashfs4.2.tar.gz "http://downloads.sourceforge.net/project/squashfs/squashfs/squashfs4.2/squashfs4.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fsquashfs%2Ffiles%2F&ts=1387047818&use_mirror=hivelocity" >> "${LOGFILE}.${FUNCNAME}" 2>&1
tar -zxf squashfs4.2.tar.gz
cd squashfs4.2/squashfs-tools
make clean
sed -i -e 's/^#\(XZ_SUPPORT\)/\1/g' Makefile
make
SQUASH_CMD="${SRCDIR}/squashfs4.2/squashfs-tools/mksquashfs"
else
echo "Using custom-compiled mksquashfs from an earlier run."
SQUASH_CMD="${SRCDIR}/squashfs4.2/squashfs-tools/mksquashfs"
fi
fi
set -e
}

View File

@@ -1,4 +1,7 @@
function jenny_craig () { function jenny_craig () {
FUNCNAME="jenny_craig"
BUILDDIR="${BUILDDIR_GLOB}" BUILDDIR="${BUILDDIR_GLOB}"
if [[ "${1}" == "64" ]]; if [[ "${1}" == "64" ]];
then then

View File

@@ -0,0 +1,102 @@
function centos_is_stupid {
FUNCNAME="centos_is_stupid"
if [[ "${HOST_DIST}" == "CentOS" || "${HOST_DIST}" == "RHEL" ]];
then
if [[ "$(rpm -qa | egrep -q '^xorriso-[0-9]')" != "0" ]];
then
# Download/install the proper xorriso
EL_VER="$(rpm -qa coreutils | sed -re 's/^coreutils-[0-9.-]*el([0-9])*.*$/\1/g')"
if (("${EL_VER}" < "7"));
then
echo "Wow. Your CentOS/RHEL is too old. Sorry; this is only supported on CentOS/RHEL 7 and up."
exit 1
fi
XORRISO_RPM=$(curl -s http://pkgs.repoforge.org/xorriso/ | egrep "\"xorriso-[0-9.-]*el${EL_VER}.rf.x86_64.rpm\"" | sed -re "s/^.*\"(xorriso[0-9.-]*el${EL_VER}.rf.x86_64.rpm).*$/\1/g")
echo "Since you're using either CentOS or RHEL, we need to install xorriso directly from an RPM. Please wait while we do this..."
curl -sLo /tmp/${XORRISO_RPM} http://pkgs.repoforge.org/xorriso/${XORRISO_RPM}
set +e
yum -y install /tmp/${XORRISO_RPM} >> "${LOGFILE}.${FUNCNAME}" 2>&1
set -e
echo "Done."
echo
fi
# We used to fetch and compile mksquashfs from source here, but no longer- because a new enough version is *finally* in CentOS repos as of CentOS 7.
# This also lets us cut out the crufty version check and replace it with the one above.
fi
# UGH. And you know what? Fuck SUSE too.
if [[ "${HOST_DIST}" == "openSUSE" || "${HOST_DIST}" == "SUSE" ]];
then
if [[ "$(rpm -qa | egrep -q '^xorriso-[0-9]')" != "0" ]];
then
# Download/install the proper xorriso
source /etc/os-release
SUSE_VER="${VERSION_ID}"
XORRISO_RPM=$(curl -s "http://software.opensuse.org/download.html?project=home%3AKnolleblau&package=xorriso" | egrep "/openSUSE_${SUSE_VER}/x86_64/xorriso-[0-9.-]" | tail -n1 | sed -re 's|^.*x86_64/(xorriso-[0-9.-]*.x86_64.rpm).*$|\1|g')
echo "Since you're using openSUSE or SLED/SLES, we need to install xorriso directly from an RPM. Please wait while we do this..."
curl -sLo /tmp/${XORRISO_RPM} "http://download.opensuse.org/repositories/home:/Knolleblau/openSUSE_${SUSE_VER}/x86_64/${XORRISO_RPM}"
cp /etc/zypp/zypp.conf /etc/zypp/zypp.conf_BAK."${$}"
echo 'pkg_gpgcheck = no' >> /etc/zypp/zypp.conf
zypper install --no-confirm -l /tmp/${XORRISO_RPM} >> "${LOGFILE}.${FUNCNAME}" 2>&1
mv -f /etc/zypp/zypp.conf_BAK."${$}" /etc/zypp/zypp.conf
echo "Done."
echo
fi
fi
# And a double fuck-you to SLED/SLES.
if [[ "${HOST_DIST}" == "SUSE" ]];
then
source /etc/os-release
source ${BASEDIR}/lib/prereqs/SUSE/meta
SUSE_VER="${VERSION_ID}"
SUSE_REL="${ID}"
SDK_PKGS=(binutils-devel git xz-devel xz-devel-32bit zlib-devel zlib-devel-32bit)
if [[ "${PRE_RUN}" != 'none' ]];
then
echo "Now updating your local package cache..."
set +e
eval "${PRE_RUN}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" != "0" ]];
then
echo "ERROR: Syncing your local package cache via ${PRE_RUN} command failed."
echo "Please ensure you are connected to the Internet/have repositories configured correctly."
exit 1
fi
set -e
fi
zypper search binutils-devel | egrep -q '^[[:space:]]*|[[:space:]]*binutils-devel[[:space:]]*'
if [[ "${?}" != "0" ]];
then
echo
echo "In order to install some of the necessary packages on the host, you will need to add the SLE SDK repository."
echo "It can be downloaded by visiting http://download.suse.com/ and search for 'SUSE Linux Enterprise Software Development Kit'"
echo "(or add it to your subscriptions)."
echo "See https://www.suse.com/documentation/${SUSE_REL}-${SUSE_VER}/book_sle_deployment/data/sec_add-ons_sdk.html for more information."
exit 1
else
for pkgname in "${SDK_PKGS[@]}";
do
eval "${PKG_CHK}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" != "0" ]];
then
echo "Installing ${pkgname}..."
eval "${PKG_MGR}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" != "0" ]];
then
echo "ERROR: ${pkgname} was not found to be installed and we can't install it."
echo "This usually means you aren't connected to the Internet or your package repositories"
echo "are not configured correctly. Review the list of packages in ${PKGLIST} and ensure"
echo "they are all available to be installed."
fi
fi
done
fi
fi
}

View File

@@ -1,107 +0,0 @@
function stuffy {
cp -f ${BASEDIR}/VERSION_INFO.txt ${TEMPDIR}/.
if [[ "${I_AM_A_RACECAR}" == "y" ]];
then
RACECAR_CHK='nice -n -19 '
else
RACECAR_CHK=""
fi
echo "Setting up EFI stuff..."
mkdir -p ${TEMPDIR}/{EFI/{${DISTNAME},boot},loader/entries}
# this stuff comes from the prebootloader pkg and gummiboot pkg. lets us boot on UEFI machines with secureboot still enabled.
cp ${BASEDIR}/root.x86_64/usr/lib/prebootloader/PreLoader.efi ${TEMPDIR}/EFI/boot/bootx64.efi
cp ${BASEDIR}/root.x86_64/usr/lib/prebootloader/HashTool.efi ${TEMPDIR}/EFI/boot/.
cp ${BASEDIR}/root.x86_64/usr/lib/gummiboot/gummibootx64.efi ${TEMPDIR}/EFI/boot/loader.efi # TODO: can i use syslinux.efi instead?
echo "Checking/fetching UEFI shells..."
if [ ! -f "${TEMPDIR}/EFI/shellx64_v2.efi" ];
then
# EFI Shell 2.0 for UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Shell )
curl -o ${TEMPDIR}/EFI/shellx64_v2.efi https://svn.code.sf.net/p/edk2/code/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
if [ ! -f "${TEMPDIR}/EFI/shellx64_v1.efi" ];
then
# EFI Shell 1.0 for non UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Efi-shell )
curl -o ${TEMPDIR}/EFI/shellx64_v1.efi https://svn.code.sf.net/p/edk2/code/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
# now for setting up loader config/entries. maybe add memtest or something in the future? i dunno.
cat > ${TEMPDIR}/loader/loader.conf << EOF
timeout 3
default ${UXNAME}_ram
EOF
cat > ${TEMPDIR}/loader/entries/${UXNAME}_ram.conf << EOF
title ${PNAME}
linux /boot/${UXNAME}.kern
initrd /boot/${UXNAME}.img
options copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
EOF
cat > ${TEMPDIR}/loader/entries/${UXNAME}.conf << EOF
title ${PNAME} (Run from media)
linux /boot/${UXNAME}.kern
initrd /boot/${UXNAME}.img
options archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
EOF
cat > ${TEMPDIR}/loader/entries/uefi2.conf << EOF
title UEFI Shell (v2)
efi /EFI/shellx64_v2.efi
EOF
cat > ${TEMPDIR}/loader/entries/uefi1.conf << EOF
title UEFI Shell (v1)
efi /EFI/shellx64_v1.efi
EOF
# create the embedded efiboot FAT stuff
# how big should we make the disk?
echo "Generating the EFI embedded FAT filesystem..."
FTSIZE=$(du -sc ${TEMPDIR}/{boot,EFI,loader} | tail -n1 | awk '{print $1}')
FATSIZE=$((${FTSIZE} + 64)) # let's give a little wiggle room
${RACECAR_CHK}truncate -s "${FATSIZE}"K ${TEMPDIR}/EFI/${DISTNAME}/efiboot.img
${RACECAR_CHK}mkfs.vfat -F 32 -n ${DISTNAME}_EFI ${TEMPDIR}/EFI/${DISTNAME}/efiboot.img >> "${LOGFILE}.${FUNCNAME}" 2>&1
#${RACECAR_CHK}mkfs.vfat -F32 -s2 -n ${DISTNAME}_EFI ${TEMPDIR}/EFI/${DISTNAME}/efiboot.img >> "${LOGFILE}.${FUNCNAME}" 2>&1
mkdir -p ${SRCDIR}/efiboot
mount ${TEMPDIR}/EFI/${DISTNAME}/efiboot.img ${SRCDIR}/efiboot
mkdir -p ${SRCDIR}/efiboot/EFI/${DISTNAME}
cp ${TEMPDIR}/boot/${UXNAME}.64.kern ${SRCDIR}/efiboot/EFI/${DISTNAME}/${UXNAME}.efi
cp ${TEMPDIR}/boot/${UXNAME}.64.img ${SRCDIR}/efiboot/EFI/${DISTNAME}/${UXNAME}.img
mkdir -p ${SRCDIR}/efiboot/{EFI/boot,loader/entries}
# GETTING DEJA VU HERE.
cat > ${SRCDIR}/efiboot/loader/loader.conf << EOF
timeout 3
default ${UXNAME}_ram
EOF
cat > ${SRCDIR}/efiboot/loader/entries/${UXNAME}_ram.conf << EOF
title ${PNAME}
linux /EFI/${DISTNAME}/${UXNAME}.efi
initrd /EFI/${DISTNAME}/${UXNAME}.img
options copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
EOF
cat > ${SRCDIR}/efiboot/loader/entries/${UXNAME}.conf << EOF
title ${PNAME} (Run from media)
linux /EFI/${DISTNAME}/${UXNAME}.efi
initrd /EFI/${DISTNAME}/${UXNAME}.img
options archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
EOF
cat > ${SRCDIR}/efiboot/loader/entries/uefi2.conf << EOF
title UEFI Shell (v2)
efi /EFI/shellx64_v2.efi
EOF
cat > ${SRCDIR}/efiboot/loader/entries/uefi1.conf << EOF
title UEFI Shell (v1)
efi /EFI/shellx64_v1.efi
EOF
cp ${BASEDIR}/root.x86_64/usr/lib/prebootloader/PreLoader.efi ${SRCDIR}/efiboot/EFI/boot/bootx64.efi
cp ${BASEDIR}/root.x86_64/usr/lib/prebootloader/HashTool.efi ${SRCDIR}/efiboot/EFI/boot/.
cp ${BASEDIR}/root.x86_64/usr/lib/gummiboot/gummibootx64.efi ${SRCDIR}/efiboot/EFI/boot/loader.efi # TODO: can i use syslinux.efi instead?
cp ${TEMPDIR}/EFI/shellx64_v* ${SRCDIR}/efiboot/EFI/.
umount ${SRCDIR}/efiboot
echo "EFI configuration complete..."
}

View File

@@ -1,4 +1,10 @@
function will_it_blend () { function will_it_blend () {
FUNCNAME="will_it_blend"
SQUASH_CMD="mksquashfs"
SQUASH_OPTS="-noappend -comp xz"
local ARCHSUFFIX="${1}" local ARCHSUFFIX="${1}"
if [[ "${1}" == "64" ]]; if [[ "${1}" == "64" ]];
then then
@@ -43,6 +49,11 @@ function will_it_blend () {
local BUILDDIR="${BUILDDIR}${ARCHSUFFIX}" local BUILDDIR="${BUILDDIR}${ARCHSUFFIX}"
# now let's build the squashed image... and generate some checksums as well to verify download integrity. # now let's build the squashed image... and generate some checksums as well to verify download integrity.
# are we building split-arch ISOs? do we need the below?
#if [[ "${MULTIARCH}" == "n" ]];
#then
# rm -rf ${ARCHBOOT}
#fi
mkdir -p ${ARCHBOOT}/${AIROOT} mkdir -p ${ARCHBOOT}/${AIROOT}
if [ ! -f "${ARCHBOOT}/${AIROOT}/airootfs.sfs" ] || [ "${CHROOTDIR}/root/.bash_history" -nt "${ARCHBOOT}/${AIROOT}/airootfs.sfs" ]; if [ ! -f "${ARCHBOOT}/${AIROOT}/airootfs.sfs" ] || [ "${CHROOTDIR}/root/.bash_history" -nt "${ARCHBOOT}/${AIROOT}/airootfs.sfs" ];
@@ -52,26 +63,31 @@ function will_it_blend () {
cd ${ARCHBOOT}/${AIROOT} cd ${ARCHBOOT}/${AIROOT}
${RACECAR_CHK}sha256sum airootfs.sfs >> airootfs.sha256 ${RACECAR_CHK}sha256sum airootfs.sfs >> airootfs.sha256
${RACECAR_CHK}md5sum airootfs.sfs >> airootfs.md5 ${RACECAR_CHK}md5sum airootfs.sfs >> airootfs.md5
cd ${ROOTDIR} cd ${BASEDIR}
else else
cd ${ROOTDIR} cd ${BASEDIR}
fi fi
# Generate the mtree spec. # Generate the mtree spec.
# Not really necessary anymore. # Not really necessary anymore.
#mtree -c -p ${ROOTDIR}/chroot -K flags,gid,mode,nlink,uid,link,time,type > ${ROOTDIR}/extra/mtree.spec #mtree -c -p ${BASEDIR}/chroot -K flags,gid,mode,nlink,uid,link,time,type > ${BASEDIR}/extra/mtree.spec
# and now we copy stuff into the live directories # and now we copy stuff into the live directories
echo "[${ARCHSUFFIX}-bit] Copying files for PXE, and ISO building, please be patient." echo "[${ARCHSUFFIX}-bit] Copying files for PXE, and ISO building, please be patient."
#rm -rf ${TEMPDIR}/* #rm -rf ${TEMPDIR}/*
if [ ! -f ${BASEDIR}/extra/${UXNAME}.png ];
then
cat ${BASEDIR}/extra/bdisk.png > ${BASEDIR}/extra/${UXNAME}.png
fi
cp -af ${BASEDIR}/extra/${UXNAME}.png ${TEMPDIR}/. cp -af ${BASEDIR}/extra/${UXNAME}.png ${TEMPDIR}/.
cp -af ${BASEDIR}/extra/${UXNAME}.png ${TFTPDIR}/. cp -af ${BASEDIR}/extra/${UXNAME}.png ${TFTPDIR}/.
mkdir -p ${TEMPDIR}/boot mkdir -p ${TEMPDIR}/boot
cp -af ${CHROOTDIR}/boot/initramfs-linux-${PNAME}.img ${TEMPDIR}/boot/${UXNAME}.${ARCHSUFFIX}.img cp -af ${CHROOTDIR}/boot/initramfs-linux-${DISTNAME}.img ${TEMPDIR}/boot/${UXNAME}.${ARCHSUFFIX}.img
cp -af ${CHROOTDIR}/boot/vmlinuz-linux-${PNAME} ${TEMPDIR}/boot/${UXNAME}.${ARCHSUFFIX}.kern cp -af ${CHROOTDIR}/boot/vmlinuz-linux-${DISTNAME} ${TEMPDIR}/boot/${UXNAME}.${ARCHSUFFIX}.kern
cp -af ${CHROOTDIR}/boot/initramfs-linux-${PNAME}.img ${TFTPDIR}/${UXNAME}.${ARCHSUFFIX}.img cp -af ${CHROOTDIR}/boot/initramfs-linux-${DISTNAME}.img ${TFTPDIR}/${UXNAME}.${ARCHSUFFIX}.img
cp -af ${CHROOTDIR}/boot/vmlinuz-linux-${PNAME} ${TFTPDIR}/${UXNAME}.${ARCHSUFFIX}.kern cp -af ${CHROOTDIR}/boot/vmlinuz-linux-${DISTNAME} ${TFTPDIR}/${UXNAME}.${ARCHSUFFIX}.kern
cp -af ${ARCHBOOT}/* ${HTTPDIR}/${DISTNAME}/. cp -af ${ARCHBOOT}/* ${HTTPDIR}/${DISTNAME}/.
cp -af ${TFTPDIR}/* ${HTTPDIR}/.
chown -R ${HTTPUSR}:${HTTPGRP} ${HTTPDIR} chown -R ${HTTPUSR}:${HTTPGRP} ${HTTPDIR}
chown ${TFTPUSR}:${TFTPGRP} ${TFTPDIR}/${UXNAME}.* chown ${TFTPUSR}:${TFTPGRP} ${TFTPDIR}/${UXNAME}.*
} }

126
lib/09-stuffy.func.sh Normal file
View File

@@ -0,0 +1,126 @@
function stuffy {
FUNCNAME="stuffy"
cp -f ${BASEDIR}/VERSION_INFO.txt ${TEMPDIR}/.
if [[ "${I_AM_A_RACECAR}" == "y" ]];
then
RACECAR_CHK='nice -n -19 '
else
RACECAR_CHK=""
fi
echo "Setting up EFI stuff..."
mkdir -p ${TEMPDIR}/{EFI/{${DISTNAME},boot},loader/entries}
# this stuff comes from the prebootloader pkg and systemd-boot. lets us boot on UEFI machines with secureboot still enabled.
# the signed prebootloader binaries, however, have been replaced by non-signed ones. so we need to fetch them.
# fetched from http://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/
curl -so ${TEMPDIR}/EFI/boot/bootx64.efi "http://blog.hansenpartnership.com/wp-uploads/2013/PreLoader.efi" # MD5: 4f7a4f566781869d252a09dc84923a82 TODO: implement checksumming check
curl -so ${TEMPDIR}/EFI/boot/HashTool.efi http://blog.hansenpartnership.com/wp-uploads/2013/HashTool.efi
#cp ${BASEDIR}/root.x86_64/usr/lib/prebootloader/PreLoader.efi ${TEMPDIR}/EFI/boot/bootx64.efi
#cp ${BASEDIR}/root.x86_64/usr/lib/prebootloader/HashTool.efi ${TEMPDIR}/EFI/boot/.
cp ${BASEDIR}/root.x86_64/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${TEMPDIR}/EFI/boot/loader.efi # TODO: can i use syslinux.efi instead?
echo "Checking/fetching UEFI shells..."
if [ ! -f "${TEMPDIR}/EFI/shellx64_v2.efi" ];
then
# EFI Shell 2.0 for UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Shell )
curl -o ${TEMPDIR}/EFI/shellx64_v2.efi "https://github.com/tianocore/edk2/blob/master/ShellBinPkg/UefiShell/X64/Shell.efi?raw=true" >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
if [ ! -f "${TEMPDIR}/EFI/shellx64_v1.efi" ];
then
# EFI Shell 1.0 for non UEFI 2.3+ ( http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Efi-shell )
curl -o ${TEMPDIR}/EFI/shellx64_v1.efi "https://github.com/tianocore/edk2/blob/master/EdkShellBinPkg/FullShell/X64/Shell_Full.efi?raw=true" >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
# now for setting up loader config/entries. maybe add memtest or something in the future? i dunno.
cat > ${TEMPDIR}/loader/loader.conf << EOF
timeout 3
default ${UXNAME}
EOF
cat > ${TEMPDIR}/loader/entries/${UXNAME}_ram.conf << EOF
title ${PNAME} (RAM)
linux /boot/${UXNAME}.kern
initrd /boot/${UXNAME}.img
options copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
EOF
cat > ${TEMPDIR}/loader/entries/${UXNAME}.conf << EOF
title ${PNAME} (Media)
linux /boot/${UXNAME}.kern
initrd /boot/${UXNAME}.img
options archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
EOF
cat > ${TEMPDIR}/loader/entries/uefi2.conf << EOF
title UEFI Shell (v2)
efi /EFI/shellx64_v2.efi
EOF
cat > ${TEMPDIR}/loader/entries/uefi1.conf << EOF
title UEFI Shell (v1)
efi /EFI/shellx64_v1.efi
EOF
# create the embedded efiboot FAT stuff
# how big should we make the disk?
echo "Generating the EFI embedded FAT filesystem..."
# are we building split-arch ISOs?
if [[ "${MULTIARCH}" == "n" ]];
then
rm -f ${TEMPDIR}/EFI/${DISTNAME}/efiboot.img
fi
# now we need to calculate the space for various files we're going to include...
FATSIZE=$(stat --format="%s" ${TEMPDIR}/boot/${UXNAME}.64.kern) # EFI/BDISK/bdisk.efi
FATSIZE=$((${FATSIZE} + $(stat --format="%s" ${TEMPDIR}/boot/${UXNAME}.64.img))) # EFI/BDISK/bdisk.img
#FATSIZE=$((${FATSIZE} + $(stat --format="%s" ${BASEDIR}/root.x86_64/usr/lib/prebootloader/PreLoader.efi))) # EFI/boot/bootx64.efi
FATSIZE=$((${FATSIZE} + $(stat --format="%s" ${TEMPDIR}/EFI/boot/bootx64.efi))) # EFI/boot/bootx64.efi
FATSIZE=$((${FATSIZE} + $(stat --format="%s" ${TEMPDIR}/EFI/boot/HashTool.efi))) # EFI/boot/HashTool.efi
FATSIZE=$((${FATSIZE} + $(stat --format="%s" ${BASEDIR}/root.x86_64/usr/lib/systemd/boot/efi/systemd-bootx64.efi))) # EFI/boot/loader.efi
FATSIZE=$((${FATSIZE} + $(stat --format="%s" ${TEMPDIR}/EFI/shellx64_v1.efi)))
FATSIZE=$((${FATSIZE} + $(stat --format="%s" ${TEMPDIR}/EFI/shellx64_v2.efi)))
FATSIZE=$((${FATSIZE} + $(du -sb ${TEMPDIR}/loader | tail -n1 | awk '{print $1}'))) # loader/* (okay so i cheated a little here.)
FATSIZE=$((${FATSIZE} + 786432)) # let's give a little wiggle room; 768k should do it. -_-
${RACECAR_CHK}truncate -s "${FATSIZE}" ${TEMPDIR}/EFI/${DISTNAME}/efiboot.img
${RACECAR_CHK}mkfs.vfat -F 32 -n ${DISTNAME}_EFI ${TEMPDIR}/EFI/${DISTNAME}/efiboot.img >> "${LOGFILE}.${FUNCNAME}" 2>&1
mkdir -p ${SRCDIR}/efiboot
mount ${TEMPDIR}/EFI/${DISTNAME}/efiboot.img ${SRCDIR}/efiboot
mkdir -p ${SRCDIR}/efiboot/EFI/${DISTNAME}
cp ${TEMPDIR}/boot/${UXNAME}.64.kern ${SRCDIR}/efiboot/EFI/${DISTNAME}/${UXNAME}.efi
cp ${TEMPDIR}/boot/${UXNAME}.64.img ${SRCDIR}/efiboot/EFI/${DISTNAME}/${UXNAME}.img
mkdir -p ${SRCDIR}/efiboot/{EFI/boot,loader/entries}
# GETTING DEJA VU HERE.
cat > ${SRCDIR}/efiboot/loader/loader.conf << EOF
timeout 3
default ${UXNAME}
EOF
cat > ${SRCDIR}/efiboot/loader/entries/${UXNAME}_ram.conf << EOF
title ${PNAME} (RAM)
linux /EFI/${DISTNAME}/${UXNAME}.efi
initrd /EFI/${DISTNAME}/${UXNAME}.img
options copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
EOF
cat > ${SRCDIR}/efiboot/loader/entries/${UXNAME}.conf << EOF
title ${PNAME} (Media)
linux /EFI/${DISTNAME}/${UXNAME}.efi
initrd /EFI/${DISTNAME}/${UXNAME}.img
options archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
EOF
cat > ${SRCDIR}/efiboot/loader/entries/uefi2.conf << EOF
title UEFI Shell (v2)
efi /EFI/shellx64_v2.efi
EOF
cat > ${SRCDIR}/efiboot/loader/entries/uefi1.conf << EOF
title UEFI Shell (v1)
efi /EFI/shellx64_v1.efi
EOF
cp ${TEMPDIR}/EFI/boot/bootx64.efi ${SRCDIR}/efiboot/EFI/boot/bootx64.efi
cp ${TEMPDIR}/EFI/boot/HashTool.efi ${SRCDIR}/efiboot/EFI/boot/.
cp ${BASEDIR}/root.x86_64/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${SRCDIR}/efiboot/EFI/boot/loader.efi # TODO: can i use syslinux.efi instead?
cp ${TEMPDIR}/EFI/shellx64_v{1,2}.efi ${SRCDIR}/efiboot/EFI/.
umount ${SRCDIR}/efiboot
echo "EFI configuration complete..."
}

View File

@@ -1,296 +0,0 @@
function yo_dj () {
ARCH="${1}"
echo "Building the actual .iso image. This may take a while."
im_batman
ISOFILENAME="${UXNAME}-${VERSION}.iso"
if [[ "${MULTIARCH}" == "y" ]];
then
ISOFILENAME="${UXNAME}-${VERSION}-any.iso"
else
ISOFILENAME="${UXNAME}-${VERSION}-${ARCH}.iso"
fi
if [[ "${I_AM_A_RACECAR}" == "y" ]];
then
RACECAR_CHK='nice -n -19 '
else
RACECAR_CHK=""
fi
# and why not? generate the ISO.
## we need to generate the isolinux.cfg
mkdir -p ${TEMPDIR}/isolinux
if [[ "${MULTIARCH}" == "y" ]];
then
## MULTIARCH ISO
cat > ${TEMPDIR}/isolinux/isolinux.cfg << EOF
UI vesamenu.c32
DEFAULT check
PROMPT 0
TIMEOUT 50
MENU HIDDEN
#ONTIMEOUT ${UXNAME}_ram
ONTIMEOUT check
MENU TABMSG Press [TAB] to edit options
#MENU TITLE ${PNAME} (ISO edition)
MENU ROWS 16
MENU TIMEOUTROW 22
MENU TABMSGROW 24
MENU CMDLINEROW 24
MENU HELPMSGROW 26
MENU WIDTH 78
MENU MARGIN 6
MENU IMMEDIATE
# http://www.colorpicker.com/
MENU color border 0 #00000000 #00000000 none
MENU color title 0 #FFF5B800 #00000000 std
MENU color sel 7;37;40 #FF000000 #FFFFFFFF all
MENU color hotsel 1;7;37;40 #FFFF0000 #FFC0C0C0 all
MENU color hotkey 1;7;37;40 #FF0000CC #FFC0C0C0 all
MENU color tabmsg 1;31;40 #FF808080 #00000000 std
MENU color help 1;31;40 #FFFFFFFF #FF000000 none
MENU color timeout_msg 0 #FFFFB300 #00000000 none
MENU color timeout 0 #FFFF0000 #FF000000 none
MENU color cmdline 0 #FFFFFFFF #FF000000 none
MENU color cmdmark 1;36;40 #C000FFFF #FF000000 std
MENU color scrollbar 30;44 #FF00FF00 #FF000000 std
MENU color msg07 0 #FF000000 #00FFFFFF none
MENU BACKGROUND /${UXNAME}.png
LABEL check
MENU LABEL Your best supported kernel should be detected automatically.
COM32 ifcpu64.c32
APPEND ${UXNAME}_ram_64 -- ${UXNAME}_ram_32
MENU DEFAULT
LABEL local_override
MENU LABEL Local ^Boot
localboot 0
TEXT HELP
Boot from the local system instead.
ENDTEXT
LABEL reboot
MENU LABEL ^Reboot
COM32 reboot.c32
TEXT HELP
Reboot the machine
ENDTEXT
MENU SEPARATOR
## 64 BIT
MENU BEGIN 64BIT
MENU LABEL ^1) 64-Bit ...
ONTIMEOUT ${UXNAME}_ram_64
LABEL ${UXNAME}_ram_64
MENU LABEL ^1) ${PNAME} (run from RAM) (Default)
LINUX /boot/${UXNAME}.64.kern
INITRD /boot/${UXNAME}.64.img
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
64-bit, run from RAM
ENDTEXT
MENU DEFAULT
LABEL ${UXNAME}_64
MENU LABEL ^1) ${PNAME}
LINUX /boot/${UXNAME}.64.kern
INITRD /boot/${UXNAME}.64.img
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
Same as the above, except run directly from the CD-
don't copy the image to RAM. (Best for lower-memory boxes)
ENDTEXT
MENU END
MENU BEGIN 32BIT
MENU LABEL ^2) 32-Bit ...
ONTIMEOUT ${UXNAME}_ram_32
## 32 BIT
LABEL ${UXNAME}_ram_32
MENU LABEL ^1) ${PNAME} (run from RAM) (Default)
LINUX /boot/${UXNAME}.32.kern
INITRD /boot/${UXNAME}.32.img
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
32-bit, run from RAM
ENDTEXT
MENU DEFAULT
LABEL ${UXNAME}_32
MENU LABEL ^2) ${PNAME}
LINUX /boot/${UXNAME}.32.kern
INITRD /boot/${UXNAME}.32.img
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
Same as the above, except run directly from the CD-
don't copy the image to RAM. (Best for lower-memory boxes)
ENDTEXT
MENU END
EOF
else
## ARCH-SPECIFIC ISO
cat > ${TEMPDIR}/isolinux/isolinux.cfg << EOF
UI vesamenu.c32
DEFAULT check
PROMPT 0
TIMEOUT 50
MENU HIDDEN
ONTIMEOUT ${UXNAME}_ram_${ARCH}
MENU TABMSG Press [TAB] to edit options
#MENU TITLE ${PNAME} (ISO edition)
MENU ROWS 16
MENU TIMEOUTROW 22
MENU TABMSGROW 24
MENU CMDLINEROW 24
MENU HELPMSGROW 26
MENU WIDTH 78
MENU MARGIN 6
MENU IMMEDIATE
# http://www.colorpicker.com/
MENU color border 0 #00000000 #00000000 none
MENU color title 0 #FFF5B800 #00000000 std
MENU color sel 7;37;40 #FF000000 #FFFFFFFF all
MENU color hotsel 1;7;37;40 #FFFF0000 #FFC0C0C0 all
MENU color hotkey 1;7;37;40 #FF0000CC #FFC0C0C0 all
MENU color tabmsg 1;31;40 #FF808080 #00000000 std
MENU color help 1;31;40 #FFFFFFFF #FF000000 none
MENU color timeout_msg 0 #FFFFB300 #00000000 none
MENU color timeout 0 #FFFF0000 #FF000000 none
MENU color cmdline 0 #FFFFFFFF #FF000000 none
MENU color cmdmark 1;36;40 #C000FFFF #FF000000 std
MENU color scrollbar 30;44 #FF00FF00 #FF000000 std
MENU color msg07 0 #FF000000 #00FFFFFF none
MENU BACKGROUND /${UXNAME}.png
LABEL local_override
MENU LABEL Local ^Boot
localboot 0
TEXT HELP
Boot from the local system instead.
ENDTEXT
LABEL reboot
MENU LABEL ^Reboot
COM32 reboot.c32
TEXT HELP
Reboot the machine
ENDTEXT
MENU SEPARATOR
MENU BEGIN ${ARCH}BIT
MENU LABEL ^1) ${ARCH}-Bit ...
ONTIMEOUT ${UXNAME}_ram_${ARCH}
LABEL ${UXNAME}_ram_${ARCH}
MENU LABEL ^1) ${PNAME} (run from RAM) (Default)
LINUX /boot/${UXNAME}.${ARCH}.kern
INITRD /boot/${UXNAME}.${ARCH}.img
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
${ARCH}-bit, run from RAM
ENDTEXT
MENU DEFAULT
LABEL ${UXNAME}_${ARCH}
MENU LABEL ^1) ${PNAME}
LINUX /boot/${UXNAME}.${ARCH}.kern
INITRD /boot/${UXNAME}.${ARCH}.img
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
Same as the above, except run directly from the CD-
don't copy the image to RAM. (Best for lower-memory boxes)
ENDTEXT
MENU END
EOF
fi
stuffy
rm -f ${ISOFILENAME}
if [ "${ARCHBOOT}" != "${TEMPDIR}/${DISTNAME}" ];
then
mkdir -p ${TEMPDIR}/${DISTNAME}
rsync -a --delete ${ARCHBOOT}/. ${TEMPDIR}/${DISTNAME}/.
fi
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/isolinux.bin ${TEMPDIR}/isolinux
#cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/isolinux-debug.bin ${TEMPDIR}/isolinux/isolinux.bin #debugging
#cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/* ${TEMPDIR}/isolinux/. #debugging
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/vesamenu.c32 ${TEMPDIR}/isolinux
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/linux.c32 ${TEMPDIR}/isolinux
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/reboot.c32 ${TEMPDIR}/isolinux
if [ -f ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/ldlinux.c32 ];
then
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/ldlinux.c32 ${TEMPDIR}/isolinux
fi
if [ -f ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/libcom32.c32 ];
then
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/libcom32.c32 ${TEMPDIR}/isolinux
fi
if [ -f ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/libutil.c32 ];
then
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/libutil.c32 ${TEMPDIR}/isolinux
fi
if [ -f ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/ifcpu64.c32 ];
then
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/ifcpu64.c32 ${TEMPDIR}/isolinux
fi
cd ${TEMPDIR}
cd ..
${RACECAR_CHK}xorriso -as mkisofs \
-quiet \
`#-joliet` \
`#-rock` \
`#-omit-version-number` \
`#-disable-deep-relocation` \
-iso-level 3 \
-full-iso9660-filenames \
-volid "${DISTNAME}" \
-appid "${DISTDESC}" \
-publisher "${DISTPUB}" \
`#-preparer "prepared by ${0}"` \
-preparer "prepared by ${DISTPUB}" \
-eltorito-boot isolinux/isolinux.bin \
-eltorito-catalog isolinux/boot.cat \
`#-isohybrid-mbr ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/isohdpfx.bin` \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-isohybrid-mbr ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/isohdpfx.bin \
-eltorito-alt-boot \
-e EFI/${DISTNAME}/efiboot.img \
-no-emul-boot \
`#--efi-boot EFI/${DISTNAME}/efiboot.img` \
-isohybrid-gpt-basdat \
-output "${ISODIR}/${ISOFILENAME}" "${TEMPDIR}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
#isohybrid ${ISOFILENAME}
cd ${ISODIR}
${RACECAR_CHK}sha256sum ${ISOFILENAME} > ${ISOFILENAME}.sha256
cd ..
echo "ISO generated; size is $(ls -lh ${ISODIR}/${ISOFILENAME} | awk '{print $5}')."
echo "SHA256 sum is: $(awk '{print $1}' ${ISODIR}/${ISOFILENAME}.sha256)"
echo "You can find it at ${ISODIR}/${ISOFILENAME}"
#rm -rf ${TEMPDIR}/*
# are we rsyncing?
if [ -n "${RSYNC_HOST}" ];
then
rsync -a ${TFTPDIR}/. ${RSYNC_HOST}:${RSYNC_DEST}/tftpboot/.
rsync -a ${HTTPDIR}/. ${RSYNC_HOST}:${RSYNC_DEST}/http/.
# rsync -a ${TEMPDIR}/boot/${UXNAME}.* ${RSYNC_HOST}:${RSYNC_DEST}/http/.
rsync -a ${ISODIR}/. ${RSYNC_HOST}:${RSYNC_DEST}/iso/.
rsync -a ${ROOTDIR}/extra/. ${RSYNC_HOST}:${RSYNC_DEST}/extra/.
fi
}

436
lib/10-yo_dj.func.sh Normal file
View File

@@ -0,0 +1,436 @@
function yo_dj () {
FUNCNAME="yo_dj"
ARCH="${1}"
echo "Building the actual .iso image. This may take a while."
#im_batman ## WHYTF IS THIS HERE?!
ISOFILENAME="${UXNAME}-${BUILDVERSION}.iso"
#MINIFILENAME="${UXNAME}-${BUILDVERSION}-mini.iso"
MINIFILENAME="${UXNAME}-mini.iso"
USBFILENAME="${UXNAME}-mini.usb.img"
if [[ "${MULTIARCH}" == "y" ]];
then
ISOFILENAME="${UXNAME}-${BUILDVERSION}-any.iso"
else
ISOFILENAME="${UXNAME}-${BUILDVERSION}-${ARCH}.iso"
fi
if [[ "${I_AM_A_RACECAR}" == "y" ]];
then
RACECAR_CHK='nice -n -19 '
else
RACECAR_CHK=""
fi
# and why not? generate the ISO.
## we need to generate the isolinux.cfg
mkdir -p ${TEMPDIR}/isolinux
if [[ "${MULTIARCH}" == "y" ]];
then
## MULTIARCH ISO
cat > ${TEMPDIR}/isolinux/isolinux.cfg << EOF
UI vesamenu.c32
DEFAULT check
PROMPT 0
TIMEOUT 50
MENU HIDDEN
#ONTIMEOUT ${UXNAME}_ram
ONTIMEOUT check
MENU TABMSG Press [TAB] to edit options
#MENU TITLE ${PNAME} (ISO edition)
MENU ROWS 16
MENU TIMEOUTROW 22
MENU TABMSGROW 24
MENU CMDLINEROW 24
MENU HELPMSGROW 26
MENU WIDTH 78
MENU MARGIN 6
MENU IMMEDIATE
# http://www.colorpicker.com/
MENU color border 0 #00000000 #00000000 none
MENU color title 0 #FFF5B800 #00000000 std
MENU color sel 7;37;40 #FF000000 #FFFFFFFF all
MENU color hotsel 1;7;37;40 #FFFF0000 #FFC0C0C0 all
MENU color hotkey 1;7;37;40 #FF0000CC #FFC0C0C0 all
MENU color tabmsg 1;31;40 #FF808080 #00000000 std
MENU color help 1;31;40 #FFFFFFFF #FF000000 none
MENU color timeout_msg 0 #FFFFB300 #00000000 none
MENU color timeout 0 #FFFF0000 #FF000000 none
MENU color cmdline 0 #FFFFFFFF #FF000000 none
MENU color cmdmark 1;36;40 #C000FFFF #FF000000 std
MENU color scrollbar 30;44 #FF00FF00 #FF000000 std
MENU color msg07 0 #FF000000 #00FFFFFF none
MENU BACKGROUND /${UXNAME}.png
LABEL check
MENU LABEL Your best supported kernel should be detected automatically.
COM32 ifcpu64.c32
APPEND ${UXNAME}_64 -- ${UXNAME}_32
MENU DEFAULT
LABEL local_override
MENU LABEL Local ^Boot
localboot 0
TEXT HELP
Boot from the local system instead.
ENDTEXT
LABEL reboot
MENU LABEL ^Reboot
COM32 reboot.c32
TEXT HELP
Reboot the machine
ENDTEXT
MENU SEPARATOR
## 64 BIT
MENU BEGIN 64BIT
MENU LABEL ^1) 64-Bit ...
ONTIMEOUT ${UXNAME}_64
LABEL ${UXNAME}_ram_64
MENU LABEL ^1) ${PNAME} (run from RAM)
LINUX /boot/${UXNAME}.64.kern
INITRD /boot/${UXNAME}.64.img
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
64-bit, run from RAM
ENDTEXT
MENU DEFAULT
LABEL ${UXNAME}_64
MENU LABEL ^1) ${PNAME} (Default)
LINUX /boot/${UXNAME}.64.kern
INITRD /boot/${UXNAME}.64.img
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
Same as the above, except run directly from the CD-
don't copy the image to RAM. (Best for lower-memory boxes)
ENDTEXT
MENU END
MENU BEGIN 32BIT
MENU LABEL ^2) 32-Bit ...
ONTIMEOUT ${UXNAME}_32
## 32 BIT
LABEL ${UXNAME}_ram_32
MENU LABEL ^1) ${PNAME} (run from RAM)
LINUX /boot/${UXNAME}.32.kern
INITRD /boot/${UXNAME}.32.img
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
32-bit, run from RAM
ENDTEXT
MENU DEFAULT
LABEL ${UXNAME}_32
MENU LABEL ^2) ${PNAME} (Default)
LINUX /boot/${UXNAME}.32.kern
INITRD /boot/${UXNAME}.32.img
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
Same as the above, except run directly from the CD-
don't copy the image to RAM. (Best for lower-memory boxes)
ENDTEXT
MENU END
EOF
else
## ARCH-SPECIFIC ISO
cat > ${TEMPDIR}/isolinux/isolinux.cfg << EOF
UI vesamenu.c32
DEFAULT check
PROMPT 0
TIMEOUT 50
MENU HIDDEN
ONTIMEOUT ${UXNAME}_ram_${ARCH}
MENU TABMSG Press [TAB] to edit options
#MENU TITLE ${PNAME} (ISO edition)
MENU ROWS 16
MENU TIMEOUTROW 22
MENU TABMSGROW 24
MENU CMDLINEROW 24
MENU HELPMSGROW 26
MENU WIDTH 78
MENU MARGIN 6
MENU IMMEDIATE
# http://www.colorpicker.com/
MENU color border 0 #00000000 #00000000 none
MENU color title 0 #FFF5B800 #00000000 std
MENU color sel 7;37;40 #FF000000 #FFFFFFFF all
MENU color hotsel 1;7;37;40 #FFFF0000 #FFC0C0C0 all
MENU color hotkey 1;7;37;40 #FF0000CC #FFC0C0C0 all
MENU color tabmsg 1;31;40 #FF808080 #00000000 std
MENU color help 1;31;40 #FFFFFFFF #FF000000 none
MENU color timeout_msg 0 #FFFFB300 #00000000 none
MENU color timeout 0 #FFFF0000 #FF000000 none
MENU color cmdline 0 #FFFFFFFF #FF000000 none
MENU color cmdmark 1;36;40 #C000FFFF #FF000000 std
MENU color scrollbar 30;44 #FF00FF00 #FF000000 std
MENU color msg07 0 #FF000000 #00FFFFFF none
MENU BACKGROUND /${UXNAME}.png
LABEL local_override
MENU LABEL Local ^Boot
localboot 0
TEXT HELP
Boot from the local system instead.
ENDTEXT
LABEL reboot
MENU LABEL ^Reboot
COM32 reboot.c32
TEXT HELP
Reboot the machine
ENDTEXT
MENU SEPARATOR
MENU BEGIN ${ARCH}BIT
MENU LABEL ^1) ${ARCH}-Bit ...
ONTIMEOUT ${UXNAME}_${ARCH}
LABEL ${UXNAME}_ram_${ARCH}
MENU LABEL ^1) ${PNAME} (run from RAM)
LINUX /boot/${UXNAME}.${ARCH}.kern
INITRD /boot/${UXNAME}.${ARCH}.img
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
${ARCH}-bit, run from RAM
ENDTEXT
MENU DEFAULT
LABEL ${UXNAME}_${ARCH}
MENU LABEL ^1) ${PNAME} (Default)
LINUX /boot/${UXNAME}.${ARCH}.kern
INITRD /boot/${UXNAME}.${ARCH}.img
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
TEXT HELP
Same as the above, except run directly from the CD-
don't copy the image to RAM. (Best for lower-memory boxes)
ENDTEXT
MENU END
EOF
fi
stuffy
rm -f ${ISOFILENAME}
if [ "${ARCHBOOT}" != "${TEMPDIR}/${DISTNAME}" ];
then
mkdir -p ${TEMPDIR}/${DISTNAME}
rsync -a --delete ${ARCHBOOT}/. ${TEMPDIR}/${DISTNAME}/.
fi
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/isolinux.bin ${TEMPDIR}/isolinux
#cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/isolinux-debug.bin ${TEMPDIR}/isolinux/isolinux.bin #debugging
#cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/* ${TEMPDIR}/isolinux/. #debugging
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/vesamenu.c32 ${TEMPDIR}/isolinux
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/linux.c32 ${TEMPDIR}/isolinux
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/reboot.c32 ${TEMPDIR}/isolinux
if [ -f ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/ldlinux.c32 ];
then
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/ldlinux.c32 ${TEMPDIR}/isolinux
fi
if [ -f ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/libcom32.c32 ];
then
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/libcom32.c32 ${TEMPDIR}/isolinux
fi
if [ -f ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/libutil.c32 ];
then
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/libutil.c32 ${TEMPDIR}/isolinux
fi
if [ -f ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/ifcpu64.c32 ];
then
cp -af ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/ifcpu64.c32 ${TEMPDIR}/isolinux
fi
cd ${TEMPDIR}
cd ..
${RACECAR_CHK}xorriso -as mkisofs \
`#-quiet` \
`#-joliet` \
`#-rock` \
`#-omit-version-number` \
`#-disable-deep-relocation` \
-iso-level 3 \
-full-iso9660-filenames \
-volid "${DISTNAME}" \
-appid "${DISTDESC}" \
-publisher "${DISTPUB}" \
`#-preparer "prepared by ${0}"` \
-preparer "prepared by ${DISTPUB}" \
-eltorito-boot isolinux/isolinux.bin \
-eltorito-catalog isolinux/boot.cat \
`#-isohybrid-mbr ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/isohdpfx.bin` \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-isohybrid-mbr ${BASEDIR}/root.x86_64/usr/lib/syslinux/bios/isohdpfx.bin \
-eltorito-alt-boot \
-e EFI/${DISTNAME}/efiboot.img \
-no-emul-boot \
`#--efi-boot EFI/${DISTNAME}/efiboot.img` \
-isohybrid-gpt-basdat \
-output "${ISODIR}/${ISOFILENAME}" "${TEMPDIR}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
## Build the mini-ISO ##
if [[ "${BUILDMINI}" == "y" ]];
then
echo "Now generating the iPXE images; please wait..."
## Get the latest version of ipxe from git.
git submodule init >> "${LOGFILE}.${FUNCNAME}" 2>&1
git submodule update >> "${LOGFILE}.${FUNCNAME}" 2>&1
cd ${BASEDIR}/src/ipxe/src
git checkout master .
git clean -xdf > /dev/null 2>&1
git reset --hard HEAD >> "${LOGFILE}.${FUNCNAME}" 2>&1
git checkout master >> "${LOGFILE}.${FUNCNAME}" 2>&1
git pull >> "${LOGFILE}.${FUNCNAME}" 2>&1
git checkout master >> "${LOGFILE}.${FUNCNAME}" 2>&1
# It will not build if we don't do this. Apparently we *need* libiberty.
# ...or do we?
#git revert -n 40a9a0f0
## Apply our patches.
# This replaces the 0003 and 0004 patches.
# curl -s https://patch-diff.githubusercontent.com/raw/ipxe/ipxe/pull/49.patch > ${BASEDIR}/src/ipxe_local/patches/ipxe-0003-no-PIE.patch 2>/dev/null # this isn't really necessary, I think? If you're dying right around this step, uncomment.
curl -s https://patch-diff.githubusercontent.com/raw/ipxe/ipxe/pull/50.patch > ${BASEDIR}/src/ipxe_local/patches/ipxe-0004-eiso.patch 2>/dev/null
for i in $(find ${BASEDIR}/src/ipxe_local/patches/ -type f -iname "*.patch" -printf '%P\n' | sort);
do
patch --verbose -Np2 < ${BASEDIR}/src/ipxe_local/patches/${i} >> "${LOGFILE}.${FUNCNAME}" 2>&1
done
## SSL
SSLDIR="${BASEDIR}/src/ipxe_local/ssl"
mkdir -p ${SSLDIR}/{keys,crts,txt}
chmod 000 ${SSLDIR}/keys
chown root:root ${SSLDIR}/keys
if [[ -z "${IPXE_SSL_CA}" && -z "${IPXE_SSL_KEY}" ]];
then
# Generate SSL CA
#rm -rf ${SSLDIR}/*
cd "${SSLDIR}"
IPXE_SSL_CA="${SSLDIR}/crts/ca.crt"
IPXE_SSL_CAKEY="${SSLDIR}/keys/ca.key"
IPXE_DOMAIN=$(echo ${IPXE_URI} | sed -re 's/^(f|ht)tps?:\/\/// ; s/\/.*//')
if [[ ! -f "${SSLDIR}/txt/ca.srl" ]];
then
echo 01 > ${SSLDIR}/txt/ca.srl
fi
touch ${SSLDIR}/txt/ca.idx
openssl req -days 3650 -subj "/CN=${IPXE_DOMAIN}/O=${PNAME}/C=NA" -x509 -newkey rsa:4096 -nodes -out ${IPXE_SSL_CA} -keyout ${IPXE_SSL_CAKEY} -sha512 >> "${LOGFILE}.${FUNCNAME}" 2>&1
openssl req -days 3650 -subj "/CN=${IPXE_DOMAIN}/O=${PNAME}/C=NA" -newkey rsa:4096 -keyout ${SSLDIR}/keys/server.key -nodes -out ${SSLDIR}/crts/server.csr -sha512 >> "${LOGFILE}.${FUNCNAME}" 2>&1
openssl ca -days 3650 -batch -config ${SSLDIR}/openssl.cnf -keyfile ${IPXE_SSL_CAKEY} -in ${SSLDIR}/crts/server.csr -out ${SSLDIR}/crts/server.crt >> "${LOGFILE}.${FUNCNAME}" 2>&1
#cat crts/server.crt crts/ca.crt > crts/server_chained.crt
elif [[ -z "${IPXE_SSL_CA}" && -e "${IPXE_SSL_CAKEY}" ]];
then
echo "ERROR: You specified IPXE_SSL_CAKEY but not IPXE_SSL_CA. If one is specified, the other must be also."
exit 1
elif [[ -z "${IPXE_SSL_CAKEY}" && -e "${IPXE_SSL_CA}" ]];
then
echo "ERROR: You specified IPXE_SSL_CA but not IPXE_SSL_CAKEY. If one is specified, the other must be also."
exit 1
elif [[ ! -e "${IPXE_SSL_CA}" || ! -e "${IPXE_SSL_CAKEY}" ]];
then
echo "ERROR: You have specified both IPXE_SSL_CA and IPXE_SSL_CAKEY but one (or both) are not valid paths/files."
exit 1
fi
if [[ -z "${IPXE_SSL_KEY}" && -z "${IPXE_SSL_CRT}" ]];
then
IPXE_SSL_KEY="${SSLDIR}/keys/client.key"
IPXE_SSL_CRT="${SSLDIR}/crts/client.crt"
IPXE_DOMAIN=$(echo ${IPXE_URI} | sed -re 's/^(f|ht)tps?:\/\/// ; s/\/.*//')
# Generate SSL client key.
openssl req -days 3650 -subj "/CN=${IPXE_DOMAIN}/O=${PNAME}/C=NA" -newkey rsa:4096 -keyout ${IPXE_SSL_KEY} -nodes -out ${SSLDIR}/crts/client.csr -sha512 >> "${LOGFILE}.${FUNCNAME}" 2>&1
# Sign the crt.
openssl ca -days 3650 -batch -config ${SSLDIR}/openssl.cnf -keyfile ${IPXE_SSL_CAKEY} -in ${SSLDIR}/crts/client.csr -out ${IPXE_SSL_CRT} >> "${LOGFILE}.${FUNCNAME}" 2>&1
elif [[ -z "${IPXE_SSL_CRT}" && -e "${IPXE_SSL_KEY}" ]];
then
echo "ERROR: You specified IPXE_SSL_KEY but not IPXE_SSL_CRT. If one is specified, the other must be also."
exit 1
elif [[ -z "${IPXE_SSL_KEY}" && -e "${IPXE_SSL_CRT}" ]];
then
echo "ERROR: You specified IPXE_SSL_CRT but not IPXE_SSL_KEY. If one is specified, the other must be also."
exit 1
elif [[ ! -e "${IPXE_SSL_CRT}" || ! -e "${IPXE_SSL_KEY}" ]];
then
echo "ERROR: You have specified both IPXE_SSL_CRT and IPXE_SSL_KEY but one (or both) are not valid paths/files."
exit 1
fi
cd ${BASEDIR}/src/ipxe/src
# Generate the iPXE EMBED script...
sed -re "s,^(chain\ ).*$,\1${IPXE_URI},g" \
-e 's/%%COMMA%%/,/g' ${BASEDIR}/src/ipxe_local/EMBED > ${SRCDIR}/EMBED
# And now we build!
#make everything EMBED="${SRCDIR}/EMBED" >> "${LOGFILE}.${FUNCNAME}" 2>&1
make bin-i386-efi/ipxe.efi bin-x86_64-efi/ipxe.efi \
EMBED="${SRCDIR}/EMBED" \
TRUST="${IPXE_SSL_CA}" \
CERT="${IPXE_SSL_CA},${IPXE_SSL_CRT}" \
PRIVKEY="${IPXE_SSL_KEY}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
make bin/ipxe.eiso bin/ipxe.usb \
EMBED="${SRCDIR}/EMBED" \
TRUST="${IPXE_SSL_CA}" \
CERT="${IPXE_SSL_CA},${IPXE_SSL_CRT}" \
PRIVKEY="${IPXE_SSL_KEY}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
# Change this to USB-only...
#make all EMBED="${BASEDIR}/src/ipxe_local/EMBED" >> "${LOGFILE}.${FUNCNAME}" 2>&1
mv -f ${BASEDIR}/src/ipxe/src/bin/ipxe.usb ${ISODIR}/${USBFILENAME}
mv -f ${BASEDIR}/src/ipxe/src/bin/ipxe.eiso ${ISODIR}/${MINIFILENAME}
make clean >> "${LOGFILE}.${FUNCNAME}" 2>&1
cd ${BASEDIR}/src/ipxe
git checkout master . > /dev/null 2>&1
git clean -xdf > /dev/null 2>&1
git reset --hard >> "${LOGFILE}.${FUNCNAME}" 2>&1
#git reset --hard HEAD > /dev/null 2>&1
echo
fi
#isohybrid ${ISOFILENAME}
cd ${ISODIR}
${RACECAR_CHK}sha256sum ${ISOFILENAME} > ${ISOFILENAME}.sha256
if [[ "${BUILDMINI}" == "y" ]];
then
${RACECAR_CHK}sha256sum ${MINIFILENAME} > ${MINIFILENAME}.sha256
${RACECAR_CHK}sha256sum ${USBFILENAME} > ${USBFILENAME}.sha256
fi
cd ..
echo "=ISO="
echo "Size: $(ls -lh ${ISODIR}/${ISOFILENAME} | awk '{print $5}')"
echo "SHA256: $(awk '{print $1}' ${ISODIR}/${ISOFILENAME}.sha256)"
echo "Location: ${ISODIR}/${ISOFILENAME}"
if [[ "${BUILDMINI}" == "y" ]];
then
echo "=Mini="
echo "Size: $(ls -lh ${ISODIR}/${MINIFILENAME} | awk '{print $5}')"
echo "SHA256: $(awk '{print $1}' ${ISODIR}/${MINIFILENAME}.sha256)"
echo "Location: ${ISODIR}/${MINIFILENAME}"
echo "=Mini USB="
echo "Size: $(ls -lh ${ISODIR}/${USBFILENAME} | awk '{print $5}')"
echo "SHA256: $(awk '{print $1}' ${ISODIR}/${USBFILENAME}.sha256)"
echo "Location: ${ISODIR}/${USBFILENAME}"
fi
#rm -rf ${TEMPDIR}/*
# are we rsyncing?
if [ -n "${RSYNC_HOST}" ];
then
echo
echo "Now sending to ${RSYNC_HOST} via rsync. This may take a while..."
echo "Sending TFTP files..."
rsync -az --info=progress2 ${TFTPDIR} ${RSYNC_HOST}:${RSYNC_DEST}/.
echo "Sending HTTP files..."
rsync -az --info=progress2 ${HTTPDIR} ${RSYNC_HOST}:${RSYNC_DEST}/.
# rsync -a ${TEMPDIR}/boot/${UXNAME}.* ${RSYNC_HOST}:${RSYNC_DEST}/http/.
echo "Sending the image files..."
rsync -az --info=progress2 ${ISODIR} ${RSYNC_HOST}:${RSYNC_DEST}/.
echo "Sending extra files..."
rsync -az --info=progress2 ${BASEDIR}/extra/packages.* ${RSYNC_HOST}:${RSYNC_DEST}/.
rsync -az --info=progress2 ${BASEDIR}/VERSION_INFO.txt ${RSYNC_HOST}:${RSYNC_DEST}/.
fi
}

View File

@@ -1,4 +1,7 @@
function mentos { function mentos {
FUNCNAME="mentos"
# Freshen up the chroots to git's HEAD. Package lists, overlay, etc. # Freshen up the chroots to git's HEAD. Package lists, overlay, etc.
sed -i -e '/base-devel/d ; /multilib-devel/d' ${BASEDIR}/extra/packages.* sed -i -e '/base-devel/d ; /multilib-devel/d' ${BASEDIR}/extra/packages.*
# both # both
@@ -19,7 +22,7 @@ function mentos {
RACECAR_CHK="" RACECAR_CHK=""
fi fi
if [[ -n $(find ${BASEDIR}/extra/pre-build.d/ -type f -newer ${BASEDIR}/root.x86_64/boot/vmlinuz-linux-${PNAME}) ]]; if [[ -n $(find ${BASEDIR}/extra/pre-build.d/ -type f -newer ${BASEDIR}/root.x86_64/boot/vmlinuz-linux-${DISTNAME}) ]];
then then
touch ${LOCKFILE} touch ${LOCKFILE}
sleep 2 sleep 2
@@ -33,17 +36,17 @@ function mentos {
for i in ${CHROOTDIR32} ${CHROOTDIR64}; for i in ${CHROOTDIR32} ${CHROOTDIR64};
do do
echo -n "...Packages installing/upgrading to ${i}..." echo -n "...Packages installing/upgrading to ${i}..."
local INSTKERN=$(file ${i}/boot/vmlinuz-linux-${PNAME} | awk '{print $9}' | cut -f1 -d"-") local INSTKERN=$(file ${i}/boot/vmlinuz-linux-${DISTNAME} | awk '{print $9}' | cut -f1 -d"-")
local MIRROR=$(egrep '^Server' ${i}/etc/pacman.d/mirrorlist | head -n1 | sed -e 's/^Server\ =\ //g ; s#$repo.*#core/os/x86_64/#g') local MIRROR=$(egrep '^Server' ${i}/etc/pacman.d/mirrorlist | head -n1 | sed -e 's/^Server\ =\ //g ; s#$repo.*#core/os/x86_64/#g')
local NEWKERN=$(curl -s "${MIRROR}" | grep linux | awk '{print $3}' | cut -f2 -d\" | egrep '^linux-[0-9].*pkg.tar.xz$' | cut -f2 -d"-") local NEWKERN=$(curl -s "${MIRROR}" | grep linux | awk '{print $3}' | cut -f2 -d\" | egrep '^linux-[0-9].*pkg.tar.xz$' | cut -f2 -d"-")
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done
${CHROOTCMD} ${i}/ bash -c "${RACECAR_CHK}apacman --noconfirm --noedit --skipinteg -S --needed --ignore linux ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ bash -c "${RACECAR_CHK}apacman --noconfirm --noedit --skipinteg -S --needed --purgebuild --ignore linux ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done for x in $(find ${i}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done
${CHROOTCMD} ${i}/ /usr/bin/bash -c "mkinitcpio -p linux" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${i}/ /usr/bin/bash -c "mkinitcpio -p linux" >> "${LOGFILE}.${FUNCNAME}" 2>&1
#${CHROOTCMD} ${i}/ bash -c "apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" #${CHROOTCMD} ${i}/ bash -c "apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}"
cp -a ${i}/boot/vmlinuz-linux ${i}/boot/vmlinuz-linux-${PNAME} cp -a ${i}/boot/vmlinuz-linux ${i}/boot/vmlinuz-linux-${DISTNAME}
cp -a ${i}/boot/initramfs-linux.img ${i}/boot/initramfs-linux-${PNAME}.img cp -a ${i}/boot/initramfs-linux.img ${i}/boot/initramfs-linux-${DISTNAME}.img
echo "Done." echo "Done."
done done
@@ -53,7 +56,7 @@ function mentos {
PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.32 | tr '\n' ' ') PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.32 | tr '\n' ' ')
if [ -n "${PKGLIST}" ]; if [ -n "${PKGLIST}" ];
then then
${CHROOTCMD} ${CHROOTDIR32}/ bash -c "yes '' | ${RACECAR_CHK}apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${CHROOTDIR32}/ bash -c "yes '' | ${RACECAR_CHK}apacman --noconfirm --noedit --skipinteg -S --needed --purgebuild ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi fi
for x in $(find ${CHROOTDIR32}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done for x in $(find ${CHROOTDIR32}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done
@@ -62,7 +65,7 @@ function mentos {
PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.64 | tr '\n' ' ') PKGLIST=$(sed -e '/^[[:space:]]*#/d ; /^[[:space:]]*$/d' ${BASEDIR}/extra/packages.64 | tr '\n' ' ')
if [ -n "${PKGLIST}" ]; if [ -n "${PKGLIST}" ];
then then
${CHROOTCMD} ${CHROOTDIR64}/ bash -c "yes '' | ${RACECAR_CHK}apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1 ${CHROOTCMD} ${CHROOTDIR64}/ bash -c "yes '' | ${RACECAR_CHK}apacman --noconfirm --noedit --skipinteg -S --needed --purgebuild ${PKGLIST}" >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi fi
for x in $(find ${CHROOTDIR64}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done for x in $(find ${CHROOTDIR64}/etc/ -type f -iname "*.pacorig");do mv -f ${x} ${x%.pacorig} ; done
#${CHROOTCMD} ${CHROOTDIR64}/ bash -c "apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}" #${CHROOTCMD} ${CHROOTDIR64}/ bash -c "apacman --noconfirm --noedit --skipinteg -S --needed ${PKGLIST}"

27
lib/prereqs/Antergos/meta Normal file
View File

@@ -0,0 +1,27 @@
NAME='Antergos'
SUPPORTED='yes'
CHECK_METHOD='egrep "^NAME=\"Antergos Linux\"$" /etc/os-release'
PKG_MGR='pacman -S --needed --noconfirm ${pkgname}'
PRE_RUN='pacman -Syyy'
PKG_CHK='pacman -Q ${pkgname}'
URL='http://antergos.com/'
function distro_specific_tweaks {
# For some reason, I can't get "yes y | " to parse correctly with eval. And Arch isn't smart enough
# to figure out that if I enable the multilib repos, *I want multilib gcc*. Fuck it. We'll just remove it first.
pacman -S --needed --noconfirm haveged >> "${LOGFILE}.${FUNCNAME}" 2>&1
haveged
set +e
for pkg_override in gcc gcc-libs;
do
pacman -Q ${pkg_override} >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" == "0" ]];
then
pacman -Rdd --noconfirm ${pkg_override} >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
done
set -e
}

1
lib/prereqs/Antergos/pkgs Symbolic link
View File

@@ -0,0 +1 @@
../Arch/pkgs

27
lib/prereqs/Arch/meta Normal file
View File

@@ -0,0 +1,27 @@
NAME='Arch'
SUPPORTED='yes'
CHECK_METHOD='egrep "^NAME=\"Arch Linux\"$" /etc/os-release'
PKG_MGR='pacman -S --needed --noconfirm ${pkgname}'
PRE_RUN='pacman -Syyy'
PKG_CHK='pacman -Q ${pkgname}'
URL='https://www.archlinux.org/'
function distro_specific_tweaks {
# For some reason, I can't get "yes y | " to parse correctly with eval. And Arch isn't smart enough
# to figure out that if I enable the multilib repos, *I want multilib gcc*. Fuck it. We'll just remove it first.
pacman -S --needed --noconfirm haveged >> "${LOGFILE}.${FUNCNAME}" 2>&1
haveged
set +e
for pkg_override in gcc gcc-libs;
do
pacman -Q ${pkg_override} >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" == "0" ]];
then
pacman -Rdd --noconfirm ${pkg_override} >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
done
set -e
}

19
lib/prereqs/Arch/pkgs Normal file
View File

@@ -0,0 +1,19 @@
binutils
curl
dosfstools
findutils
gcc-libs-multilib
gcc-multilib
git
libisoburn
lynx
make
mtools
patch
perl
rsync
sed
squashfs-tools
syslinux
xz
zlib

17
lib/prereqs/CentOS/meta Normal file
View File

@@ -0,0 +1,17 @@
NAME='CentOS'
# Currently fails on installing software *inside* the chroot. Will troubleshoot and restore when figured out.
SUPPORTED='yes'
CHECK_METHOD='egrep "^CentOS" /etc/redhat-release'
PKG_MGR='yum -y install ${pkgname}'
PRE_RUN='none'
PKG_CHK='rpm -q ${pkgname} | egrep "^${pkgname}-[0-9]"'
URL='http://centos.org/'
function distro_specific_tweaks {
# NOTE: we handle installing of squashfs-tools (maybe) and xorriso in centos_is_stupid function.
# because they *suck*. Seriously. I need to install tk just to install xorriso. I mean, what?
# You need EPEL enabled, by the way.
echo "No tweaks found."
}

1
lib/prereqs/CentOS/pkgs Symbolic link
View File

@@ -0,0 +1 @@
../RHEL/pkgs

13
lib/prereqs/Debian/meta Normal file
View File

@@ -0,0 +1,13 @@
NAME='Debian'
SUPPORTED='yes'
CHECK_METHOD='egrep "^NAME=\"Debian\ GNU/Linux\"$" /etc/os-release'
PKG_MGR='apt-get -y install ${pkgname}'
PRE_RUN='apt-get update'
PKG_CHK='dpkg-query -l ${pkgname} | egrep "^ii[[:space:]]*${pkgname}"'
URL='http://www.debian.org/'
function distro_specific_tweaks {
echo "No tweaks found."
}

26
lib/prereqs/Debian/pkgs Normal file
View File

@@ -0,0 +1,26 @@
binutils
binutils-dev
curl
dosfstools
gcc
gcc-multilib
git
isolinux
libiberty-dev
libisoburn1
lynx
liblzma5
liblzma-dev
make
mtools
patch
perl
rsync
sed
squashfs-tools
syslinux
syslinux-efi
xorriso
xz-utils
zlib1g
zlib1g-dev

14
lib/prereqs/Devuan/meta Normal file
View File

@@ -0,0 +1,14 @@
NAME='Devuan'
SUPPORTED='no'
CHECK_METHOD='egrep "^NAME=\"Devuan\ GNU/Linux\"$" /etc/os-release'
PKG_MGR='apt-get -y install ${pkgname}'
PRE_RUN='apt-get update'
PKG_CHK='dpkg-query -l ${pkgname} | egrep "^ii[[:space:]]*${pkgname}"'
URL='http://www.debian.org/'
function distro_specific_tweaks {
echo "No tweaks found."
}

1
lib/prereqs/Devuan/pkgs Symbolic link
View File

@@ -0,0 +1 @@
../Debian/pkgs

14
lib/prereqs/Fedora/meta Normal file
View File

@@ -0,0 +1,14 @@
NAME='Fedora'
SUPPORTED='yes'
CHECK_METHOD='egrep '^Fedora' /etc/redhat-release'
PKG_MGR='dnf -y install ${pkgname}'
PRE_RUN='none'
PKG_CHK='rpm -q ${pkgname} | egrep "^${pkgname}-[0-9]"'
URL='https://getfedora.org/'
function distro_specific_tweaks {
echo "No tweaks found."
}

23
lib/prereqs/Fedora/pkgs Normal file
View File

@@ -0,0 +1,23 @@
binutils
binutils-devel
curl
dosfstools
gcc
git
libisofs
lynx
make
mtools
patch
perl
rsync
sed
squashfs-tools
syslinux
syslinux-devel
tar
xorriso
xz
xz-devel
zlib
zlib-devel

20
lib/prereqs/Gentoo/meta Normal file
View File

@@ -0,0 +1,20 @@
NAME='Gentoo'
SUPPORTED='yes'
CHECK_METHOD='egrep "^Gentoo\ Base\ System" /etc/gentoo-release'
PKG_MGR='emerge -q1Dn ${pkgname}'
PRE_RUN='emerge -q --sync'
PKG_CHK='emerge -qp @installed 2>/dev/null | egrep -E "/${pkgname}-[0-9.]+"'
URL='https://www.gentoo.org/'
function distro_specific_tweaks {
# WHY IS THIS EVEN MASKED?!
set +e
grep -q 'app-arch/lzma' /etc/portage/package.accept_keywords
if [[ "${?}" != "0" ]];
then
echo 'app-arch/lzma' >> /etc/portage/package.accept_keywords
fi
set -e
}

18
lib/prereqs/Gentoo/pkgs Normal file
View File

@@ -0,0 +1,18 @@
sys-devel/binutils
net-misc/curl
sys-fs/dosfstools
sys-devel/gcc
dev-vcs/git
dev-libs/libisoburn
www-client/lynx
app-arch/lzma
sys-devel/make
sys-fs/mtools
sys-devel/patch
dev-lang/perl
net-misc/rsync
sys-apps/sed
sys-fs/squashfs-tools
sys-boot/syslinux
app-arch/xz-utils
sys-libs/zlib

19
lib/prereqs/HUMAN Normal file
View File

@@ -0,0 +1,19 @@
This directory is used to enable cross-distro support and set baseline ISO packages needed for it to boot. A list of packages is needed for the *host* to build the ISO as well, which you'll find detailed below. Adding distro support is easy; there simply needs to be the following added:
<basedir>/lib/prereqs/<Distro>/{meta,pkgs}
"pkgs" should contain a list of the specific package names needed to install for that specific distro (as this isn't always standardized).
"meta" is a file consisting of the following variables (enclosed in single or double quotes, please:
NAME=<Distro - this should match the name of the directory this file is in!>
SUPPORTED=<yes or no- yes by default>
CHECK_METHOD=<a command that will be run that should return '0' (success) on *only* this specific distro
(or fully compatible derivatives, i.e. CentOS/RHEL)>
PKG_MGR=<a command used to prefix installation of packages e.g. for RHEL, "yum -y install">
PRE_RUN=<a command to be run before PKG_MGR (e.g. on Ubuntu, "apt-get update"). commonly used to update package caches/metadata.
if your distro does not require this, set PRE_RUN=none >
PKG_CHK=<a command that will be run that should return '0' (success) *only* if any given package in the pkgs file is installed. e.g. for RHEL, "rpm -q">
URL=<the URL for the distro. optional, as it isn't really used as any active part of the scripts- at least not presently.>
Oh- and your distro *must be able to install the package*. That means if you need to enable/add additional repositories, be sure to do so ahead of time.

14
lib/prereqs/Mageia/meta Normal file
View File

@@ -0,0 +1,14 @@
NAME='Mageia'
SUPPORTED='yes'
CHECK_METHOD='egrep "^Mageia\ release\ " /etc/mageia-release'
PKG_MGR='urpmi --force --auto ${pkgname}'
PRE_RUN='urpmi.update -a'
PKG_CHK='rpm -q ${pkgname} | egrep "^${pkgname}-[0-9]"'
URL='https://www.mageia.org/'
function distro_specific_tweaks {
echo "No tweaks found."
}

27
lib/prereqs/Mageia/pkgs Normal file
View File

@@ -0,0 +1,27 @@
binutils
binutils-devel
curl
gcc
git
lib64isofs6
lib64apr1_0
lib64apr-util1_0
lib64lzma5
lib64lzma-devel
lib64lzmalib1
lib64lzmalib-devel
libstdc++-devel
lynx
make
mtools
patch
perl
rsync
sed
squashfs-tools
syslinux
syslinux-devel
xorriso
xz
zlib
zlib-devel

28
lib/prereqs/Manjaro/meta Normal file
View File

@@ -0,0 +1,28 @@
NAME='Manjaro'
SUPPORTED='yes'
CHECK_METHOD='egrep "^NAME=\"Manjaro Linux\"$" /etc/os-release'
PKG_MGR='pacman -S --needed --noconfirm ${pkgname}'
PRE_RUN='pacman -Syyy --noconfirm'
PKG_CHK='pacman -Q ${pkgname}'
URL='https://manjaro.org/'
function distro_specific_tweaks {
# For some reason, I can't get "yes y | " to parse correctly with eval. And Arch isn't smart enough
# to figure out that if I enable the multilib repos, *I want multilib gcc*. Fuck it. We'll just remove it first.
pacman -S --needed --noconfirm haveged >> "${LOGFILE}.${FUNCNAME}" 2>&1
haveged
set +e
for pkg_override in gcc gcc-libs;
do
pacman -Q ${pkg_override} >> "${LOGFILE}.${FUNCNAME}" 2>&1
if [[ "${?}" == "0" ]];
then
pacman -Rdd --noconfirm ${pkg_override} >> "${LOGFILE}.${FUNCNAME}" 2>&1
pacman -S --noconfirm ${pkg_override}-multilib >> "${LOGFILE}.${FUNCNAME}" 2>&1
fi
done
set -e
}

1
lib/prereqs/Manjaro/pkgs Symbolic link
View File

@@ -0,0 +1 @@
../Arch/pkgs

14
lib/prereqs/Mint/meta Normal file
View File

@@ -0,0 +1,14 @@
NAME='Mint'
SUPPORTED='no'
# Needs non-systemd chroot method
CHECK_METHOD='egrep "^DESCRIPTION=\"Linux\ Mint" /etc/linuxmint/info'
PKG_MGR='apt-get -y install ${pkgname}'
PRE_RUN='apt-get -y update'
PKG_CHK='dpkg-query -l ${pkgname}'
URL='http://www.linuxmint.com/'
function distro_specific_tweaks {
echo "No tweaks found."
}

1
lib/prereqs/Mint/pkgs Symbolic link
View File

@@ -0,0 +1 @@
../Ubuntu/pkgs

15
lib/prereqs/RHEL/meta Normal file
View File

@@ -0,0 +1,15 @@
NAME='RHEL'
SUPPORTED='yes'
# Red Hat Enterprise Linux Server release 6.5 (Santiago)
CHECK_METHOD='egrep "^Red\ Hat\ Enterprise\ Linux" /etc/redhat-release'
PKG_MGR='yum -y install'
PRE_RUN='none'
PKG_CHK='rpm -q ${pkgname} | egrep "^${pkgname}-[0-9]"'
URL='http://www.redhat.com/en/technologies/linux-platforms/enterprise-linux'
function distro_specific_tweaks {
echo "No tweaks found."
}

21
lib/prereqs/RHEL/pkgs Normal file
View File

@@ -0,0 +1,21 @@
binutils
binutils-devel
curl
dosfstools
gcc
git
libisofs
lynx
make
mtools
patch
perl
rsync
sed
squashfs-tools
syslinux
syslinux-devel
xz
xz-devel
zlib
zlib-devel

16
lib/prereqs/SUSE/meta Normal file
View File

@@ -0,0 +1,16 @@
NAME='SUSE'
SUPPORTED='yes'
# Both SLED and SLES. We can probably safely combine them.
CHECK_METHOD='egrep "^NAME=\"SLE(D|S)\"$" /etc/os-release'
PKG_MGR='zypper install --no-confirm -l ${pkgname}'
PRE_RUN='zypper refresh'
PKG_CHK='rpm -q ${pkgname} | egrep "^${pkgname}-[0-9]"'
URL='https://www.suse.com/'
function distro_specific_tweaks {
# See the centos_is_stupid function. we do some tweaks there since -devel pkgs require the SDK on SLES/SLED.
echo "No tweaks found."
}

1
lib/prereqs/SUSE/pkgs Symbolic link
View File

@@ -0,0 +1 @@
../openSUSE/pkgs

14
lib/prereqs/Ubuntu/meta Normal file
View File

@@ -0,0 +1,14 @@
NAME='Ubuntu'
SUPPORTED='yes'
CHECK_METHOD='egrep "^DISTRIB_ID=Ubuntu$" /etc/lsb-release'
PKG_MGR='apt-get -y install ${pkgname}'
PRE_RUN='apt-get -y update'
PKG_CHK='dpkg-query -l ${pkgname} | egrep "^ii[[:space:]]*${pkgname}"'
URL='http://www.ubuntu.com/'
function distro_specific_tweaks {
echo "No tweaks found."
}

25
lib/prereqs/Ubuntu/pkgs Normal file
View File

@@ -0,0 +1,25 @@
binutils
binutils-dev
curl
dosfstools
gcc
gcc-multilib
git
isolinux
libiberty-dev
libisoburn1
lynx
liblzma5
liblzma-dev
make
mtools
patch
perl
rsync
sed
squashfs-tools
syslinux
xorriso
xz-utils
zlib1g
zlib1g-dev

View File

@@ -0,0 +1,14 @@
NAME='elementaryOS'
SUPPORTED='no'
CHECK_METHOD='egrep "^DISTRIB_ID=\"elementary OS\"$" /etc/lsb-release'
PKG_MGR='apt-get -y install ${pkgname}'
PRE_RUN='apt-get -y update'
PKG_CHK='dpkg-query -l ${pkgname} | egrep "^ii[[:space:]]*${pkgname}"'
URL='https://elementary.io/'
function distro_specific_tweaks {
echo "No tweaks found."
}

View File

@@ -0,0 +1 @@
../Ubuntu/pkgs

39
lib/prereqs/iso.pkgs.lst Normal file
View File

@@ -0,0 +1,39 @@
arch-install-scripts
archiso
bzip2
coreutils
cronie
dhclient
dhcp
dhcpcd
dosfstools
efibootmgr
efitools
efivar
ethtool
file
findutils
iproute2
iputils
libisoburn
localepurge
lz4
lzo
lzop
mkinitcpio-nfs-utils
ms-sys
mtools
net-tools
netctl
networkmanager
openssh
openvpn
pv
rsync
sed
shorewall
squashfs-tools
sudo
sysfsutils
syslinux
traceroute

View File

@@ -0,0 +1 @@
# This can be used for 32-bit only packages

View File

@@ -0,0 +1 @@
# This can be used for 64-bit only packages

15
lib/prereqs/openSUSE/meta Normal file
View File

@@ -0,0 +1,15 @@
NAME='openSUSE'
SUPPORTED='yes'
# Default doesn't have the quotes around the value, but I have a feeling that's a bug that will get "fixed" soon.
CHECK_METHOD='egrep "^NAME=\"?openSUSE\"?$" /etc/os-release'
PKG_MGR='zypper install --no-confirm -l ${pkgname}'
PRE_RUN='zypper refresh'
PKG_CHK='rpm -q ${pkgname} | egrep "^${pkgname}-[0-9]"'
URL='https://www.opensuse.org/'
function distro_specific_tweaks {
echo "No tweaks found."
}

22
lib/prereqs/openSUSE/pkgs Normal file
View File

@@ -0,0 +1,22 @@
binutils
binutils-devel
binutils-devel-32bit
curl
dosfstools
gcc
gcc-32bit
git
libisoburn1
libisofs6
lynx
make
mtools
patch
perl
rsync
sed
squashfs
syslinux
xz
xz-devel
xz-devel-32bit

View File

@@ -50,9 +50,10 @@ echo "==================================="
date date
if [ -n "${DEFROUTEIF}" ]; if [ -n "${DEFROUTEIF}" ];
then 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
echo -n "${DEFROUTEIF} is: " echo -n "${DEFROUTEIF} (${HWADDR}) is: ${IPADDR}"
ifconfig "${DEFROUTEIF}" | egrep 'inet|ether' | grep -v "inet6" | awk '{print $2}'
fi fi
echo echo
echo -n "tun0 is:" echo -n "tun0 is:"

View File

@@ -1,9 +1,54 @@
#/bin/sh - #/bin/sh -
#chmod 4755 /opt/google/chrome-beta/chrome-sandbox #chmod 4755 /opt/google/chrome-beta/chrome-sandbox
mkdir -p /var/db/sudo/lectured
touch /var/db/sudo/lectured/bdisk
chmod 700 /var/db/sudo/lectured
chgrp bdisk /var/db/sudo/lectured/bdisk
chmod 600 /var/db/sudo/lectured/bdisk
chmod 4755 /usr/bin/sudo chmod 4755 /usr/bin/sudo
function fuck_you_gimme_net() {
IFACE=$(ifconfig -a -s | egrep -E '^((en|wl)p?|em)' | awk '{print $1}' | tr '\n' ' ' | sed -e 's/\ $//g')
for i in ${IFACE};
do
LINK_STATE=$(ethtool ${i} | egrep '^[[:space:]]*Link' | sed -re 's/^[[:space:]]*Link detected:(.*)/\1/g')
DEV=$(echo ${i} | sed -re 's/^([A-Za-z]{1}).*/\1/g' | tr '[[:upper:]]' '[[:lower:]]' )
if [ "${DEV}" == "e" ];
then
if [ "${LINK_STATE}" != "no" ];
then
DEV='ethernet-dhcp'
else
# skip disconnected ethernet
continue
fi
else
DEV='wireless-open'
fi
ifconfig ${i} down
cp -a /etc/netctl/examples/${DEV} /etc/netctl/${i}
sed -i -re "s/^([[:space:]]*Interface[[:space:]]*=).*/\1${i}/g" /etc/netctl/${i}
if [ "${DEV}" == "wireless-open" ];
then
ifconfig ${i} up && \
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}
ifconfig ${i} down
fi
netctl restart ${i} > /dev/null 2>&1
#cat /etc/resolvconf.conf.failover > /etc/resolvconf.conf
#resolvconf -u
done
}
ping -c1 google.com | grep -q '1 received'
if [[ "${?}" != "0" ]];
then
fuck_you_gimme_net
systemctl restart openvpn@*
fi
# And lastly, do we need to set custom DNS servers?
host -s -W1 bdisk.square-r00t.net | egrep -q '^bdisk\.square-r00t\.net\ has\ address'
if [[ "${?}" != "0" ]];
then
resolvconf -u
fi

Some files were not shown because too many files have changed in this diff Show More