summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dev.mdwn17
-rw-r--r--dev/archive/mirroring.mdwn108
-rw-r--r--dev/archive/signing.mdwn97
-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/pkg/needed.mdwn14
-rw-r--r--dev/pkg/opkg.mdwn10
-rw-r--r--dev/pkg/opkg/future.mdwn4
-rw-r--r--dev/pkg/opkg/static.mdwn6
-rw-r--r--dev/pro-archman.mdwn4
-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.mdwn111
-rw-r--r--dev/shlibdeps.mdwn78
-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
42 files changed, 1198 insertions, 379 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/archive/signing.mdwn b/dev/archive/signing.mdwn
index 0dfd6be..0076ae8 100644
--- a/dev/archive/signing.mdwn
+++ b/dev/archive/signing.mdwn
@@ -11,6 +11,12 @@ retrieve packages from the archive.
Implementation
==============
+**TODO:** ProteanOS is implementing [Ed25519][ed25519] signatures, likely
+without OpenPGP PKI. The pro-archman and prokit sections below will need some
+rethinking.
+
+**TODO:** Consider [ucert][].
+
ProteanOS Archive Manager
-------------------------
@@ -39,6 +45,18 @@ key(s) into their keyring.
If keys are distributed with prokit, **revocations and key transitions need to
be handled somehow**.
+New keys can be distributed with new versions of prokit, though this would
+require users to upgrade prokit to get new keys. Revocations, being more of a
+security risk that can go unnoticed by users, would need to be more actively and
+immediately received by users. prokit could perhaps check a key server (over
+HKPS) each time before using a key.
+
+And if prokit needs to check key servers anyway, it could also use them to find
+new archive signing keys, as long as at least one "seed" key is distributed with
+prokit. prokit should find and use only archive signing keys (by a user ID
+specified in the profile) that are signed by a non-revoked previous key (or a
+signed chain of keys with the user ID).
+
A user already has to import a key into their own keyring to verify their prokit
download. Maybe it's better to just instruct users to also download the archive
signing key(s) into their keyrings. This takes advantage of existing PKI, and
@@ -51,66 +69,19 @@ Suggestions welcome.
Opkg
----
-The opkg package manager supports verifying package feeds. This feature
-requires linking against the [GnuPG Made Easy (GPGME) library][gpgme].
-
-ProteanOS packages for GPGME and its dependencies need to be prepared and
-uploaded. gpgme depends on libgpg-error (packaged and uploaded) and libassuan.
-Its testsuite depends on gnupg. gnupg in turn depends on libgpg-error,
-libgcrypt, libassuan, libksba, and npth. libgcrypt depends on libgpg-error.
-Below is a DOT-language digraph representation of these dependencies that can be
-rendered with Graphviz.
-
-Once gpgme and its dependencies are packaged in ProteanOS, opkg can be built
-with package feed verification. This feature should be optional. The `opkg`
-source package should have two builds, with and without verification enabled.
-This will probably mean generating new binary packages `opkg-gpg` and
-`libopkg.1-gpg` (which will conflict with `opkg` and `libopkg.1` respectively)
-and installing data files into binary package directories without the aid of
-`oh-installfiles`. Although, option 1 of the [[static_libopkg|pkg/opkg/static]]
-plan would simplify this by getting rid of the `libopkg.1` and `libopkg.1-dev`
-packages altogether. The `opkg` source package could then build just `opkg`,
-`opkg-gpg`, `opkg-dbg`, and `opkg-doc` binary packages.
-
-The DOT-language dependency graph (which can be rendered as a PNG image with the
-command pipeline in the header comment, if saved as `gpgme.dot`):
-
- /*
- * Dependencies of GPGME
- *
- * Render by running:
- * ccomps -x gpgme.dot | dot | gvpack | neato -n2 -Tpng -ogpgme.png
- */
-
- digraph deps {
- graph [fontname="FreeSans"];
- node [fontname="FreeSans"];
- edge [fontname="FreeSans"];
-
- subgraph cluster_gpgme {
- style = filled;
- color = "#0093dd";
- node [style=filled];
- label = "gpgme";
-
- "gpgme" [color=red];
- "libgpg-error" [color=green];
- "libassuan" [color=red];
- "gnupg" [color=red];
- "libgcrypt" [color=red];
- "libksba" [color=red];
- "npth" [color=red];
- }
-
- "gpgme" -> "libgpg-error";
- "gpgme" -> "libassuan";
- "gpgme" -> "gnupg" [color=gray,label="testsuite"];
- "gnupg" -> "libgpg-error";
- "gnupg" -> "libgcrypt";
- "gnupg" -> "libassuan";
- "gnupg" -> "libksba";
- "gnupg" -> "npth";
- "libgcrypt" -> "libgpg-error";
- }
-
-[gpgme]: https://www.gnupg.org/software/gpgme/index.html
+ProteanOS [[now|dev/opkg/future]] uses [opkg-lede][] with [usign][], a
+lightweight implementation of the [Ed25519][ed25519] public-key signature
+system.
+
+Archive Keyring
+---------------
+
+The package archive keyring will need to be maintained in a ProteanOS package.
+Key transitions, expiration changes, and revocations will be performed by
+revisions to this package. It should possibly be upgraded automatically to
+ensure that installed systems always have up-to-date keys.
+
+[ucert]: https://git.openwrt.org/?p=project/ucert.git;a=blob;f=README.md;hb=HEAD
+[opkg-lede]: https://git.openwrt.org/?p=project/opkg-lede.git;a=summary
+[usign]: https://git.openwrt.org/?p=project/usign.git;a=summary
+[ed25519]: https://ed25519.cr.yp.to/
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/pkg/needed.mdwn b/dev/pkg/needed.mdwn
index a1fcd20..d96b166 100644
--- a/dev/pkg/needed.mdwn
+++ b/dev/pkg/needed.mdwn
@@ -23,6 +23,20 @@ the [work by Neil Williams for Debian][debian-perl-cross].
[perl-cross]: https://lists.debian.org/debian-embedded/2012/06/msg00011.html
[debian-perl-cross]: http://www.linux.codehelp.co.uk/serendipity/index.php?/archives/239-Long-term-maintenance-of-perl-cross-build-support-in-Debian.html
+Ruby 2.5 (`ruby`)
+-------------------
+
+<https://www.ruby-lang.org/>
+
+Ruby is a language interpreter with an easy to learn syntax, used for many different projects and is one of the most popular languages.
+
+Python 3.7 (`python`)
+---------------------
+
+<https://www.python.org/>
+
+Python is an easy to learn language and like Ruby is used in many different projects like: Game Development, Web Servers and even Console Programs.
+
GNU Autoconf (`autoconf`)
-------------------------
diff --git a/dev/pkg/opkg.mdwn b/dev/pkg/opkg.mdwn
index 89e11e0..6bd481d 100644
--- a/dev/pkg/opkg.mdwn
+++ b/dev/pkg/opkg.mdwn
@@ -1,11 +1,13 @@
[[!meta title="Opkg in ProteanOS"]]
ProteanOS uses [opkg][opkg] to manage packages after installation with
-[[prokit|dev/prokit]]. There are a few tasks on the roadmap for ProteanOS's
-opkg packaging:
+[[prokit|dev/prokit]]. There are a few now completed tasks for ProteanOS's opkg
+packaging:
- * [[Statically_linking_against_libopkg|dev/pkg/opkg/static]]
- * [[Verifying_package_feed_index_files|dev/archive/signing]]
+ * [[Statically_linking_against_libopkg|dev/pkg/opkg/static]] **[DONE]**
+ * [[Verifying_package_feed_index_files|dev/archive/signing]] **[opkg part
+ DONE]**
* [[Handling_the_growth_of_new_upstream_versions|dev/pkg/opkg/future]]
+ **[DONE]**
[opkg]: https://git.yoctoproject.org/cgit/cgit.cgi/opkg/tree/README
diff --git a/dev/pkg/opkg/future.mdwn b/dev/pkg/opkg/future.mdwn
index cf5f69c..4ec4e8c 100644
--- a/dev/pkg/opkg/future.mdwn
+++ b/dev/pkg/opkg/future.mdwn
@@ -1,5 +1,9 @@
[[!meta title="The Future of Opkg in ProteanOS"]]
+ProteanOS is switching to opkg-lede.
+
+**The rest of this page is kept only for reference and historical purposes.**
+
[[←_Back_to_Opkg in ProteanOS|dev/pkg/opkg]]
Background
diff --git a/dev/pkg/opkg/static.mdwn b/dev/pkg/opkg/static.mdwn
index deb3206..c82e541 100644
--- a/dev/pkg/opkg/static.mdwn
+++ b/dev/pkg/opkg/static.mdwn
@@ -1,5 +1,11 @@
[[!meta title="Static libopkg"]]
+**This work is now done.**
+
+**The rest of this page is kept only for reference and historical purposes.**
+
+---
+
[[←_Back_to_Opkg in ProteanOS|dev/pkg/opkg]]
Background
diff --git a/dev/pro-archman.mdwn b/dev/pro-archman.mdwn
index 186287f..6079eee 100644
--- a/dev/pro-archman.mdwn
+++ b/dev/pro-archman.mdwn
@@ -23,7 +23,7 @@ The ProteanOS Archive Manager can:
Downloading
===========
-The current version of pro-archman is [1.4.0][rel-ann].
+The current version of pro-archman is [2.0.0][rel-ann].
pro-archman can be found on the ProteanOS files site by [HTTP][dl-http] or
[FTP][dl-ftp].
@@ -36,7 +36,7 @@ repository][repo-debian-http], which can be cloned from
`git://git.proteanos.com/pro-archman/pro-archman.debian.git`. Prebuilt packages
are not yet available.
-[rel-ann]: http://lists.proteanos.com/proteanos-dev/2015/05/msg00000.html
+[rel-ann]: http://lists.proteanos.com/proteanos-dev/2019/04/msg00002.html
[dl-http]: http://files.proteanos.com/pub/pro-archman/
[dl-ftp]: ftp://files.proteanos.com/pub/pro-archman/
[repo-http]: http://git.proteanos.com/pro-archman/pro-archman.git/
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 bb7df49..02f6810 100644
--- a/dev/releases/1/packages.mdwn
+++ b/dev/releases/1/packages.mdwn
@@ -9,11 +9,12 @@ 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-2
+ bzip2 1.0.6-3
cmake 3.0.2-1
cmatrix 1.2a-1
config-ao751h 1.5
@@ -22,73 +23,89 @@ 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
- ich9deblob 20150518fix~git20150628.0e3520f-1
- iptables 1.4.21-2
+ 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 20160907-1
libarchive 3.1.2-1
+ libassuan 2.5.1-2
libexif 0.6.21-1
libffi 3.1-1
- libgpg-error 1.12-1
+ libgcrypt 1.8.4-2
+ libgpg-error 1.32-2
libjpeg-8 8d-1
+ libksba 1.3.5-2
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
- libunistring 0.9.3-1
+ libubox 0+git20190227.eeef7b5-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 3.0.0~beta7-1
- opkg 0.2.2-1
- opkhelper-3.0 3.0.0-2
+ opkbuild 4.2.0-1
+ opkg 0.2.4-3
+ 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: 81
- Binary packages: 403
+ Source packages: 98
+ Binary packages: 395
The above list was generated by running the following shell script:
@@ -98,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))
@@ -109,7 +123,7 @@ The above list was generated by running the following shell script:
tblline="${tblline}-"
i=$(($i + 1))
done
- printf "%-${pkgw}s %-${verw}s\n" 'Source Package' 'Upstream Version'
+ printf "%-${pkgw}s %s\n" 'Source Package' 'Upstream Version'
printf '%s\n' "${tblline}"
# Print table
@@ -125,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"); 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/shlibdeps.mdwn b/dev/shlibdeps.mdwn
new file mode 100644
index 0000000..e3003ed
--- /dev/null
+++ b/dev/shlibdeps.mdwn
@@ -0,0 +1,78 @@
+[[!meta title="Automatic Shared Library Dependency Substitution Variables"]]
+
+Background
+==========
+
+Currently, binary packages' control files (`<binpkg>.pkg/control` in source
+packages) must explicitly list library dependencies. Package maintainers can
+manually see ELF files' `DT_NEEDED` entries with tools like **readelf** or
+**ldd** and figure out which binary packages provide each SONAME (usually just
+dropping `.so` from the middle of the SONAME, e.g. `libz.1` provides
+`libz.so.1`). Being a manual process, this method is error-prone: it's an extra
+step that can be forgotten when preparing a new package or updating to a new
+upstream version, it's possible to miss some ELF files in binary packages, etc.
+An automated solution is clearly desirable.
+
+Debian achieves this with a tool called **dpkg-shlibdeps**, which:
+
+ 1. Finds all ELF files in each binary package,
+ 2. Finds all libraries against which each ELF file is linked (i.e.
+ `DT_NEEDED`),
+ 3. Finds dependency libraries on the system (resolving SONAMEs to file names),
+ 4. Looks up the packages that provide each dependency library (with
+ `dpkg -S <lib-file-name>`), and
+ 5. Checks whether each ELF file uses symbols from its library dependencies (and
+ warns of any useless/avoidable dependencies).
+
+ProteanOS should have a similar tool. This document describes how this can be
+implemented.
+
+Implementation
+==============
+
+Changes need to be made in three places in ProteanOS: the Source Package Format
+specification, opkbuild, and opkhelper.
+
+SPF 2.0
+-------
+
+SPF 2.0 needs to be amended to specify `tmp/<binpkg>.substvars` files, like the
+`substvars` file but generated during the build process (while commands from the
+`build` makefile are run and before opkbuild tools complete the package
+build) and specific to each binary package.
+
+opkbuild
+--------
+
+opkbuild needs to read the `tmp/<binpkg>.substvars` files and use them when
+generating binary packages' `control` files.
+
+opkhelper
+---------
+
+opkhelper needs a new tool, which will be called **oh-shlibdeps**, to be run
+after **oh-installfiles**. This new tool will:
+
+ 1. Find all ELF files in each binary package (**oh-strip** already does
+ something similar),
+ 2. Run the C library's **ldd** tool and parse its output (e.g. with
+ `sed -n 's/^\t.* => \(.*\) (.*)$/\1/p;'`) to find the file names of all
+ libraries against which each ELF file is linked (a combination of steps 2
+ and 3 above), and
+ 3. Look up the packages that provide each dependency library (with
+ `opkg search ${filename} | sed 's/ - .*$//;'`).
+
+Detecting useless/avoidable dependencies is considered outside the scope of the
+current proposed design and may be considered in the future.
+
+ProteanOS's `opkhelper-3.0` binary package will need to ensure the existence of
+the **ldd** tool. **ldd** is provided by the `libc-bin` package on the
+`any-any-glibc` architectures (currently all architectures in ProteanOS).
+musl's RTLD (a.k.a. dynamic linker) has **ldd** functionality built-in and
+enabled when executed as `ldd`, so no separate package will be required. So the
+needed dependencies will depend on the architecture, however `opkhelper-3.0` is
+`Architecture: all`, which means it can't have architecture-dependent
+dependencies (which would be solved at build time by opkbuild, not at run time
+by opkg). Therefore, `opkhelper-3.0` will likely have to depend on
+`libc-bin | ldd`, which will work on either `any-any-glibc` or `any-any-musl`
+architectures if the musl library binary package `Provides: ldd`.
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>