summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dev.mdwn17
-rw-r--r--dev/archive/mirroring.mdwn108
-rw-r--r--dev/multiarch.mdwn180
-rw-r--r--dev/opkbuild.mdwn14
-rw-r--r--dev/opkhelper.mdwn5
-rw-r--r--dev/opkhelper/oh-architecture.1.mdwn8
-rw-r--r--dev/opkhelper/oh-autobuild.1.mdwn14
-rw-r--r--dev/opkhelper/oh-autoclean.1.mdwn14
-rw-r--r--dev/opkhelper/oh-autoconfigure.1.mdwn12
-rw-r--r--dev/opkhelper/oh-autoinstall.1.mdwn16
-rw-r--r--dev/opkhelper/oh-autotest.1.mdwn10
-rw-r--r--dev/opkhelper/oh-fixperms.1.mdwn7
-rw-r--r--dev/opkhelper/oh-installfiles.1.mdwn6
-rw-r--r--dev/opkhelper/oh-shlibdeps.1.mdwn63
-rw-r--r--dev/opkhelper/oh-strip.1.mdwn9
-rw-r--r--dev/prokit.mdwn6
-rw-r--r--dev/prokit/prokit-build.8.mdwn15
-rw-r--r--dev/prokit/prokit-help.1.mdwn8
-rw-r--r--dev/prokit/prokit-install.8.mdwn26
-rw-r--r--dev/prokit/prokit-installer-pc.8.mdwn122
-rw-r--r--dev/prokit/prokit-mkinitramfs.8.mdwn110
-rw-r--r--dev/prokit/prokit-opkg.8.mdwn16
-rw-r--r--dev/prokit/prokit-shell.8.mdwn25
-rw-r--r--dev/prokit/prokit-version.1.mdwn6
-rw-r--r--dev/prokit/prokit.1.mdwn22
-rw-r--r--dev/releases/1/packages.mdwn96
-rw-r--r--dev/todo/install-bb-without-bb.mdwn86
-rw-r--r--dev/wolfutil.mdwn48
-rw-r--r--doc/install.mdwn8
-rw-r--r--doc/install/chroot.mdwn47
-rw-r--r--doc/install/jail.mdwn44
-rw-r--r--doc/install/pc.mdwn22
-rw-r--r--doc/install/prokit.mdwn81
-rw-r--r--doc/plat/porting.mdwn74
-rw-r--r--templates/page.tmpl4
35 files changed, 1042 insertions, 307 deletions
diff --git a/dev.mdwn b/dev.mdwn
index c2a910b..3b7be79 100644
--- a/dev.mdwn
+++ b/dev.mdwn
@@ -18,26 +18,21 @@ programs and libraries to be built and installed on users' systems.
Source packages have a documented [format][spf-2.0], and
[[tutorials_on_packaging|doc/pkg]] are available.
-There is always [[more_software_to_be_packaged|dev/pkg/needed]], and
-[[one_package|dev/pkg/spf-2.0]] needs to be updated to the latest package
-format. [15 packages][src_pkgs_spring2015] prepared by a team of students in
-the spring 2015 NJIT CCS Capstone program need to be reviewed for uploading to
-the package archive.
+There is always [[more_software_to_be_packaged|dev/pkg/needed]] (including Perl
+5 with cross building support), and [[one_package|dev/pkg/spf-2.0]] needs to be
+updated to the latest package format. [15 packages][src_pkgs_spring2015]
+prepared by a team of students in the spring 2015 NJIT CCS Capstone program need
+to be reviewed for uploading to the package archive.
But the work doesn't end after a package is prepared and uploaded; maintaining
existing packages is also important and neverending work. ProteanOS currently
-has [[81_source_packages_(403_binary_packages)|dev/releases/1/packages]] in its
+has [[94_source_packages_(388_binary_packages)|dev/releases/1/packages]] in its
package archive (with more not yet uploaded). Many of these have newer upstream
versions and can be updated. Some have patches that can be dropped when
updating to a newer upstream version. Some others (e.g. the toolchain packages)
have patches that may be of interest outside ProteanOS but have not yet been
submitted upstream.
-Some packages have development problems that will eventually need to be solved,
-such as [[cross_building_Perl_5|dev/pkg/needed]],
-[[multiple_tasks|dev/pkg/opkg]] in the `opkg` packaging, and adding support in
-opkg for installing packages built for foreign architectures.
-
Most source packages are maintained in [Git repositories][git-pkg]. You can
request a repository for your package on the [mailing list][proteanos-dev]. To
make changes to a package, it is recommended that you send patches to the
diff --git a/dev/archive/mirroring.mdwn b/dev/archive/mirroring.mdwn
index 9d2b38a..deabb91 100644
--- a/dev/archive/mirroring.mdwn
+++ b/dev/archive/mirroring.mdwn
@@ -1,53 +1,117 @@
[[!meta title="Mirroring the ProteanOS Package Archive"]]
-Running a mirror of the ProteanOS package archive contributes to the
+Running a public mirror of the ProteanOS package archive contributes to the
availability of ProteanOS.
-You can keep your mirror private or make it an official mirror.
+Organizations deploying many ProteanOS systems are encouraged to make local
+mirrors, which they may keep private or make public, to save bandwidth on both
+their and ProteanOS's infrastructure.
Setting up a Mirror
===================
-A mirror takes about 700 MiB of storage space as of this writing and should be
+Overview
+--------
+
+*(Impatient mirror administrators may skip this informational section and read
+the instructional sections below.)*
+
+A mirror takes about 730 MiB of storage space as of this writing and should be
expected to grow beyond that.
-The following command will list files in the archive:
+The curious may view a list of files in the archive with the following command:
$ rsync --recursive --exclude .db rsync://files.proteanos.com/proteanos
-The following command will mirror the archive:
-
- $ rsync --recursive --times --delete --exclude .db \
- > rsync://files.proteanos.com/proteanos /path/to/your/mirror/directory/
+See below for commands to copy archive files to a local mirror.
-Packages are moved from incoming into the archive four times daily. The
+Packages are processed from the incoming queue into the archive four times
+daily, so mirrors need not be updated more frequently than that. The
[[archive_management_software|dev/pro-archman]] is [configured][arch-conf] to
keep unreferenced files in the pool for one day, so mirrors must be updated at
least once a day. Otherwise, during the update, some feed index files may
-reference deleted files.
+reference deleted files. Updating at least twice daily is recommended, in case
+the synchronization source is ever temporarily unreachable.
+
+Serving the archive mirror at `/pub/proteanos` over HTTP and FTP is recommended,
+but any path and either protocol may be used. HTTP Strict Transport Security
+(HSTS) must not be used except on private mirrors used by ProteanOS systems
+known to install the `wolfssl-util` package. The ProteanOS package archive is
+already [cryptographically verified][archive-signing] using software smaller
+than a TLS implementation.
+
+Mirrors are classified by their synchronization source as either "primary" or
+"secondary" as described below. This design distributes synchronization
+bandwidth usage more efficiently across the mirror network. Secondary mirrors
+will typically update a few hours after primary mirrors do, but are otherwise
+still "first-class citizens". All mirrors regardless of classification are
+treated equally by [[dev/prokit]], the installer utility that selects a mirror.
+
+Please configure private mirrors as secondary mirrors, so as to reserve
+ProteanOS project bandwidth for those that contribute bandwidth back to the
+project.
[arch-conf]: http://files.proteanos.com/pub/proteanos/conf
+[archive-signing]:http://lists.proteanos.com/proteanos-dev/2019/04/msg00008.html
+
+Primary Public Mirror
+---------------------
+
+Primary mirrors are those that synchronize directly from
+<files.proteanos.com> and must serve their contents publicly over HTTP
+(without HSTS) and rsync and may also serve over anonymous FTP as defined by
+[IETF RFC 1635][rfc1635] with no password requirements.
+
+Run the following command one to four times (four times preferred) daily to
+synchronize your mirror:
+
+ $ rsync --recursive --times --delete --exclude .db \
+ > rsync://files.proteanos.com/proteanos /path/to/your/mirror/directory/
+
+Secondary Public or Private Mirror
+----------------------------------
+Secondary mirrors are those that synchronize from a primary mirror and serve
+their contents either publicly or privately. Public mirrors must serve over
+HTTP (without HSTS) and may also serve over anonymous FTP as defined by [IETF
+RFC 1635][rfc1635] with no password requirements. Private mirrors may serve
+over either protocol.
-Making an Official Mirror
-=========================
+Run the following command one to four times (four times preferred) daily to
+synchronize your mirror:
+
+ $ rsync --recursive --times --delete --exclude .db \
+ > ${src} /path/to/your/mirror/directory/
-Official mirror sites should make their archive mirrors available at
-`/pub/proteanos` over HTTP and FTP. Sites should also make their archive
-mirrors accessible over rsync, if possible.
+Where `${src}` is any primary mirror in the [rsync mirrors list][mirrors-rsync].
+Please try to select a primary mirror that is being used by few or no other
+secondary mirrors, to evenly spread the load across the primary mirrors.
-Once your mirror is set up, please announce it to the [ProteanOS development
-mailing list][proteanos-dev] ([list info][proteanos-dev-info]). Please include
-the following information in your announcement:
+[rfc1635]: https://tools.ietf.org/html/rfc1635
+
+
+Announcing a Public Mirror
+==========================
+
+After setting up a public mirror, please announce it to the [ProteanOS
+development mailing list][proteanos-dev] ([list info][proteanos-dev-info]).
+Please include the following information in your announcement:
* Name and e-mail address of site maintainer;
* Name and URL of site sponsor, if any;
- * Domain name, or IPv4 and/or IPv6 address, of mirror site;
- * Available protocols;
- * Country of site;
- * Frequency of mirroring; and
+ * URIs of mirror site (HTTP and/or FTP, and rsync for primary mirrors);
+ * Location (country at a minimum) of site;
+ * Synchronization frequency (or times);
+ * Synchronization source, in the case of a secondary mirror; and
* Any other comments about the site.
+Your mirror will be reviewed and added to the official mirror lists
+([HTTP][mirrors-http] and [FTP][mirrors-ftp] used by [[dev/prokit]], as well as
+[rsync][mirrors-rsync] referenced above).
+
[proteanos-dev]: mailto:proteanos-dev@lists.proteanos.com
[proteanos-dev-info]: http://lists.proteanos.com/proteanos-dev/
+[mirrors-http]: http://files.proteanos.com/pub/proteanos-mirrors-http
+[mirrors-ftp]: http://files.proteanos.com/pub/proteanos-mirrors-ftp
+[mirrors-rsync]: http://files.proteanos.com/pub/proteanos-mirrors-rsync
diff --git a/dev/multiarch.mdwn b/dev/multiarch.mdwn
new file mode 100644
index 0000000..d869a7d
--- /dev/null
+++ b/dev/multiarch.mdwn
@@ -0,0 +1,180 @@
+[[!meta title="Multiarch Design"]]
+
+Earlier design proposals are documented in [[another_page|dev/multiarch/design]]
+kept for historical purposes.
+
+
+Background
+==========
+
+ProteanOS is a self-hosting binary distribution that builds its own packages.
+It is also an embedded distribution, intended to be suitable for small
+resource-limited systems. It may not be practical to natively build all of
+ProteanOS on real hardware for every architecture to be supported. Thus, it
+will be preferable to cross-build all of ProteanOS's packages, making ProteanOS
+a highly ambitious cross-built self-hosting binary distribution.
+
+Cross-compiling and cross-assembling self-contained code is a solved problem,
+however programs typically use separately built libraries, which must be
+installed at build time to be available for compiling and linking. Sometimes,
+these dependency libraries will already be installed for use by the native
+system. So it needs to be possible to "coinstall" different architecture builds
+of each library. Package management and build tools also need to be able to
+install dependency packages of the correct architecture; for example, libraries
+must be of the *host* architecture (the architecture **for** which a package is
+being built), but build utilities must be of the *build* architecture (the
+architecture **on** which a package is being built). Further complicating
+dependency resolution, such build utilities often themselves depend on
+libraries, which must also be of the build architecture (not the host
+architecture like libraries that are direct build-dependencies). These are the
+two main problems in cross-building distribution packages: coinstallability and
+dependencies. The solution is a design known as "multiarch".
+
+ProteanOS's multiarch design is inspired by, but different from, that
+[specified][wuc-mas] and [documented][wdo-ma] in Debian and Ubuntu.
+
+ProteanOS's design solves the coinstallability and dependency problems without
+*any* modifications to its package manager, opkg-lede. This is desirable
+because opkg-lede is a tool used by many distributions separate from ProteanOS,
+and its upstream maintainers (OpenWrt) would likely be unwilling to merge and
+maintain invasive patches specific to a different distribution (making the
+patches impossible to test upstream).
+
+[wdo-ma]: http://wiki.debian.org/Multiarch
+[wuc-mas]: https://wiki.ubuntu.com/MultiarchSpec
+
+
+Design
+======
+
+Coinstallability
+----------------
+
+opkg-lede doesn't allow multiple packages to provide the same file path, so, in
+order to be coinstallable, library packages must install all of their files into
+architecture-qualified locations. [Debian and Ubuntu][wuc-mas-arch-indep-files]
+limit this requirement to only files whose contents differ between
+architectures. This is accomplished by the package manager dpkg requiring all
+packages of the same name to be the same version, verifying that shared files
+have identical contents, and reference counting shared files. As explained
+above, ProteanOS's multiarch design doesn't entail such modifications to the
+package manager.
+
+opkg-lede also doesn't allow installation of multiple packages with the same
+name and different architectures. The only way to solve this without modifying
+the package manager is to qualify the names of coinstallable packages with
+their host architectures. This will be done by appending a colon followed by
+the host architecture to each coinstallable package name, e.g. `libc.6` becomes
+`libc.6:amd64-linux-glibc`. Package names appear in the file system under
+`/var/cache/opkg/archives/` and `/var/lib/opkg/info/`, so using a colon in
+package names will prevent the use of restricted file systems such as FAT file
+systems as the root file system.
+
+Dependencies
+------------
+
+opkg-lede allows packages from different architectures to be installed, but
+there is no way to select the architecture to install other than blanket
+priority values. Since libraries of different architectures will often need to
+be installed during the same installation transaction, as described above, such
+a blunt solution is insufficient.
+
+[Debian and Ubuntu][wuc-mas-control-fields] solve this by declaring the kinds of
+dependencies each package is able to satisfy (based on the interfaces it
+provides: executables and/or libraries). Again this requires modifications to
+the package manager to affect dependency resolution. ProteanOS's design is
+similar, but implemented in a way such that *dependent* binary packages are
+responsible for declaring the architectures of *their dependencies* (which can
+be done automatically at build time, so package maintainers can focus on
+declaring how their packages satisfy dependencies, as in Debian and Ubuntu).
+
+One way to declare dependency semantics is by introducing a new single-purpose
+control field like Debian's and Ubuntu's `Multi-Arch`. However, ProteanOS will
+instead use [a control field that serves multiple purposes:
+`Section`][spf-fields-bin]. `Section: lib` packages will be automatically made
+coinstallable by opkbuild, by architecture-qualifying their names as described
+above. Library dependencies generated by oh-shlibdeps (with [a
+fix][oh-shlibdeps-host-libdirs] to be released) will automatically use the
+architecture-qualified names.
+
+ProteanOS systems should have only native architecture feeds for sections
+`boot`, `dev`, and `util` but may have multiple feeds for sections `dbg`, `lib`,
+and `libdev`. (Sections `doc`, `locale`, and `share` are
+architecture-independent.)
+
+opkg-lede's architecture priorities as described above can be useful in certain
+specific ways, through a [wrapper script that adds an `-a`/`--host-architecture`
+option][opkg-wrapper] (similar to that of apt-get). First, since multiple
+`Section: dbg` feeds may be downloaded and requiring users to
+architecture-qualify such packages would be undesirable, such packages could be
+installed instead via `opkg -a amd64-linux-glibc foo-dbg` or even simply `opkg
+install foo-dbg` for the native architecture. Similarly, `Section: libdev`
+packages as build dependencies could be automatically installed for the host
+architecture by prokit supplying an appropriate `-a` option, allowing
+maintainers to continue listing unqualified package names in `Build-Depends`
+instead of having to add `:${Host-Arch}` to every `Section: libdev` package in
+`Build-Depends`. Therefore, only `Section: lib` packages need to have
+architecture-qualified names (due to the coinstallability issue described
+above), and neither users nor maintainers are expected to manually install or
+list as dependencies such architecture-qualified packages.
+
+[wuc-mas-arch-indep-files]: https://wiki.ubuntu.com/MultiarchSpec#Architecture-independent_files_in_multiarch_packages
+[wuc-mas-control-fields]: https://wiki.ubuntu.com/MultiarchSpec#Binary_package_control_fields
+[spf-fields-bin]: http://specs.proteanos.com/spf-2.0/fields.html#fields-bin
+[oh-shlibdeps-host-libdirs]: http://git.proteanos.com/opkhelper/opkhelper.git/commit/?id=c214c727f60b070aa502b20dcc1ad7e3ce8579f2
+[opkg-wrapper]: http://git.proteanos.com/pkg/opkg-lede.git/tree/opkg
+
+
+Use Cases
+=========
+
+**Run-time dependency on a utility:** Only the native architecture of the
+utility dependency is available in the downloaded feed lists, and the dependency
+is not architecture-qualified. The native architecture will be installed.
+
+**Run-time dependency on a library:** Multiple architectures of the library
+dependency may be available, and the dependency must be qualified with the
+native architecture.
+
+**Run-time dependency on a language extension:** Despite technically being a
+shared object file, only the native architecture of the language extension
+dependency is available in the downloaded feed lists, and the dependency is not
+architecture-qualified. The language extension dependency in turn depends on a
+language interpreter, which is also not architecture-qualified. The native
+architecture of both will be installed.
+
+**Build-time dependency on a utility:** Only the build architecture of the
+utility dependency is available in the downloaded feed lists, and the dependency
+is not architecture-qualified. The build architecture will be installed.
+
+**Build-time dependency on a library:** Multiple architectures of the library
+dependency are available, and the dependency must be qualified with the host
+architecture.
+
+**Build-time dependency on a language extension:** Despite technically being a
+shared object file, only the native architecture of the language extension
+dependency is available in the downloaded feed lists, and the dependency is not
+architecture-qualified. The language extension dependency in turn depends on a
+language interpreter, which is also not architecture-qualified. The native
+architecture of both will be installed.
+
+
+Implementation
+==============
+
+File System Hierarchy
+---------------------
+
+As explained above, to be coninstallable, library packages must install all of
+their files in architecture-qualified locations. Debian and Ubuntu install
+shared object files in `/usr/lib/<triplet>` or `/lib/<triplet>`, where
+`<triplet>` is a [GNU system type][ac-systemtype]. Since multiple ProteanOS
+architectures may share the same GNU system type, ProteanOS architecture names
+are instead used in such library directories.
+
+ProteanOS's GNU Binutils and GCC packages have been patched and configured to
+use multiarch library paths since their initial releases in 2014. opkhelper has
+used multiarch library paths when configuring packages since version 3.0.0-beta1
+released in 2012.
+
+[ac-systemtype]: https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/System-Type.html
diff --git a/dev/opkbuild.mdwn b/dev/opkbuild.mdwn
index b055f80..9e45e00 100644
--- a/dev/opkbuild.mdwn
+++ b/dev/opkbuild.mdwn
@@ -2,24 +2,24 @@
opkbuild is a distribution build system – a set of tools for building
software packages. From source packages it builds binary packages for
-use with the [opkg package manager][opkg].
+use with the opkg package manager.
Currently one format of source package is supported by opkbuild:
ProteanOS [Source Package Format 2.0][spf-2.0].
-opkbuild is similar in function to the [development library and utilities
-of dpkg][dpkg-dev] ([sources][dpkg-dev-git]), the Debian package manager.
+opkbuild is similar in function to the [development library][libdpkg-perl] and
+[utilities][dpkg-dev] of [dpkg][dpkg], the Debian package manager.
-[opkg]: https://code.google.com/p/opkg/
[spf-2.0]: http://specs.proteanos.com/spf-2.0/
+[libdpkg-perl]: https://packages.debian.org/sid/libdpkg-perl
[dpkg-dev]: https://packages.debian.org/sid/dpkg-dev
-[dpkg-dev-git]: https://anonscm.debian.org/gitweb/?p=dpkg/dpkg.git;a=tree;f=scripts
+[dpkg]: https://wiki.debian.org/Teams/Dpkg/
Downloading
===========
-The current version of opkbuild is [3.0.0-beta7][rel-ann].
+The current version of opkbuild is [4.2.0][rel-ann].
opkbuild can be found on the ProteanOS files site by [HTTP][dl-http] or
[FTP][dl-ftp].
@@ -27,7 +27,7 @@ opkbuild can be found on the ProteanOS files site by [HTTP][dl-http] or
opkbuild is maintained in a [Git repository][repo-http], which can be cloned
from `git://git.proteanos.com/opkbuild/opkbuild.git`.
-[rel-ann]: http://lists.proteanos.com/proteanos-dev/2014/10/msg00002.html
+[rel-ann]: http://lists.proteanos.com/proteanos-dev/2020/07/msg00000.html
[dl-http]: http://files.proteanos.com/pub/opkbuild/
[dl-ftp]: ftp://files.proteanos.com/pub/opkbuild/
[repo-http]: http://git.proteanos.com/opkbuild/opkbuild.git/
diff --git a/dev/opkhelper.mdwn b/dev/opkhelper.mdwn
index 70deda7..47bcd49 100644
--- a/dev/opkhelper.mdwn
+++ b/dev/opkhelper.mdwn
@@ -14,7 +14,7 @@ Debian.
Downloading
===========
-The current version of opkhelper is [3.0.0][rel-ann].
+The current version of opkhelper is [3.1.3][rel-ann].
opkhelper can be found on the ProteanOS files site by [HTTP][dl-http] or
[FTP][dl-ftp].
@@ -22,7 +22,7 @@ opkhelper can be found on the ProteanOS files site by [HTTP][dl-http] or
opkhelper is maintained in a [Git repository][repo-http], which can be cloned
from `git://git.proteanos.com/opkhelper/opkhelper.git`.
-[rel-ann]: http://lists.proteanos.com/proteanos-dev/2014/03/msg00000.html
+[rel-ann]: http://lists.proteanos.com/proteanos-dev/2020/07/msg00001.html
[dl-http]: http://files.proteanos.com/pub/opkhelper/
[dl-ftp]: ftp://files.proteanos.com/pub/opkhelper/
[repo-http]: http://git.proteanos.com/opkhelper/opkhelper.git/
@@ -43,6 +43,7 @@ Manual
Pages in the Distribution Build System manual:
* [[**oh-installfiles**(1)|dev/opkhelper/oh-installfiles.1]]
+ * [[**oh-shlibdeps**(1)|dev/opkhelper/oh-shlibdeps.1]]
* [[**oh-strip**(1)|dev/opkhelper/oh-strip.1]]
* [[**oh-fixperms**(1)|dev/opkhelper/oh-fixperms.1]]
* [[**oh-autoconfigure**(1)|dev/opkhelper/oh-autoconfigure.1]]
diff --git a/dev/opkhelper/oh-architecture.1.mdwn b/dev/opkhelper/oh-architecture.1.mdwn
index 4ed8163..ee13049 100644
--- a/dev/opkhelper/oh-architecture.1.mdwn
+++ b/dev/opkhelper/oh-architecture.1.mdwn
@@ -16,7 +16,7 @@
<p style="margin-left:11%; margin-top: 1em">oh-architecture
-&minus; Print build system architecture names.</p>
+- Print build system architecture names.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -44,20 +44,20 @@ looks up the build system architecture that matches
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;s&nbsp;</b><i>sourcedir</i></p>
+<p style="margin-left:11%; margin-top: 1em"><b>-s&nbsp;</b><i>sourcedir</i></p>
<p style="margin-left:22%;">Find sources in
<i>sourcedir</i> instead of in <i>src</i>.</p>
-<p style="margin-left:11%;"><b>&minus;S&nbsp;</b><i>buildsystem</i></p>
+<p style="margin-left:11%;"><b>-S&nbsp;</b><i>buildsystem</i></p>
<p style="margin-left:22%;">Force the use of
<i>buildsystem</i>, instead of trying to detect the one used
by the package.</p>
-<p style="margin-left:11%;"><b>&minus;B&nbsp;</b><i>builddir</i></p>
+<p style="margin-left:11%;"><b>-B&nbsp;</b><i>builddir</i></p>
<p style="margin-left:22%;">Build in <i>builddir</i>
instead of in the source directory.</p>
diff --git a/dev/opkhelper/oh-autobuild.1.mdwn b/dev/opkhelper/oh-autobuild.1.mdwn
index 146423d..62ea6dd 100644
--- a/dev/opkhelper/oh-autobuild.1.mdwn
+++ b/dev/opkhelper/oh-autobuild.1.mdwn
@@ -14,8 +14,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">oh-autobuild
-&minus; Automatically build a package.</p>
+<p style="margin-left:11%; margin-top: 1em">oh-autobuild -
+Automatically build a package.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -26,7 +26,7 @@
<p style="margin-left:11%; margin-top: 1em"><b>oh-autobuild</b>
[<b>-s</b> <i>sourcedir</i>] [<b>-S</b> <i>buildsystem</i>]
[<b>-B</b> <i>builddir</i>] [<b>-T</b> <i>buildtarget</i>]
-[&minus;&minus; <i>arguments</i>]</p>
+[-- <i>arguments</i>]</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
@@ -43,26 +43,26 @@ attempts to automatically build a package.</p>
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;s&nbsp;</b><i>sourcedir</i></p>
+<p style="margin-left:11%; margin-top: 1em"><b>-s&nbsp;</b><i>sourcedir</i></p>
<p style="margin-left:22%;">Find sources in
<i>sourcedir</i> instead of in <i>src</i>.</p>
-<p style="margin-left:11%;"><b>&minus;S&nbsp;</b><i>buildsystem</i></p>
+<p style="margin-left:11%;"><b>-S&nbsp;</b><i>buildsystem</i></p>
<p style="margin-left:22%;">Force the use of
<i>buildsystem</i>, instead of trying to detect the one used
by the package.</p>
-<p style="margin-left:11%;"><b>&minus;B&nbsp;</b><i>builddir</i></p>
+<p style="margin-left:11%;"><b>-B&nbsp;</b><i>builddir</i></p>
<p style="margin-left:22%;">Build in <i>builddir</i>
instead of in the source directory.</p>
-<p style="margin-left:11%;"><b>&minus;T&nbsp;</b><i>buildtarget</i></p>
+<p style="margin-left:11%;"><b>-T&nbsp;</b><i>buildtarget</i></p>
<p style="margin-left:22%;">Update the <i>buildtarget</i>
target.</p>
diff --git a/dev/opkhelper/oh-autoclean.1.mdwn b/dev/opkhelper/oh-autoclean.1.mdwn
index 31dbb24..77716e6 100644
--- a/dev/opkhelper/oh-autoclean.1.mdwn
+++ b/dev/opkhelper/oh-autoclean.1.mdwn
@@ -14,9 +14,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">oh-autoclean
-&minus; Automatically clean up a package&rsquo;s built
-files.</p>
+<p style="margin-left:11%; margin-top: 1em">oh-autoclean -
+Automatically clean up a package&rsquo;s built files.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -26,8 +25,7 @@ files.</p>
<p style="margin-left:11%; margin-top: 1em"><b>oh-autoclean</b>
[<b>-s</b> <i>sourcedir</i>] [<b>-S</b> <i>buildsystem</i>]
-[<b>-B</b> <i>builddir</i>] [&minus;&minus;
-<i>arguments</i>]</p>
+[<b>-B</b> <i>builddir</i>] [-- <i>arguments</i>]</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
@@ -45,20 +43,20 @@ directory.</p>
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;s&nbsp;</b><i>sourcedir</i></p>
+<p style="margin-left:11%; margin-top: 1em"><b>-s&nbsp;</b><i>sourcedir</i></p>
<p style="margin-left:22%;">Find sources in
<i>sourcedir</i> instead of in <i>src</i>.</p>
-<p style="margin-left:11%;"><b>&minus;S&nbsp;</b><i>buildsystem</i></p>
+<p style="margin-left:11%;"><b>-S&nbsp;</b><i>buildsystem</i></p>
<p style="margin-left:22%;">Force the use of
<i>buildsystem</i>, instead of trying to detect the one used
by the package.</p>
-<p style="margin-left:11%;"><b>&minus;B&nbsp;</b><i>builddir</i></p>
+<p style="margin-left:11%;"><b>-B&nbsp;</b><i>builddir</i></p>
<p style="margin-left:22%;">Build in <i>builddir</i>
instead of in the source directory.</p>
diff --git a/dev/opkhelper/oh-autoconfigure.1.mdwn b/dev/opkhelper/oh-autoconfigure.1.mdwn
index d577261..a3ee79e 100644
--- a/dev/opkhelper/oh-autoconfigure.1.mdwn
+++ b/dev/opkhelper/oh-autoconfigure.1.mdwn
@@ -16,7 +16,7 @@
<p style="margin-left:11%; margin-top: 1em">oh-autoconfigure
-&minus; Automatically configure a package to be built.</p>
+- Automatically configure a package to be built.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -27,7 +27,7 @@
<p style="margin-left:11%; margin-top: 1em"><b>oh-autoconfigure</b>
[<b>-s</b> <i>sourcedir</i>] [<b>-S</b> <i>buildsystem</i>]
[<b>-B</b> <i>builddir</i>] [<b>-t</b> <i>targetarch</i>]
-[&minus;&minus; <i>arguments</i>]</p>
+[-- <i>arguments</i>]</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
@@ -45,26 +45,26 @@ built.</p>
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;s&nbsp;</b><i>sourcedir</i></p>
+<p style="margin-left:11%; margin-top: 1em"><b>-s&nbsp;</b><i>sourcedir</i></p>
<p style="margin-left:22%;">Find sources in
<i>sourcedir</i> instead of in <i>src</i>.</p>
-<p style="margin-left:11%;"><b>&minus;S&nbsp;</b><i>buildsystem</i></p>
+<p style="margin-left:11%;"><b>-S&nbsp;</b><i>buildsystem</i></p>
<p style="margin-left:22%;">Force the use of
<i>buildsystem</i>, instead of trying to detect the one used
by the package.</p>
-<p style="margin-left:11%;"><b>&minus;B&nbsp;</b><i>builddir</i></p>
+<p style="margin-left:11%;"><b>-B&nbsp;</b><i>builddir</i></p>
<p style="margin-left:22%;">Build in <i>builddir</i>
instead of in the source directory.</p>
-<p style="margin-left:11%;"><b>&minus;t&nbsp;</b><i>targetarch</i></p>
+<p style="margin-left:11%;"><b>-t&nbsp;</b><i>targetarch</i></p>
<p style="margin-left:22%;">Build a tool that cross builds
for <i>targetarch</i>.</p>
diff --git a/dev/opkhelper/oh-autoinstall.1.mdwn b/dev/opkhelper/oh-autoinstall.1.mdwn
index d2cc80f..6fd8d88 100644
--- a/dev/opkhelper/oh-autoinstall.1.mdwn
+++ b/dev/opkhelper/oh-autoinstall.1.mdwn
@@ -15,8 +15,7 @@
<p style="margin-left:11%; margin-top: 1em">oh-autoinstall
-&minus; Automatically install a package&rsquo;s data
-files.</p>
+- Automatically install a package&rsquo;s data files.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -27,8 +26,7 @@ files.</p>
<p style="margin-left:11%; margin-top: 1em"><b>oh-autoinstall</b>
[<b>-s</b> <i>sourcedir</i>] [<b>-S</b> <i>buildsystem</i>]
[<b>-B</b> <i>builddir</i>] [<b>-d</b> <i>destdir</i>]
-[<b>-T</b> <i>buildtarget</i>] [&minus;&minus;
-<i>arguments</i>]</p>
+[<b>-T</b> <i>buildtarget</i>] [-- <i>arguments</i>]</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
@@ -46,32 +44,32 @@ files.</p>
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;s&nbsp;</b><i>sourcedir</i></p>
+<p style="margin-left:11%; margin-top: 1em"><b>-s&nbsp;</b><i>sourcedir</i></p>
<p style="margin-left:22%;">Find sources in
<i>sourcedir</i> instead of in <i>src</i>.</p>
-<p style="margin-left:11%;"><b>&minus;S&nbsp;</b><i>buildsystem</i></p>
+<p style="margin-left:11%;"><b>-S&nbsp;</b><i>buildsystem</i></p>
<p style="margin-left:22%;">Force the use of
<i>buildsystem</i>, instead of trying to detect the one used
by the package.</p>
-<p style="margin-left:11%;"><b>&minus;B&nbsp;</b><i>builddir</i></p>
+<p style="margin-left:11%;"><b>-B&nbsp;</b><i>builddir</i></p>
<p style="margin-left:22%;">Build in <i>builddir</i>
instead of in the source directory.</p>
-<p style="margin-left:11%;"><b>&minus;d&nbsp;</b><i>destdir</i></p>
+<p style="margin-left:11%;"><b>-d&nbsp;</b><i>destdir</i></p>
<p style="margin-left:22%;">Install data files in
<i>destdir</i>. The default directory is <i>dest</i>.</p>
-<p style="margin-left:11%;"><b>&minus;T&nbsp;</b><i>buildtarget</i></p>
+<p style="margin-left:11%;"><b>-T&nbsp;</b><i>buildtarget</i></p>
<p style="margin-left:22%;">Update the <i>buildtarget</i>
target.</p>
diff --git a/dev/opkhelper/oh-autotest.1.mdwn b/dev/opkhelper/oh-autotest.1.mdwn
index a0c5bb6..a1d5739 100644
--- a/dev/opkhelper/oh-autotest.1.mdwn
+++ b/dev/opkhelper/oh-autotest.1.mdwn
@@ -14,8 +14,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">oh-autotest
-&minus; Automatically run a package&rsquo;s test suites.</p>
+<p style="margin-left:11%; margin-top: 1em">oh-autotest -
+Automatically run a package&rsquo;s test suites.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -25,7 +25,7 @@
<p style="margin-left:11%; margin-top: 1em"><b>oh-autotest</b>
[<b>-S</b> <i>buildsystem</i>] [<b>-B</b> <i>builddir</i>]
-[&minus;&minus; <i>arguments</i>]</p>
+[-- <i>arguments</i>]</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
@@ -43,14 +43,14 @@ suites.</p>
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;S&nbsp;</b><i>buildsystem</i></p>
+<p style="margin-left:11%; margin-top: 1em"><b>-S&nbsp;</b><i>buildsystem</i></p>
<p style="margin-left:22%;">Force the use of
<i>buildsystem</i>, instead of trying to detect the one used
by the package.</p>
-<p style="margin-left:11%;"><b>&minus;B&nbsp;</b><i>builddir</i></p>
+<p style="margin-left:11%;"><b>-B&nbsp;</b><i>builddir</i></p>
<p style="margin-left:22%;">Build in <i>builddir</i>
instead of in the source directory.</p>
diff --git a/dev/opkhelper/oh-fixperms.1.mdwn b/dev/opkhelper/oh-fixperms.1.mdwn
index d855663..a25d4cb 100644
--- a/dev/opkhelper/oh-fixperms.1.mdwn
+++ b/dev/opkhelper/oh-fixperms.1.mdwn
@@ -14,8 +14,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">oh-fixperms
-&minus; Fix permissions and ownerships of data files.</p>
+<p style="margin-left:11%; margin-top: 1em">oh-fixperms -
+Fix permissions and ownerships of data files.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -48,8 +48,7 @@ data files.</p>
<td width="9%">
-
-<p style="margin-top: 1em"><b>&minus;d&nbsp;</b><i>dir</i></p> </td>
+<p style="margin-top: 1em"><b>-d&nbsp;</b><i>dir</i></p></td>
<td width="2%"></td>
<td width="78%">
diff --git a/dev/opkhelper/oh-installfiles.1.mdwn b/dev/opkhelper/oh-installfiles.1.mdwn
index b2d1a76..ac694f0 100644
--- a/dev/opkhelper/oh-installfiles.1.mdwn
+++ b/dev/opkhelper/oh-installfiles.1.mdwn
@@ -17,8 +17,7 @@
<p style="margin-left:11%; margin-top: 1em">oh-installfiles
-&minus; Install files into binary package data
-directories.</p>
+- Install files into binary package data directories.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -54,8 +53,7 @@ the binary package&rsquo;s data directory.</p>
<td width="9%">
-
-<p style="margin-top: 1em"><b>&minus;d&nbsp;</b><i>dir</i></p> </td>
+<p style="margin-top: 1em"><b>-d&nbsp;</b><i>dir</i></p></td>
<td width="2%"></td>
<td width="78%">
diff --git a/dev/opkhelper/oh-shlibdeps.1.mdwn b/dev/opkhelper/oh-shlibdeps.1.mdwn
new file mode 100644
index 0000000..26e6f84
--- /dev/null
+++ b/dev/opkhelper/oh-shlibdeps.1.mdwn
@@ -0,0 +1,63 @@
+[[!meta title="oh-shlibdeps"]]
+
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#COPYRIGHT">COPYRIGHT</a><br>
+
+<hr>
+
+
+<h2>NAME
+<a name="NAME"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em">oh-shlibdeps -
+Find shared library dependencies.</p>
+
+<h2>SYNOPSIS
+<a name="SYNOPSIS"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>oh-shlibdeps</b></p>
+
+<h2>DESCRIPTION
+<a name="DESCRIPTION"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>oh-shlibdeps</b>
+finds packages that provide libraries needed by ELF files in
+each binary package. It lists library depenency packages in
+each binary package&rsquo;s &quot;Shlib-Depends&quot;
+substitution variable.</p>
+
+<h2>COPYRIGHT
+<a name="COPYRIGHT"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em">Copyright (C)
+2019 Patrick &quot;P. J.&quot; McDermott</p>
+
+<p style="margin-left:11%; margin-top: 1em">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 2
+of the License, or (at your option) any later version.</p>
+
+<p style="margin-left:11%; margin-top: 1em">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.</p>
+
+<p style="margin-left:11%; margin-top: 1em">You should have
+received a copy of the GNU General Public License along with
+this program. If not, see
+&lt;http://www.gnu.org/licenses/&gt;.</p>
+
diff --git a/dev/opkhelper/oh-strip.1.mdwn b/dev/opkhelper/oh-strip.1.mdwn
index 39344dc..d16d49b 100644
--- a/dev/opkhelper/oh-strip.1.mdwn
+++ b/dev/opkhelper/oh-strip.1.mdwn
@@ -14,8 +14,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">oh-strip
-&minus; Strip binary objects of symbols.</p>
+<p style="margin-left:11%; margin-top: 1em">oh-strip -
+Strip binary objects of symbols.</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -48,8 +48,7 @@ copying debugging symbols into debugging object files.</p>
<td width="9%">
-
-<p style="margin-top: 1em"><b>&minus;d&nbsp;</b><i>dir</i></p> </td>
+<p style="margin-top: 1em"><b>-d&nbsp;</b><i>dir</i></p></td>
<td width="2%"></td>
<td width="78%">
@@ -61,7 +60,7 @@ copying debugging symbols into debugging object files.</p>
<td width="9%">
-<p><b>&minus;k</b></p></td>
+<p><b>-k</b></p></td>
<td width="2%"></td>
<td width="78%">
diff --git a/dev/prokit.mdwn b/dev/prokit.mdwn
index 9d6dc88..3008ffa 100644
--- a/dev/prokit.mdwn
+++ b/dev/prokit.mdwn
@@ -14,7 +14,7 @@ programs of Debian and derivatives.
Downloading
===========
-The current version of prokit is [1.1.0][rel-ann].
+The current version of prokit is [2.0.0][rel-ann].
prokit can be found on the ProteanOS files site by [HTTP][dl-http] or
[FTP][dl-ftp].
@@ -22,7 +22,7 @@ prokit can be found on the ProteanOS files site by [HTTP][dl-http] or
prokit is maintained in a [Git repository][repo-http], which can be cloned from
`git://git.proteanos.com/prokit/prokit.git`.
-[rel-ann]: http://lists.proteanos.com/proteanos-dev/2014/10/msg00000.html
+[rel-ann]: http://lists.proteanos.com/proteanos-dev/2019/04/msg00004.html
[dl-http]: http://files.proteanos.com/pub/prokit/
[dl-ftp]: ftp://files.proteanos.com/pub/prokit/
[repo-http]: http://git.proteanos.com/prokit/prokit.git/
@@ -49,3 +49,5 @@ Pages in the ProteanOS Development Kit Manual:
* [[**prokit-shell**(8)|dev/prokit/prokit-shell.8]]
* [[**prokit-opkg**(8)|dev/prokit/prokit-opkg.8]]
* [[**prokit-build**(8)|dev/prokit/prokit-build.8]]
+ * [[**prokit-installer-pc**(8)|dev/prokit/prokit-installer-pc.8]]
+ * [[**prokit-mkinitramfs**(8)|dev/prokit/prokit-mkinitramfs.8]]
diff --git a/dev/prokit/prokit-build.8.mdwn b/dev/prokit/prokit-build.8.mdwn
index fefa5fc..e7ad25f 100644
--- a/dev/prokit/prokit-build.8.mdwn
+++ b/dev/prokit/prokit-build.8.mdwn
@@ -1,4 +1,4 @@
-[[!meta title="prokit-build"]]
+[[!meta title="PROKIT-BUILD"]]
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
@@ -13,8 +13,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">prokit-build
-&minus; Build a package</p>
+<p style="margin-left:11%; margin-top: 1em">prokit-build -
+Build a package</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -22,8 +22,7 @@
<p style="margin-left:11%; margin-top: 1em"><b>prokit
-build</b> <i>root-dir</i> [<i>option</i> ...]
-<i>pkg-dir</i></p>
+build</b> <i>root</i> [<i>option</i> ...] <i>pkg-dir</i></p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
@@ -35,6 +34,10 @@ build</b></i> runs <b>opkbuild</b> to build a package in an
isolated file system environment, temporarily installing any
missing build dependencies.</p>
+<p style="margin-left:11%; margin-top: 1em">If <i>root</i>
+is a block device node, the block device is mounted and
+<b>opkbuild</b> is run in its file system.</p>
+
<p style="margin-left:11%; margin-top: 1em"><i>option</i>s
are <b>opkbuild</b> options. Run <i>prokit build -h .</i>
for more information.</p>
@@ -48,7 +51,7 @@ is a source package directory.</p>
<p style="margin-left:11%; margin-top: 1em">Copyright (C)
-2014 Patrick &quot;P. J.&quot; McDermott</p>
+2014 Patrick McDermott</p>
<p style="margin-left:11%; margin-top: 1em">The ProteanOS
Development Kit is free software: you can redistribute it
diff --git a/dev/prokit/prokit-help.1.mdwn b/dev/prokit/prokit-help.1.mdwn
index 733a358..f594457 100644
--- a/dev/prokit/prokit-help.1.mdwn
+++ b/dev/prokit/prokit-help.1.mdwn
@@ -1,4 +1,4 @@
-[[!meta title="prokit-help"]]
+[[!meta title="PROKIT-HELP"]]
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
@@ -13,8 +13,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">prokit-help
-&minus; Print help information</p>
+<p style="margin-left:11%; margin-top: 1em">prokit-help -
+Print help information</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -48,7 +48,7 @@ help</b> [<i>command</i>].</p>
<p style="margin-left:11%; margin-top: 1em">Copyright (C)
-2014 Patrick &quot;P. J.&quot; McDermott</p>
+2014 Patrick McDermott</p>
<p style="margin-left:11%; margin-top: 1em">The ProteanOS
Development Kit is free software: you can redistribute it
diff --git a/dev/prokit/prokit-install.8.mdwn b/dev/prokit/prokit-install.8.mdwn
index 427f6a7..2f617d5 100644
--- a/dev/prokit/prokit-install.8.mdwn
+++ b/dev/prokit/prokit-install.8.mdwn
@@ -1,4 +1,4 @@
-[[!meta title="prokit-install"]]
+[[!meta title="PROKIT-INSTALL"]]
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
@@ -15,7 +15,7 @@
<p style="margin-left:11%; margin-top: 1em">prokit-install
-&minus; Install a system into a directory</p>
+- Install a system into a directory</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -24,8 +24,7 @@
<p style="margin-left:11%; margin-top: 1em"><b>prokit
install</b> [<b>-a</b> <i>arch</i>] [<b>-p</b> <i>plat</i>]
-[<b>-m</b> <i>mirror</i>] [<b>-F</b>] <i>suite
-root-dir</i></p>
+[<b>-m</b> <i>mirror</i>] [<b>-F</b>] <i>suite root</i></p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
@@ -34,7 +33,11 @@ root-dir</i></p>
<p style="margin-left:11%; margin-top: 1em"><i><b>prokit
install</b></i> installs a basic system of <i>suite</i> into
-<i>root-dir</i>.</p>
+<i>root</i>.</p>
+
+<p style="margin-left:11%; margin-top: 1em">If <i>root</i>
+is a block device node, the block device is mounted and a
+system is installed into its file system.</p>
<p style="margin-left:11%; margin-top: 1em"><i>suite</i>
can be a distribution like <i>trunk</i>; a channel and
@@ -49,26 +52,25 @@ channel, and distribution like
-<p style="margin-left:11%; margin-top: 1em"><b>&minus;a&nbsp;</b><i>arch</i></p>
+<p style="margin-left:11%; margin-top: 1em"><b>-a&nbsp;</b><i>arch</i></p>
<p style="margin-left:22%;">Install packages built for the
<i>arch</i> architecture instead of automatically detecting
the architecture of the running system.</p>
-
-<p style="margin-left:11%;"><b>&minus;p&nbsp;</b><i>plat</i></p>
+<p style="margin-left:11%;"><b>-p&nbsp;</b><i>plat</i></p>
<p style="margin-left:22%;">Install packages built for the
<i>plat</i> platform instead of automatically choosing a
default platform.</p>
-<p style="margin-left:11%;"><b>&minus;m&nbsp;</b><i>mirror</i></p>
+<p style="margin-left:11%;"><b>-m&nbsp;</b><i>mirror</i></p>
<p style="margin-left:22%;">Download packages from
<i>mirror</i> instead of automatically selecting one at
random. <i>mirror</i> is a base URL like
-<i>http://mirror.gnu.dk/pub/proteanos</i>.</p>
+<i>http://us.mirror.gnu.dk/pub/proteanos</i>.</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
@@ -77,7 +79,7 @@ random. <i>mirror</i> is a base URL like
<td width="3%">
-<p><b>&minus;F</b></p></td>
+<p><b>-F</b></p></td>
<td width="8%"></td>
<td width="78%">
@@ -92,7 +94,7 @@ for packages to be configured later.</p></td></tr>
<p style="margin-left:11%; margin-top: 1em">Copyright (C)
-2014 Patrick &quot;P. J.&quot; McDermott</p>
+2014 Patrick McDermott</p>
<p style="margin-left:11%; margin-top: 1em">The ProteanOS
Development Kit is free software: you can redistribute it
diff --git a/dev/prokit/prokit-installer-pc.8.mdwn b/dev/prokit/prokit-installer-pc.8.mdwn
new file mode 100644
index 0000000..7b32be9
--- /dev/null
+++ b/dev/prokit/prokit-installer-pc.8.mdwn
@@ -0,0 +1,122 @@
+[[!meta title="PROKIT-INSTALLER-PC"]]
+
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#EXAMPLES">EXAMPLES</a><br>
+<a href="#COPYRIGHT">COPYRIGHT</a><br>
+
+<hr>
+
+
+<h2>NAME
+<a name="NAME"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em">prokit-installer-pc
+- Install a PC system onto a block device</p>
+
+<h2>SYNOPSIS
+<a name="SYNOPSIS"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>prokit
+installer-pc -a</b> <i>arch</i> <b>-p</b> <i>plat</i>
+[<b>-m</b> <i>mirror</i>] <i>suite device</i></p>
+
+<h2>DESCRIPTION
+<a name="DESCRIPTION"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em"><i><b>prokit
+installer-pc</b></i> installs a basic PC system of
+<i>suite</i> onto <i>device</i>.</p>
+
+<p style="margin-left:11%; margin-top: 1em"><i>suite</i>
+can be a distribution like <i>trunk</i>; a channel and
+distribution like <i>dev/trunk</i>; a profile and
+distribution like <i>proteanos:trunk</i>; or a profile,
+channel, and distribution like
+<i>proteanos:dev/trunk</i>.</p>
+
+<p style="margin-left:11%; margin-top: 1em"><i>device</i>
+must be a block device file representing a whole storage
+device, not a partition.</p>
+
+<h2>OPTIONS
+<a name="OPTIONS"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>-a&nbsp;</b><i>arch</i></p>
+
+<p style="margin-left:22%;">Install packages built for the
+<i>arch</i> architecture.</p>
+
+<p style="margin-left:11%;"><b>-p&nbsp;</b><i>plat</i></p>
+
+<p style="margin-left:22%;">Install packages built for the
+<i>plat</i> platform.</p>
+
+
+<p style="margin-left:11%;"><b>-m&nbsp;</b><i>mirror</i></p>
+
+<p style="margin-left:22%;">Download packages from
+<i>mirror</i> instead of automatically selecting one at
+random. <i>mirror</i> is a base URL like
+<i>http://us.mirror.gnu.dk/pub/proteanos</i>.</p>
+
+<h2>EXAMPLES
+<a name="EXAMPLES"></a>
+</h2>
+
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="1%">
+
+
+<p style="margin-top: 1em">&bull;</p></td>
+<td width="10%"></td>
+<td width="78%">
+
+
+<p style="margin-top: 1em"># prokit installer-pc -a
+i686-linux-glibc -p x60 dev/trunk /dev/sdb</p></td></tr>
+</table>
+
+<h2>COPYRIGHT
+<a name="COPYRIGHT"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em">Copyright (C)
+2014, 2015 Patrick McDermott</p>
+
+<p style="margin-left:11%; margin-top: 1em">The ProteanOS
+Development Kit 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.</p>
+
+<p style="margin-left:11%; margin-top: 1em">The ProteanOS
+Development Kit 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.</p>
+
+<p style="margin-left:11%; margin-top: 1em">You should have
+received a copy of the GNU General Public License along with
+the ProteanOS Development Kit. If not, see
+&lt;http://www.gnu.org/licenses/&gt;.</p>
+
diff --git a/dev/prokit/prokit-mkinitramfs.8.mdwn b/dev/prokit/prokit-mkinitramfs.8.mdwn
new file mode 100644
index 0000000..0b5381d
--- /dev/null
+++ b/dev/prokit/prokit-mkinitramfs.8.mdwn
@@ -0,0 +1,110 @@
+[[!meta title="PROKIT-MKINITRAMFS"]]
+
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#EXAMPLES">EXAMPLES</a><br>
+<a href="#COPYRIGHT">COPYRIGHT</a><br>
+
+<hr>
+
+
+<h2>NAME
+<a name="NAME"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em">prokit-mkinitramfs
+- Generate an initramfs containing an installed system</p>
+
+<h2>SYNOPSIS
+<a name="SYNOPSIS"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>prokit
+mkinitramfs -l</b> <i>linux-output</i> <b>-i</b>
+<i>initramfs-output root</i></p>
+
+<h2>DESCRIPTION
+<a name="DESCRIPTION"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em"><i><b>prokit
+mkinitramfs</b></i> generates an initial RAM-based file
+system image containing an installed system found at
+<i>root</i>.</p>
+
+<p style="margin-left:11%; margin-top: 1em">If <i>root</i>
+is a block device node, the block device is mounted and the
+initial RAM-based file system is generated from the
+device&rsquo;s file system.</p>
+
+<h2>OPTIONS
+<a name="OPTIONS"></a>
+</h2>
+
+
+
+<p style="margin-left:11%; margin-top: 1em"><b>-l&nbsp;</b><i>linux-output</i></p>
+
+<p style="margin-left:22%;">Copy a Linux image from the
+system at <i>root</i> to <i>linux-output</i>.</p>
+
+
+<p style="margin-left:11%;"><b>-i&nbsp;</b><i>initramfs-output</i></p>
+
+<p style="margin-left:22%;">Write the initial RAM-based
+file system image to <i>initramfs-output</i>.</p>
+
+<h2>EXAMPLES
+<a name="EXAMPLES"></a>
+</h2>
+
+
+<table width="100%" border="0" rules="none" frame="void"
+ cellspacing="0" cellpadding="0">
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="1%">
+
+
+<p style="margin-top: 1em">&bull;</p></td>
+<td width="10%"></td>
+<td width="78%">
+
+
+<p style="margin-top: 1em"># prokit mkinitramfs -l vmlinuz
+-i initrd.img $root</p></td></tr>
+</table>
+
+<h2>COPYRIGHT
+<a name="COPYRIGHT"></a>
+</h2>
+
+
+<p style="margin-left:11%; margin-top: 1em">Copyright (C)
+2016 Patrick McDermott</p>
+
+<p style="margin-left:11%; margin-top: 1em">The ProteanOS
+Development Kit 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.</p>
+
+<p style="margin-left:11%; margin-top: 1em">The ProteanOS
+Development Kit 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.</p>
+
+<p style="margin-left:11%; margin-top: 1em">You should have
+received a copy of the GNU General Public License along with
+the ProteanOS Development Kit. If not, see
+&lt;http://www.gnu.org/licenses/&gt;.</p>
+
diff --git a/dev/prokit/prokit-opkg.8.mdwn b/dev/prokit/prokit-opkg.8.mdwn
index 7fb3a30..2143aa0 100644
--- a/dev/prokit/prokit-opkg.8.mdwn
+++ b/dev/prokit/prokit-opkg.8.mdwn
@@ -1,4 +1,4 @@
-[[!meta title="prokit-opkg"]]
+[[!meta title="PROKIT-OPKG"]]
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
@@ -13,8 +13,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">prokit-opkg
-&minus; Manage packages with opkg</p>
+<p style="margin-left:11%; margin-top: 1em">prokit-opkg -
+Manage packages with opkg</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -22,8 +22,8 @@
<p style="margin-left:11%; margin-top: 1em"><b>prokit
-opkg</b> <i>root-dir</i> [<i>option</i> ...]
-<i>sub-command</i> [<i>argument</i> ...]</p>
+opkg</b> <i>root</i> [<i>option</i> ...] <i>sub-command</i>
+[<i>argument</i> ...]</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
@@ -34,6 +34,10 @@ opkg</b> <i>root-dir</i> [<i>option</i> ...]
opkg</b> runs <b>opkg</b> in an isolated file system
environment.</p>
+<p style="margin-left:11%; margin-top: 1em">If <i>root</i>
+is a block device node, the block device is mounted and
+<b>opkg</b> is run in its file system.</p>
+
<p style="margin-left:11%; margin-top: 1em"><i>option</i>s
are <b>opkg</b> options and <i>sub-command</i> is an
<b>opkg</b> sub-command. See the usage information for
@@ -50,7 +54,7 @@ isolated system for installation.</p>
<p style="margin-left:11%; margin-top: 1em">Copyright (C)
-2014 Patrick &quot;P. J.&quot; McDermott</p>
+2014 Patrick McDermott</p>
<p style="margin-left:11%; margin-top: 1em">The ProteanOS
Development Kit is free software: you can redistribute it
diff --git a/dev/prokit/prokit-shell.8.mdwn b/dev/prokit/prokit-shell.8.mdwn
index f454a0f..7466403 100644
--- a/dev/prokit/prokit-shell.8.mdwn
+++ b/dev/prokit/prokit-shell.8.mdwn
@@ -1,4 +1,4 @@
-[[!meta title="prokit-shell"]]
+[[!meta title="PROKIT-SHELL"]]
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
@@ -14,8 +14,8 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">prokit-shell
-&minus; Run a shell in an isolated environment</p>
+<p style="margin-left:11%; margin-top: 1em">prokit-shell -
+Run a shell in an isolated environment</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -23,7 +23,7 @@
<p style="margin-left:11%; margin-top: 1em"><b>prokit
-shell</b> <i>root-dir</i> [<i>command</i> [<i>argument</i>
+shell</b> <i>root</i> [<i>command</i> [<i>argument</i>
...]]</p>
<h2>DESCRIPTION
@@ -36,6 +36,10 @@ shell</b> starts a shell in an isolated file system
environment (using <b>chroot</b>(8)) with basic file systems
mounted.</p>
+<p style="margin-left:11%; margin-top: 1em">If <i>root</i>
+is a block device node, the block device is mounted and a
+shell is started in its file system.</p>
+
<p style="margin-left:11%; margin-top: 1em">If a
<i>command</i> is given (with optional <i>argument</i>s), it
is executed in a non-interactive shell.</p>
@@ -71,6 +75,17 @@ world</p> </td></tr>
<p># prokit shell $root &rsquo;opkg install
build-essential-$(cat /etc/proteanos_arch)&rsquo;</p></td></tr>
+<tr valign="top" align="left">
+<td width="11%"></td>
+<td width="1%">
+
+
+<p>&bull;</p></td>
+<td width="10%"></td>
+<td width="78%">
+
+
+<p># prokit shell /dev/sdb1</p></td></tr>
</table>
<h2>COPYRIGHT
@@ -79,7 +94,7 @@ build-essential-$(cat /etc/proteanos_arch)&rsquo;</p></td></tr>
<p style="margin-left:11%; margin-top: 1em">Copyright (C)
-2014 Patrick &quot;P. J.&quot; McDermott</p>
+2014 Patrick McDermott</p>
<p style="margin-left:11%; margin-top: 1em">The ProteanOS
Development Kit is free software: you can redistribute it
diff --git a/dev/prokit/prokit-version.1.mdwn b/dev/prokit/prokit-version.1.mdwn
index aa6cb4e..955d692 100644
--- a/dev/prokit/prokit-version.1.mdwn
+++ b/dev/prokit/prokit-version.1.mdwn
@@ -1,4 +1,4 @@
-[[!meta title="prokit-version"]]
+[[!meta title="PROKIT-VERSION"]]
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
@@ -14,7 +14,7 @@
<p style="margin-left:11%; margin-top: 1em">prokit-version
-&minus; Print version information</p>
+- Print version information</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
@@ -42,7 +42,7 @@ information for prokit.</p>
<p style="margin-left:11%; margin-top: 1em">Copyright (C)
-2014 Patrick &quot;P. J.&quot; McDermott</p>
+2014 Patrick McDermott</p>
<p style="margin-left:11%; margin-top: 1em">The ProteanOS
Development Kit is free software: you can redistribute it
diff --git a/dev/prokit/prokit.1.mdwn b/dev/prokit/prokit.1.mdwn
index 4db796b..24d22ee 100644
--- a/dev/prokit/prokit.1.mdwn
+++ b/dev/prokit/prokit.1.mdwn
@@ -1,4 +1,4 @@
-[[!meta title="prokit"]]
+[[!meta title="PROKIT"]]
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
@@ -15,7 +15,7 @@
</h2>
-<p style="margin-left:11%; margin-top: 1em">prokit &minus;
+<p style="margin-left:11%; margin-top: 1em">prokit -
ProteanOS Development Kit</p>
<h2>SYNOPSIS
@@ -49,7 +49,7 @@ program of Debian and derivatives.</p>
<td width="3%">
-<p style="margin-top: 1em"><b>&minus;h</b></p></td>
+<p style="margin-top: 1em"><b>-h</b></p></td>
<td width="8%"></td>
<td width="38%">
@@ -62,7 +62,7 @@ program of Debian and derivatives.</p>
<td width="3%">
-<p><b>&minus;V</b></p></td>
+<p><b>-V</b></p></td>
<td width="8%"></td>
<td width="38%">
@@ -104,13 +104,25 @@ environment</p>
<p style="margin-left:22%;">Build a package</p>
+
+<p style="margin-left:11%;"><b>prokit-installer-pc</b>(8)</p>
+
+<p style="margin-left:22%;">Install a PC system onto a
+block device</p>
+
+
+<p style="margin-left:11%;"><b>prokit-mkinitramfs</b>(8)</p>
+
+<p style="margin-left:22%;">Generate an initramfs
+containing an installed system</p>
+
<h2>COPYRIGHT
<a name="COPYRIGHT"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Copyright (C)
-2014 Patrick &quot;P. J.&quot; McDermott</p>
+2014 Patrick McDermott</p>
<p style="margin-left:11%; margin-top: 1em">The ProteanOS
Development Kit is free software: you can redistribute it
diff --git a/dev/releases/1/packages.mdwn b/dev/releases/1/packages.mdwn
index b4992a7..02f6810 100644
--- a/dev/releases/1/packages.mdwn
+++ b/dev/releases/1/packages.mdwn
@@ -9,9 +9,10 @@ packages:
alsa-lib 1.0.27.2-1
alsa-utils 1.0.27.2-1
base-files 1.0.3
- bc 1.06.95-1
- binutils 2.23.2-1
- build-essential 1.1
+ bc 1.07.1-1
+ binutils 2.32+sip1-1
+ bison 3.4.1-1
+ build-essential 1.2
busybox 1.21.1-13
bzip2 1.0.6-3
cmake 3.0.2-1
@@ -22,29 +23,31 @@ packages:
config-tp-gm45-flash-8mib 1.1
config-x60 1.3
curl 7.38.0-1
- dejagnu 1.5.1-1
+ dejagnu 1.6.2-1
dev86 0.16.21-1
- dropbear 2014.65-1
+ dropbear 2019.78-1
eglibc 2.19~r25243+sip1-3
- expat 2.1.0-2
- expect 5.45-1
- fakeroot 1.18.4-1
+ expat 2.2.7-1
+ expect 5.45.4-1
+ fakeroot 1.23-2
fbida 2.09-2
- file 5.17-3
- flashrom 0.9.8~r1896-1
+ file 5.37-3
+ flashrom 1.1~rc1-1
+ flex 2.6.4-1
fontconfig 2.11.1-1
freetype 2.5.3-1
fss 1.0
- gawk 4.1.0-1
- gcc-4.7 4.7.3+sip1-1
- gcc-defaults 1.0
+ gawk 5.0.0-1
+ gcc-8 8.3.0+sip1-1
+ gcc-defaults 1.1
+ gdb 8.3+sip1-1
gettext 0.18.3.2-1
- gmake 4.0-2
- gmp 5.0.5-1
+ gettext-tiny 0.3.1
+ gmake 4.2.1-1
+ gmp 6.1.2-1
gnupg 2.2.15-1
gpgme 1.13.0-2
- ich9deblob 20150518fix~git20150628.0e3520f-1
- iptables 1.4.21-2
+ ich9deblob 20160907-1
libarchive 3.1.2-1
libassuan 2.5.1-2
libexif 0.6.21-1
@@ -56,48 +59,53 @@ packages:
libnl-3 3.2.25-1
libogg 1.3.2-1
libpng12 1.2.51-2
- libsigsegv 2.10-1
- libtomcrypt 1.17-1
+ libsigsegv 2.12-1
+ libtomcrypt 1.18.2-1
libtommath 0.42.0-1
+ libtommath.1 1.1.0-1
libtool 2.4.2-2
libubox 0+git20190227.eeef7b5-1
- libunistring 0.9.3-1
+ libunistring 0.9.10-1
libvorbis 1.3.4-1
lilo 24.2-1
linux-libre 3.10.60~gnu-1
- m4 1.4.17-2
- mpc 1.0.1-1
- mpfr 3.1.1-1
+ m4 1.4.18-1
+ mpc 1.1.0-1
+ mpfr 4.0.2-1
mplus-fonts 058-2
- ncurses 5.9~20140301-2
+ ncurses 6.1+20190706-1
npth 1.6-1
+ nss-certdata 3.54-2
open-ath9k-htc-firmware 1.4~git20141115.146bff1-1
- opkbuild 4.0.2-1
- opkg-lede 0+git20190131.d4ba162-5
+ opkbuild 4.2.0-1
opkg 0.2.4-3
- opkhelper-3.0 3.1.2-2
+ opkg-lede 0+git20190131.d4ba162-6
+ opkhelper-3.0 3.1.3-1
opkhelper-default 3.0.0
- patch 2.7.1-2
- pciids 2015.09.03-2
- pciutils 3.3.1-2
+ patch 2.7.6-1
+ pciids 2019.06.17-1
+ pciutils 3.6.2-1
pcre 8.35-1
pkgconf 0.9.6-1
- platconf-pkg-tools 2.1.1
+ platconf-pkg-tools 3.0.0
popt 1.16+sip1-1
+ proquivs 1.0
proteanos-branding 0.3
pth 2.0.7-1
readline 6.3-1
+ readline.8 8.0-1
strace 4.8-1
- tcl8.6 8.6.1+sip1-1
- tzcode 2014e-1
- tzdata 2014e-1
+ tcl8.6 8.6.9+sip1-2
+ tzdb 2019a-1
usign 0+git20161022.3e6648b-1
+ wolfssl.24 4.4.0-3
+ wolfutil 1.0.0-2
wpa-supplicant 2.2-2
- xz 5.1.3alpha-2
- zlib 1.2.8+sip1-1
+ xz 5.2.4-1
+ zlib 1.2.11+sip1-1
------------------------------------------------------------
- Source packages: 90
- Binary packages: 354
+ Source packages: 98
+ Binary packages: 395
The above list was generated by running the following shell script:
@@ -107,9 +115,6 @@ The above list was generated by running the following shell script:
verw=33
base_url='http://files.proteanos.com/pub/proteanos/feeds/dev/trunk'
- LF='
- '
-
# Print header
i=0
l=$(($pkgw + $verw + 2))
@@ -134,17 +139,18 @@ The above list was generated by running the following shell script:
;;
esac
done <<EOF
- $(wget -q -O - "${base_url}/src/all/base/Packages")
+ $(wget -q -O - "${base_url}/src/all/base/Packages" \
+ "${base_url}/src/all/src/Packages")
EOF
# Collect binary package names
bins=''
- for aps in $(wget -q -O - "${base_url}/Manifest" | grep -Fv 'src/all/base'); do
- bins="${bins}${LF}$(wget -q -O - "${base_url}/${aps}/Packages" | \
+ for aps in $(wget -q -O - "${base_url}/Manifest" | grep -Fv 'src/all/'); do
+ bins="${bins} $(wget -q -O - "${base_url}/${aps}/Packages" | \
sed -n 's/^Package: //p;')"
done
# Print totals
printf '%s\n' "${tblline}"
printf 'Source packages: %d\n' "${srcs}"
- printf 'Binary packages: %d\n' "$(printf '%s\n' "${bins}" | sort -u | wc -l)"
+ printf 'Binary packages: %d\n' "$(printf '%s\n' ${bins} | sort -u | wc -l)"
diff --git a/dev/todo/install-bb-without-bb.mdwn b/dev/todo/install-bb-without-bb.mdwn
new file mode 100644
index 0000000..4bb90ff
--- /dev/null
+++ b/dev/todo/install-bb-without-bb.mdwn
@@ -0,0 +1,86 @@
+[[!meta title="Installing BusyBox Without BusyBox"]]
+
+**or, Adventures in Regressions and Crazy Ideas**
+
+---
+
+**This work is now done.**
+
+**The rest of this page is kept only for reference and historical purposes.**
+
+---
+
+Two Problems
+============
+
+`opkg-lede` and the Outsourced Inflation
+----------------------------------------
+
+`opkg-lede` [now relies][opkg-lede-dd4c78a] on an external `gzip` executable.
+When upgrading a package, it tries to execute `gzip` to unpack maintainer
+scripts and data files [after removing][opkg_install_pkg] the old version of the
+package. When the package being upgraded is `busybox`, which provides `gzip`,
+`opkg` crashes and leaves behind a completely broken system.
+
+To reiterate, `opkg-lede` is (and has been for as long as it has been in
+ProteanOS) **currently unable to upgrade `busybox`**, due to its own design.
+
+[opkg-lede-dd4c78a]: https://git.openwrt.org/?p=project/opkg-lede.git;a=commitdiff;h=dd4c78aa88efd3b9cf516030937c684814df7962
+[opkg_install_pkg]: https://git.openwrt.org/?p=project/opkg-lede.git;a=blob;f=libopkg/opkg_install.c;hb=d4ba162#l1520
+
+The Amazing Alternatives of `busybox`
+-------------------------------------
+
+Instead of [adding alternatives][alts-log] one at a time, [it would be
+nice][bb-ua] to manage all of `busybox`'s utility links using
+`update-alternatives`. Unfortunately, the [maintainer script][bb.pi] that runs
+`update-alternatives` (as well as the [`update-alternatives` script][u-a]
+itself) needs a few `busybox` utilities (`/bin/sh` for a start). Thus, after an
+older version of `busybox` is deconfigured, a newer version can't be configured.
+`busybox` also can't be configured when first unpacked by `prokit`.
+
+[alts-log]: http://git.proteanos.com/pkg/busybox.git/log/alternatives
+[bb-ua]: http://git.proteanos.com/pkg/busybox.git/commit/?id=1558d05c62ed90f7d93a14533541c33896b7b733
+[bb.pi]: http://git.proteanos.com/pkg/busybox.git/tree/busybox.pkg/postinst
+[u-a]: https://git.openwrt.org/?p=project/opkg-lede.git;a=blob;f=utils/update-alternatives.in;hb=d4ba162
+
+One Solution
+============
+
+The next version of `src:opkg-lede` (likely 0+git20190131.d4ba162-7) already
+will have a [wrapper script called `opkg`][opkg] that executes `opkg-cl` (the
+actual binary executable). The script can be extended to first save a copy of
+`/bin/busybox` to an empty temporary directory, generate utility links to it in
+the directory, and add the directory to `PATH`. Until all of this setup is
+complete, the wrapper script must be careful to execute utilities as `busybox
+$util` (a full path to `busybox` won't be necessary, as the usual `/bin/busybox`
+will be available at that point). This includes the interpreter line, which
+will need to be changed to `#!/bin/busybox sh`. `ash` built-in utilities can be
+used as usual.
+
+The `busybox` package can't use `update-alternatives` to manage all of its
+utility links until an `opkg-lede` with this wrapper script functionality is
+uploaded. This is because, even if `busybox`'s `postinst` script is modified to
+use the `busybox` executable directly, other packages' maintainer scripts may be
+executed first, while `busybox` is unpacked but not yet configured (and
+therefore utility links are not yet created).
+
+Once this new `opkg-lede` package is uploaded and `busybox` uses
+`update-alternatives` for everything, `busybox` would need to declare that it
+`Breaks` older versions of `opkg-lede`, to ensure that `opkg-lede` will preserve
+a copy of the `busybox` executable and its utility links. However, this is
+still insufficient, as the version of `opkg` that is *running* must have already
+set up this environment before `busybox` is upgraded. `busybox`'s `prerm`
+script will need to check for this somehow and abort the upgrade if `opkg` is
+too old to have prepared for a safe upgrade. One solution is for the `opkg`
+script to set an `OPKG_BUSYBOX_SAVED` environment variable.
+
+The `opkg` script of the `opkg-lede` package will need to read `busybox`'s list
+of alternatives links. This is currently located at
+`/usr/share/busybox/alternatives`. [The file's format][alts] will change when
+`busybox` uses `update-alternatives` for everything: the last two columns (name
+and priority) will be dropped. `opkg` however can simply read the first column,
+so it will maintain compatibility.
+
+[opkg]: http://git.proteanos.com/pkg/opkg-lede.git/tree/opkg
+[alts]: http://git.proteanos.com/pkg/busybox.git/tree/alternatives?id=e37f03311d934a8f33a9ff31db47b18bbf0be555
diff --git a/dev/wolfutil.mdwn b/dev/wolfutil.mdwn
new file mode 100644
index 0000000..1fba2fe
--- /dev/null
+++ b/dev/wolfutil.mdwn
@@ -0,0 +1,48 @@
+[[!meta title="Unofficial wolfSSL Utility"]]
+
+wolfutil is a command-line tool for the wolfSSL embedded (SSL/)TLS
+library. It is similar to the OpenSSL command-line tool, providing only
+a limited `s_client` TLS client command. The primary goal is to provide
+enough functionality for use by BusyBox's wget applet.
+
+wolfutil's `s_client` command is designed to be stronger by default than
+OpenSSL's, as the latter is only meant to be a "diagnostic tool". That
+is, the following command:
+
+ $ wolfutil s_client -quiet -connect ${host}:${port} \
+ > -servername ${servername}
+
+is roughly equivalent to the more complicated:
+
+ $ openssl s_client -quiet -connect ${host}:${port} \
+ > -servername ${servername} -verify 9 -verify_return_error \
+ > -no_ssl3 -no_tls1 -no_tls1_1
+
+This utility is in no way authored by or affiliated with wolfSSL Inc. or
+its contributors.
+
+
+Downloading
+===========
+
+The current version of wolfutil is [1.0.0][rel-ann].
+
+wolfutil can be found on the ProteanOS files site by [HTTP][dl-http] or
+[FTP][dl-ftp].
+
+wolfutil is maintained in a [Git repository][repo-http], which can be cloned
+from `git://git.proteanos.com/wolfutil/wolfutil.git`.
+
+[rel-ann]: http://lists.proteanos.com/proteanos-dev/2020/08/msg00000.html
+[dl-http]: http://files.proteanos.com/pub/wolfutil/
+[dl-ftp]: ftp://files.proteanos.com/pub/wolfutil/
+[repo-http]: http://git.proteanos.com/wolfutil/wolfutil.git/
+
+
+Mailing List
+============
+
+Bug reports, feature requests, and patches for wolfutil are welcome on the
+[ProteanOS development mailing list][proteanos-dev].
+
+[proteanos-dev]: http://lists.proteanos.com/proteanos-dev/
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 45b9c8d..11b364a 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -8,9 +8,15 @@ install and manage ProteanOS systems. [[Get_started!_→|doc/install/prokit]]
Then, choose how and where to install ProteanOS:
- * [[In_an_isolated_file_system_environment_→|doc/install/jail]]
+ * [[On_an_existing_host_system_under_an_isolated_file_system_environment_→|doc/install/chroot]]
* [[On_a_supported_PC_→|doc/install/pc]]
+ProteanOS package development is typically done on an different host system.
+Running ProteanOS on actual hardware is only necessary for testing things like
+hardware-specific features (e.g. booting with a new `linux-image-*` package),
+network configuration, or system services (e.g. a logging daemon or a Web
+server).
+
See the [[legal_and_technical_notices|doc/legal]] to learn how to find copyright
information for ProteanOS packages and how to build ProteanOS packages from
source code.
diff --git a/doc/install/chroot.mdwn b/doc/install/chroot.mdwn
new file mode 100644
index 0000000..0b27ffe
--- /dev/null
+++ b/doc/install/chroot.mdwn
@@ -0,0 +1,47 @@
+[[!meta title="Isolated File System Environment Installation"]]
+
+[[←_Back_to_Installing_ProteanOS|doc/install]]
+
+These instructions explain how to install ProteanOS into a directory on an
+existing host system to run under an isolated file system environment, or
+"jail", using prokit, the ProteanOS Development Kit. prokit will run ProteanOS
+using the **chroot**(2) system call via the **chroot**(8) wrapper program.
+
+It is assumed that you have already
+[[built_and_optionally_installed_prokit|doc/install/prokit]].
+
+
+Installing ProteanOS
+====================
+
+First decide which "suite" of ProteanOS you wish to install. `rel/trunk` is a
+rolling release that receives updates free of known new bugs; it is recommended
+for regular users. `dev/trunk` receives direct package uploads and should be
+used by ProteanOS developers. Replace `$suite` below with your chosen suite.
+
+Next decide where to install ProteanOS. Replace `$root` below with the path to
+which you want ProteanOS installed.
+
+If you installed prokit to your system, simply run:
+
+ $ sudo prokit install $suite $root
+
+Otherwise, from your prokit build directory, run:
+
+ $ sudo ./prokit install $suite $root
+
+Next Steps
+==========
+
+Familiarize yourself with the ProteanOS Development Kit Manual, if you haven't
+already. The **prokit-shell**(8) and **prokit-opkg**(8) commands are used to
+manage installed ProteanOS systems.
+
+If you'd like to develop packages for ProteanOS, you need to install the
+`build-essential` package (again replacing `prokit` with `./prokit` if you
+haven't installed prokit):
+
+ $ sudo prokit opkg $root install build-essential
+
+This may take a while, depending on your network connection. Then you can start
+[[learning_how_to_prepare_packages|doc/pkg]]!
diff --git a/doc/install/jail.mdwn b/doc/install/jail.mdwn
index 35020b0..1a07fd1 100644
--- a/doc/install/jail.mdwn
+++ b/doc/install/jail.mdwn
@@ -1,45 +1,3 @@
[[!meta title="Isolated File System Environment Installation"]]
-[[←_Back_to_Installing_ProteanOS|doc/install]]
-
-These instructions explain how to install ProteanOS into a directory on an
-existing host system to run under an isolated file system environment, or
-"jail", using prokit, the ProteanOS Development Kit. prokit will run ProteanOS
-using the **chroot**(2) system call via the **chroot**(8) wrapper program.
-
-It is assumed that you have already
-[[built_and_optionally_installed_prokit|doc/install/prokit]].
-
-
-Installing ProteanOS
-====================
-
-First decide which "suite" of ProteanOS you wish to install. Currently only one
-suite is available: `dev/trunk`.
-
-Next decide where to install ProteanOS. Replace `$root` below with the path to
-which you want ProteanOS installed.
-
-If you installed prokit to your system, simply run:
-
- $ sudo prokit install dev/trunk $root
-
-Otherwise, from your prokit build directory, run:
-
- $ sudo src/prokit install dev/trunk $root
-
-Next Steps
-==========
-
-Familiarize yourself with the ProteanOS Development Kit Manual, if you haven't
-already. The **prokit-shell**(8) and **prokit-opkg**(8) commands are used to
-manage installed ProteanOS systems.
-
-If you'd like to develop packages for ProteanOS, you need to install the
-`build-essential` package (again replacing `prokit` with `src/prokit` if you
-haven't installed prokit):
-
- $ sudo prokit opkg $root install build-essential
-
-This may take a while, depending on your network connection. Then you can start
-[[learning_how_to_prepare_packages|doc/pkg]]!
+Moved to [[doc/install/chroot]].
diff --git a/doc/install/pc.mdwn b/doc/install/pc.mdwn
index 619ab60..663a05c 100644
--- a/doc/install/pc.mdwn
+++ b/doc/install/pc.mdwn
@@ -2,10 +2,6 @@
[[←_Back_to_Installing_ProteanOS|doc/install]]
-**NOTE:** These instructions use a feature in an unreleased version of the
-ProteanOS Development Kit. You'll need to have built prokit from its Git
-repository to use the PC installer.
-
This guide explains how to use the interactive installer program distributed
with prokit, the ProteanOS Development Kit, to install ProteanOS on a PC
platform.
@@ -21,9 +17,6 @@ Make sure you have a computer supported by ProteanOS. If your computer is not
supported, you can [[port_ProteanOS_to_run_on_it|doc/plat/porting]]. Currently
supported are:
- * Acer Aspire One AO751h (architecture `i686-linux-glibc`, platform `ao751h`)
- * Dell Dimension 2400 (architecture `i686-linux-glibc`, platform
- `dimension2400`)
* Lenovo ThinkPad X60, X60s, X60t, T60 (architecture `i686-linux-glibc`,
platform `x60`)
* Lenovo ThinkPad X200, X200s, X200 Tablet, R400, T400, R500, T500, etc.
@@ -31,10 +24,8 @@ supported are:
* Libiquity Taurinus X200 and Gluglug Libreboot X200 (architecture
`i686-linux-glibc`, platform `x60`)
-Determine the devices from which your computer can boot. For example, the Acer
-Aspire One AO751h can boot from an internal 2.5" SATA drive or from a storage
-device connected over USB (e.g. a flash drive), while the Dell Dimension 2400
-can only boot from an internal PATA drive.
+Determine the devices from which your computer can boot, for example an internal
+SATA drive or a USB mass storage device (e.g. a flash drive).
Pick a storage device on which you want to install ProteanOS and connect it to
the computer on which you plan to run the installer. You can either connect the
@@ -46,13 +37,18 @@ system on the computer on which you plan to install ProteanOS.
Installation
============
+Decide which "suite" of ProteanOS you wish to install. `rel/trunk` is a rolling
+release that receives updates free of known new bugs; it is recommended for
+regular users. `dev/trunk` receives direct package uploads and should be used
+by ProteanOS developers. Replace `$suite` below with your chosen suite.
+
If you installed prokit to your system, run:
- $ sudo prokit installer-pc -a $arch -p $plat dev/trunk $device
+ $ sudo prokit installer-pc -a $arch -p $plat $suite $device
Otherwise, from your prokit build directory, run:
- $ sudo src/prokit installer-pc -a $arch -p $plat dev/trunk $device
+ $ sudo ./prokit installer-pc -a $arch -p $plat $suite $device
Replace `$arch` with the architecture (e.g. `i686-linux-glibc`), `$plat` with
the platform (e.g. `x60`), and `$device` with the device file name (e.g.
diff --git a/doc/install/prokit.mdwn b/doc/install/prokit.mdwn
index 3e32017..828075c 100644
--- a/doc/install/prokit.mdwn
+++ b/doc/install/prokit.mdwn
@@ -8,40 +8,76 @@ to install a ProteanOS system, run a ProteanOS shell and other commands, manage
software packages on an installed ProteanOS system, and build packages for
ProteanOS.
-Building and installing prokit is easy. Ensure you have a **make**(1) utility
-such as GNU Make installed. No C or C++ compiler or other development tools are
-necessary to build prokit. To install and manage ProteanOS systems you need a
-host system running Linux 3.4 or later.
-The ProteanOS Development Kit uses the **chroot**(8) and **mount**(8) commands,
-which on Linux require superuser access. This guide assumes the use of
-**sudo**(8) for running commands with superuser privileges. Adjust where
-necessary if you don't use **sudo**(8).
+Dependencies
+============
+
+Building prokit requires make, a POSIX-conformant shell with `local`, and basic
+standard utilities. Git and GNU Autoconf and Automake are currently also
+required.
+
+Running prokit requires the following utilities:
+
+ * A POSIX-conformant shell with `local` and standard utilities
+ * gunzip
+ * Either sfdisk or fdisk
+ * mke2fs
+ * cpio
+ * xz from XZ Utils
+ * mount
+ * umount
+ * chroot
+
+prokit also requires OpenWrt's usign utility to verify archive signatures. A
+system copy of usign can be used, however few distributions provide one. An
+embedded copy of usign is included, building of which additionally requires:
+
+ * CMake
+ * A C compiler such as GCC and standard C library headers
+
+On a Debian-based distribution such as Trisquel, `sudo apt-get install
+build-essential cmake` is sufficient.
+
+To install and manage ProteanOS systems you need a host system running Linux 3.4
+or later.
+
+The ProteanOS Development Kit uses the **mount**(8) , **umount**(8), and
+**chroot**(8) commands, which on Linux require superuser access. This guide
+assumes the use of **sudo**(8) for running commands with superuser privileges.
+Adjust where necessary if you don't use **sudo**(8).
Downloading the ProteanOS Development Kit
=========================================
-Clone prokit from the [Git repository][prokit-git]:
+prokit release archives since version 1.1.0 and Git commits since
+2.0.1-55-g545e082 are signed with the maintainer's OpenPGP 4096-bit RSA key.
+Import the key from a key server (available on the SKS network and on
+keys.openpgp.org). Finding a signature path from trusted keys in your keyring
+to this key is recommended if possible.
+
+ $ gpg --recv-keys 0x225031F047FFE51663ED516F1A459ECDE4D604BE
+
+The current released version (2.0.1) of prokit lacks features now used by the
+ProteanOS package archive. Clone prokit from the [Git repository][prokit-git]:
$ git clone git://git.proteanos.com/prokit/prokit.git
$ cd prokit/
-*(Using the current released version, 1.1.0, is not recommended at this time, as
-the Git repository contains numerous major [improvements][prokit-news] including
-use of an updated mirrors list and installer commands for PC block devices and
-initramfs images. The head of the Git master branch is stable, with no known
-bugs. Version 2.0.0 will be released soon, pending some additional new
-features.)*
+Check for signatures on the recent commits. Either run:
+
+ $ git log --show-signature
-Users of Parabola GNU/Linux-libre and Arch [GNU/]Linux can find prokit packages
-in the AUR (thanks to Serge Victor):
+Or configure Git to always show signatures in the log (requires Git 2.10 or
+later):
- * [prokit-git][aur-prokit-git]
+ $ git config log.showSignature true
+ $ git log
+
+Either way, look for a `Good signature` made `using RSA key
+225031F047FFE51663ED516F1A459ECDE4D604BE` in at least the top-most commits.
[prokit-git]: http://git.proteanos.com/prokit/prokit.git/
-[prokit-news]: http://git.proteanos.com/prokit/prokit.git/tree/NEWS/
-[aur-prokit-git]: https://aur.archlinux.org/packages/prokit-git/
Building the ProteanOS Development Kit
@@ -52,9 +88,6 @@ Configure and build prokit:
$ ./autogen.sh
$ make
-To build from the repository you'll need to have GNU Autoconf and Automake
-installed.
-
Installing the ProteanOS Development Kit
========================================
@@ -78,3 +111,5 @@ prokit comes with a manual, starting with the **prokit**(1) page:
Or, if you didn't install prokit, you can find the manual by running:
$ man man/prokit.1
+
+The manual is also available from the [[prokit_homepage|dev/prokit]].
diff --git a/doc/plat/porting.mdwn b/doc/plat/porting.mdwn
index fe83706..c9d0e5d 100644
--- a/doc/plat/porting.mdwn
+++ b/doc/plat/porting.mdwn
@@ -16,23 +16,15 @@ So read on to port ProteanOS to your computer!
Set Up a ProteanOS System
=========================
-Get miniprokit, the "Mini ProteanOS Development Kit", as instructed on the
-[[download_page|get]].
+[[Get_prokit|doc/install/prokit]], the ProteanOS Development Kit.
-Connect the storage medium (e.g. a hard disk drive connected using a USB
-adapter/dock or a USB flash drive). On it, create one primary partition of type
-0x83 (Linux) and mark it as bootable. cfdisk, sfdisk, or fdisk can be used for
-this.
+Connect a storage medium (e.g. a hard disk drive connected using a USB
+adapter/dock or a USB flash drive). Run the following commands (replacing
+`/dev/sdb` with the path to storage device and `i686-linux-glibc` with the
+architecture of the target system) to create a partition layout and file system
+and install ProteanOS into it:
-Run the following commands (replacing `/dev/sdc1` with the path to the newly
-created partition and `i686-linux-glibc` with the architecture of the target
-system) to make and mount an ext4 file system, install ProteanOS into it, and
-enter a ProteanOS shell:
-
- # mke2fs -t ext4 /dev/sdc1
- # mount /dev/sdc1 /mnt
- # /path/to/miniprokit.sh install -a i686-linux-glibc -P dev /mnt
- # /path/to/miniprokit.sh shell /mnt
+ # prokit installer-pc -a i686-linux-glibc -p dev dev/trunk /dev/sdb
Install, Configure, and Build the `linux-libre` Source Package
@@ -43,31 +35,32 @@ Choose a platform on which this new platform will be based. In this tutorial,
Install toolchain packages, the source package, and build dependencies:
- / # opkg install build-essential-$(cat /etc/proteanos_arch) \
- > src-linux-libre config-linux-libre-ao751h bc xz \
- > libncursesw.5-dev libtinfo-dev terminfo
+ # prokit opkg /dev/sdb1 install build-essential src-linux-libre \
+ > config-linux-libre-ao751h bc xz libncursesw.5-dev libtinfo-dev terminfo
-Change to the source package directory and use opkbuild to unpack the upstream
-sources and install platform configuration files:
+Start a ProteanOS shell, change to the source package directory, and use
+opkbuild to unpack the upstream sources and install platform configuration
+files:
- / # cd /usr/src/linux-libre_3.10.40~gnu-2/
- /usr/src/linux-libre_3.10.40~gnu-2 # opkbuild -bcT nop -P ao751h
+ # prokit shell /dev/sdb1
+ # cd /usr/src/linux-libre_*/
+ # opkbuild -bcT nop -p ao751h
Hide the list of platform configuration files from opkbuild, so the modified
configuration won't get overwritten:
- /usr/src/linux-libre_3.10.40~gnu-2 # mv platconf platconf.no
+ # mv platconf platconf.no
Enter the upstream source tree and configure Linux-libre:
- /usr/src/linux-libre_3.10.40~gnu-2 # cd tmp/src/
- /usr/src/linux-libre_3.10.40~gnu-2/tmp/src # make menuconfig
+ # cd tmp/src/
+ # make menuconfig
Return to the source package directory and build the package for a platform
other than `dev`:
- /usr/src/linux-libre_3.10.40~gnu-2/tmp/src # cd ../../
- /usr/src/linux-libre_3.10.40~gnu-2 # opkbuild -bcdP dimension2400
+ # cd ../../
+ # opkbuild -bcdp dimension2400
Make the System Bootable
@@ -75,22 +68,16 @@ Make the System Bootable
Install the newly built linux-image package:
- /usr/src/linux-libre_3.10.40~gnu-2 # opkg install \
- > ../linux-image_3.10.40~gnu-2_i686-linux-glibc_dimension2400.opk
+ # opkg install ../linux-image_*_i686-linux-glibc_dimension2400.opk
Set a hostname and enable initialization of services:
- /usr/src/linux-libre_3.10.40~gnu-2 # cd /
- / # printf 'proteanos\n' >/etc/hostname
- / # printf 'enabled\n' >/etc/rc.policy
+ # printf 'proteanos\n' >/etc/hostname
+ # printf 'enabled\n' >/etc/rc.policy
Exit the ProteanOS shell:
- / # exit
-
-Back on the host system, unmount the file system:
-
- # umount /mnt
+ # exit
The storage medium can then be removed and connected to the target computer.
@@ -104,8 +91,8 @@ Once the `linux-libre` configuration is tested to boot and support all the
relevant hardware and features, a configuration package should be made.
Download the `config-*` package for the base platform you chose, either by
-running, for example, `opkg install src-config-ao751h` on ProteanOS or by
-cloning the relevant Git repository, e.g. `git clone
+running, for example, `prokit opkg install src-config-ao751h` or by cloning the
+relevant Git repository, e.g. `git clone
git://git.proteanos.com/pkg/config-ao751h.git`.
Set the `Maintainer` field in the `control` file.
@@ -125,8 +112,9 @@ Regenerate the metadata for the binary packages:
$ ./config
Copy the `linux-libre` configuration file (`tmp/src/.config` under the source
-package directory) into `src/linux-libre/*/`.
+package directory) into `src/linux-libre/*/` in your new configuration source
+package.
-The `config-*` package can then be built, e.g. `opkbuild -S` to build the source
-package. Please notify the ProteanOS community of your porting work, if you
-haven't already, and offer to upload and maintain the `config-*` package.
+Your configuration package can then be built, e.g. `prokit build -S .` to build
+the source package. Please notify the ProteanOS community of your porting work,
+if you haven't already, and offer to upload and maintain the `config-*` package.
diff --git a/templates/page.tmpl b/templates/page.tmpl
index 5370e18..ddb0e9e 100644
--- a/templates/page.tmpl
+++ b/templates/page.tmpl
@@ -164,12 +164,12 @@
<!-- Created <TMPL_VAR CTIME> -->
</p>
<p class="copyright">
- Copyright &copy; 2011–2017
+ Copyright &copy; 2011–2020
Patrick M<span class="super">c</span>Dermott
</p>
<p class="copyright">
ProteanOS is sponsored by
- <a href="http://libiquity.com/">Libiquity</a>.
+ <a href="https://www.libiquity.com/">Libiquity</a>.
</p>
</div>
</footer>