diff options
Diffstat (limited to 'dev')
27 files changed, 881 insertions, 171 deletions
diff --git a/dev/archive/mirroring.mdwn b/dev/archive/mirroring.mdwn index 9d2b38a..deabb91 100644 --- a/dev/archive/mirroring.mdwn +++ b/dev/archive/mirroring.mdwn @@ -1,53 +1,117 @@ [[!meta title="Mirroring the ProteanOS Package Archive"]] -Running a mirror of the ProteanOS package archive contributes to the +Running a public mirror of the ProteanOS package archive contributes to the availability of ProteanOS. -You can keep your mirror private or make it an official mirror. +Organizations deploying many ProteanOS systems are encouraged to make local +mirrors, which they may keep private or make public, to save bandwidth on both +their and ProteanOS's infrastructure. Setting up a Mirror =================== -A mirror takes about 700 MiB of storage space as of this writing and should be +Overview +-------- + +*(Impatient mirror administrators may skip this informational section and read +the instructional sections below.)* + +A mirror takes about 730 MiB of storage space as of this writing and should be expected to grow beyond that. -The following command will list files in the archive: +The curious may view a list of files in the archive with the following command: $ rsync --recursive --exclude .db rsync://files.proteanos.com/proteanos -The following command will mirror the archive: - - $ rsync --recursive --times --delete --exclude .db \ - > rsync://files.proteanos.com/proteanos /path/to/your/mirror/directory/ +See below for commands to copy archive files to a local mirror. -Packages are moved from incoming into the archive four times daily. The +Packages are processed from the incoming queue into the archive four times +daily, so mirrors need not be updated more frequently than that. The [[archive_management_software|dev/pro-archman]] is [configured][arch-conf] to keep unreferenced files in the pool for one day, so mirrors must be updated at least once a day. Otherwise, during the update, some feed index files may -reference deleted files. +reference deleted files. Updating at least twice daily is recommended, in case +the synchronization source is ever temporarily unreachable. + +Serving the archive mirror at `/pub/proteanos` over HTTP and FTP is recommended, +but any path and either protocol may be used. HTTP Strict Transport Security +(HSTS) must not be used except on private mirrors used by ProteanOS systems +known to install the `wolfssl-util` package. The ProteanOS package archive is +already [cryptographically verified][archive-signing] using software smaller +than a TLS implementation. + +Mirrors are classified by their synchronization source as either "primary" or +"secondary" as described below. This design distributes synchronization +bandwidth usage more efficiently across the mirror network. Secondary mirrors +will typically update a few hours after primary mirrors do, but are otherwise +still "first-class citizens". All mirrors regardless of classification are +treated equally by [[dev/prokit]], the installer utility that selects a mirror. + +Please configure private mirrors as secondary mirrors, so as to reserve +ProteanOS project bandwidth for those that contribute bandwidth back to the +project. [arch-conf]: http://files.proteanos.com/pub/proteanos/conf +[archive-signing]:http://lists.proteanos.com/proteanos-dev/2019/04/msg00008.html + +Primary Public Mirror +--------------------- + +Primary mirrors are those that synchronize directly from +<files.proteanos.com> and must serve their contents publicly over HTTP +(without HSTS) and rsync and may also serve over anonymous FTP as defined by +[IETF RFC 1635][rfc1635] with no password requirements. + +Run the following command one to four times (four times preferred) daily to +synchronize your mirror: + + $ rsync --recursive --times --delete --exclude .db \ + > rsync://files.proteanos.com/proteanos /path/to/your/mirror/directory/ + +Secondary Public or Private Mirror +---------------------------------- +Secondary mirrors are those that synchronize from a primary mirror and serve +their contents either publicly or privately. Public mirrors must serve over +HTTP (without HSTS) and may also serve over anonymous FTP as defined by [IETF +RFC 1635][rfc1635] with no password requirements. Private mirrors may serve +over either protocol. -Making an Official Mirror -========================= +Run the following command one to four times (four times preferred) daily to +synchronize your mirror: + + $ rsync --recursive --times --delete --exclude .db \ + > ${src} /path/to/your/mirror/directory/ -Official mirror sites should make their archive mirrors available at -`/pub/proteanos` over HTTP and FTP. Sites should also make their archive -mirrors accessible over rsync, if possible. +Where `${src}` is any primary mirror in the [rsync mirrors list][mirrors-rsync]. +Please try to select a primary mirror that is being used by few or no other +secondary mirrors, to evenly spread the load across the primary mirrors. -Once your mirror is set up, please announce it to the [ProteanOS development -mailing list][proteanos-dev] ([list info][proteanos-dev-info]). Please include -the following information in your announcement: +[rfc1635]: https://tools.ietf.org/html/rfc1635 + + +Announcing a Public Mirror +========================== + +After setting up a public mirror, please announce it to the [ProteanOS +development mailing list][proteanos-dev] ([list info][proteanos-dev-info]). +Please include the following information in your announcement: * Name and e-mail address of site maintainer; * Name and URL of site sponsor, if any; - * Domain name, or IPv4 and/or IPv6 address, of mirror site; - * Available protocols; - * Country of site; - * Frequency of mirroring; and + * URIs of mirror site (HTTP and/or FTP, and rsync for primary mirrors); + * Location (country at a minimum) of site; + * Synchronization frequency (or times); + * Synchronization source, in the case of a secondary mirror; and * Any other comments about the site. +Your mirror will be reviewed and added to the official mirror lists +([HTTP][mirrors-http] and [FTP][mirrors-ftp] used by [[dev/prokit]], as well as +[rsync][mirrors-rsync] referenced above). + [proteanos-dev]: mailto:proteanos-dev@lists.proteanos.com [proteanos-dev-info]: http://lists.proteanos.com/proteanos-dev/ +[mirrors-http]: http://files.proteanos.com/pub/proteanos-mirrors-http +[mirrors-ftp]: http://files.proteanos.com/pub/proteanos-mirrors-ftp +[mirrors-rsync]: http://files.proteanos.com/pub/proteanos-mirrors-rsync diff --git a/dev/multiarch.mdwn b/dev/multiarch.mdwn new file mode 100644 index 0000000..d869a7d --- /dev/null +++ b/dev/multiarch.mdwn @@ -0,0 +1,180 @@ +[[!meta title="Multiarch Design"]] + +Earlier design proposals are documented in [[another_page|dev/multiarch/design]] +kept for historical purposes. + + +Background +========== + +ProteanOS is a self-hosting binary distribution that builds its own packages. +It is also an embedded distribution, intended to be suitable for small +resource-limited systems. It may not be practical to natively build all of +ProteanOS on real hardware for every architecture to be supported. Thus, it +will be preferable to cross-build all of ProteanOS's packages, making ProteanOS +a highly ambitious cross-built self-hosting binary distribution. + +Cross-compiling and cross-assembling self-contained code is a solved problem, +however programs typically use separately built libraries, which must be +installed at build time to be available for compiling and linking. Sometimes, +these dependency libraries will already be installed for use by the native +system. So it needs to be possible to "coinstall" different architecture builds +of each library. Package management and build tools also need to be able to +install dependency packages of the correct architecture; for example, libraries +must be of the *host* architecture (the architecture **for** which a package is +being built), but build utilities must be of the *build* architecture (the +architecture **on** which a package is being built). Further complicating +dependency resolution, such build utilities often themselves depend on +libraries, which must also be of the build architecture (not the host +architecture like libraries that are direct build-dependencies). These are the +two main problems in cross-building distribution packages: coinstallability and +dependencies. The solution is a design known as "multiarch". + +ProteanOS's multiarch design is inspired by, but different from, that +[specified][wuc-mas] and [documented][wdo-ma] in Debian and Ubuntu. + +ProteanOS's design solves the coinstallability and dependency problems without +*any* modifications to its package manager, opkg-lede. This is desirable +because opkg-lede is a tool used by many distributions separate from ProteanOS, +and its upstream maintainers (OpenWrt) would likely be unwilling to merge and +maintain invasive patches specific to a different distribution (making the +patches impossible to test upstream). + +[wdo-ma]: http://wiki.debian.org/Multiarch +[wuc-mas]: https://wiki.ubuntu.com/MultiarchSpec + + +Design +====== + +Coinstallability +---------------- + +opkg-lede doesn't allow multiple packages to provide the same file path, so, in +order to be coinstallable, library packages must install all of their files into +architecture-qualified locations. [Debian and Ubuntu][wuc-mas-arch-indep-files] +limit this requirement to only files whose contents differ between +architectures. This is accomplished by the package manager dpkg requiring all +packages of the same name to be the same version, verifying that shared files +have identical contents, and reference counting shared files. As explained +above, ProteanOS's multiarch design doesn't entail such modifications to the +package manager. + +opkg-lede also doesn't allow installation of multiple packages with the same +name and different architectures. The only way to solve this without modifying +the package manager is to qualify the names of coinstallable packages with +their host architectures. This will be done by appending a colon followed by +the host architecture to each coinstallable package name, e.g. `libc.6` becomes +`libc.6:amd64-linux-glibc`. Package names appear in the file system under +`/var/cache/opkg/archives/` and `/var/lib/opkg/info/`, so using a colon in +package names will prevent the use of restricted file systems such as FAT file +systems as the root file system. + +Dependencies +------------ + +opkg-lede allows packages from different architectures to be installed, but +there is no way to select the architecture to install other than blanket +priority values. Since libraries of different architectures will often need to +be installed during the same installation transaction, as described above, such +a blunt solution is insufficient. + +[Debian and Ubuntu][wuc-mas-control-fields] solve this by declaring the kinds of +dependencies each package is able to satisfy (based on the interfaces it +provides: executables and/or libraries). Again this requires modifications to +the package manager to affect dependency resolution. ProteanOS's design is +similar, but implemented in a way such that *dependent* binary packages are +responsible for declaring the architectures of *their dependencies* (which can +be done automatically at build time, so package maintainers can focus on +declaring how their packages satisfy dependencies, as in Debian and Ubuntu). + +One way to declare dependency semantics is by introducing a new single-purpose +control field like Debian's and Ubuntu's `Multi-Arch`. However, ProteanOS will +instead use [a control field that serves multiple purposes: +`Section`][spf-fields-bin]. `Section: lib` packages will be automatically made +coinstallable by opkbuild, by architecture-qualifying their names as described +above. Library dependencies generated by oh-shlibdeps (with [a +fix][oh-shlibdeps-host-libdirs] to be released) will automatically use the +architecture-qualified names. + +ProteanOS systems should have only native architecture feeds for sections +`boot`, `dev`, and `util` but may have multiple feeds for sections `dbg`, `lib`, +and `libdev`. (Sections `doc`, `locale`, and `share` are +architecture-independent.) + +opkg-lede's architecture priorities as described above can be useful in certain +specific ways, through a [wrapper script that adds an `-a`/`--host-architecture` +option][opkg-wrapper] (similar to that of apt-get). First, since multiple +`Section: dbg` feeds may be downloaded and requiring users to +architecture-qualify such packages would be undesirable, such packages could be +installed instead via `opkg -a amd64-linux-glibc foo-dbg` or even simply `opkg +install foo-dbg` for the native architecture. Similarly, `Section: libdev` +packages as build dependencies could be automatically installed for the host +architecture by prokit supplying an appropriate `-a` option, allowing +maintainers to continue listing unqualified package names in `Build-Depends` +instead of having to add `:${Host-Arch}` to every `Section: libdev` package in +`Build-Depends`. Therefore, only `Section: lib` packages need to have +architecture-qualified names (due to the coinstallability issue described +above), and neither users nor maintainers are expected to manually install or +list as dependencies such architecture-qualified packages. + +[wuc-mas-arch-indep-files]: https://wiki.ubuntu.com/MultiarchSpec#Architecture-independent_files_in_multiarch_packages +[wuc-mas-control-fields]: https://wiki.ubuntu.com/MultiarchSpec#Binary_package_control_fields +[spf-fields-bin]: http://specs.proteanos.com/spf-2.0/fields.html#fields-bin +[oh-shlibdeps-host-libdirs]: http://git.proteanos.com/opkhelper/opkhelper.git/commit/?id=c214c727f60b070aa502b20dcc1ad7e3ce8579f2 +[opkg-wrapper]: http://git.proteanos.com/pkg/opkg-lede.git/tree/opkg + + +Use Cases +========= + +**Run-time dependency on a utility:** Only the native architecture of the +utility dependency is available in the downloaded feed lists, and the dependency +is not architecture-qualified. The native architecture will be installed. + +**Run-time dependency on a library:** Multiple architectures of the library +dependency may be available, and the dependency must be qualified with the +native architecture. + +**Run-time dependency on a language extension:** Despite technically being a +shared object file, only the native architecture of the language extension +dependency is available in the downloaded feed lists, and the dependency is not +architecture-qualified. The language extension dependency in turn depends on a +language interpreter, which is also not architecture-qualified. The native +architecture of both will be installed. + +**Build-time dependency on a utility:** Only the build architecture of the +utility dependency is available in the downloaded feed lists, and the dependency +is not architecture-qualified. The build architecture will be installed. + +**Build-time dependency on a library:** Multiple architectures of the library +dependency are available, and the dependency must be qualified with the host +architecture. + +**Build-time dependency on a language extension:** Despite technically being a +shared object file, only the native architecture of the language extension +dependency is available in the downloaded feed lists, and the dependency is not +architecture-qualified. The language extension dependency in turn depends on a +language interpreter, which is also not architecture-qualified. The native +architecture of both will be installed. + + +Implementation +============== + +File System Hierarchy +--------------------- + +As explained above, to be coninstallable, library packages must install all of +their files in architecture-qualified locations. Debian and Ubuntu install +shared object files in `/usr/lib/<triplet>` or `/lib/<triplet>`, where +`<triplet>` is a [GNU system type][ac-systemtype]. Since multiple ProteanOS +architectures may share the same GNU system type, ProteanOS architecture names +are instead used in such library directories. + +ProteanOS's GNU Binutils and GCC packages have been patched and configured to +use multiarch library paths since their initial releases in 2014. opkhelper has +used multiarch library paths when configuring packages since version 3.0.0-beta1 +released in 2012. + +[ac-systemtype]: https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/System-Type.html diff --git a/dev/opkbuild.mdwn b/dev/opkbuild.mdwn index b055f80..9e45e00 100644 --- a/dev/opkbuild.mdwn +++ b/dev/opkbuild.mdwn @@ -2,24 +2,24 @@ opkbuild is a distribution build system – a set of tools for building software packages. From source packages it builds binary packages for -use with the [opkg package manager][opkg]. +use with the opkg package manager. Currently one format of source package is supported by opkbuild: ProteanOS [Source Package Format 2.0][spf-2.0]. -opkbuild is similar in function to the [development library and utilities -of dpkg][dpkg-dev] ([sources][dpkg-dev-git]), the Debian package manager. +opkbuild is similar in function to the [development library][libdpkg-perl] and +[utilities][dpkg-dev] of [dpkg][dpkg], the Debian package manager. -[opkg]: https://code.google.com/p/opkg/ [spf-2.0]: http://specs.proteanos.com/spf-2.0/ +[libdpkg-perl]: https://packages.debian.org/sid/libdpkg-perl [dpkg-dev]: https://packages.debian.org/sid/dpkg-dev -[dpkg-dev-git]: https://anonscm.debian.org/gitweb/?p=dpkg/dpkg.git;a=tree;f=scripts +[dpkg]: https://wiki.debian.org/Teams/Dpkg/ Downloading =========== -The current version of opkbuild is [3.0.0-beta7][rel-ann]. +The current version of opkbuild is [4.2.0][rel-ann]. opkbuild can be found on the ProteanOS files site by [HTTP][dl-http] or [FTP][dl-ftp]. @@ -27,7 +27,7 @@ opkbuild can be found on the ProteanOS files site by [HTTP][dl-http] or opkbuild is maintained in a [Git repository][repo-http], which can be cloned from `git://git.proteanos.com/opkbuild/opkbuild.git`. -[rel-ann]: http://lists.proteanos.com/proteanos-dev/2014/10/msg00002.html +[rel-ann]: http://lists.proteanos.com/proteanos-dev/2020/07/msg00000.html [dl-http]: http://files.proteanos.com/pub/opkbuild/ [dl-ftp]: ftp://files.proteanos.com/pub/opkbuild/ [repo-http]: http://git.proteanos.com/opkbuild/opkbuild.git/ diff --git a/dev/opkhelper.mdwn b/dev/opkhelper.mdwn index 70deda7..47bcd49 100644 --- a/dev/opkhelper.mdwn +++ b/dev/opkhelper.mdwn @@ -14,7 +14,7 @@ Debian. Downloading =========== -The current version of opkhelper is [3.0.0][rel-ann]. +The current version of opkhelper is [3.1.3][rel-ann]. opkhelper can be found on the ProteanOS files site by [HTTP][dl-http] or [FTP][dl-ftp]. @@ -22,7 +22,7 @@ opkhelper can be found on the ProteanOS files site by [HTTP][dl-http] or opkhelper is maintained in a [Git repository][repo-http], which can be cloned from `git://git.proteanos.com/opkhelper/opkhelper.git`. -[rel-ann]: http://lists.proteanos.com/proteanos-dev/2014/03/msg00000.html +[rel-ann]: http://lists.proteanos.com/proteanos-dev/2020/07/msg00001.html [dl-http]: http://files.proteanos.com/pub/opkhelper/ [dl-ftp]: ftp://files.proteanos.com/pub/opkhelper/ [repo-http]: http://git.proteanos.com/opkhelper/opkhelper.git/ @@ -43,6 +43,7 @@ Manual Pages in the Distribution Build System manual: * [[**oh-installfiles**(1)|dev/opkhelper/oh-installfiles.1]] + * [[**oh-shlibdeps**(1)|dev/opkhelper/oh-shlibdeps.1]] * [[**oh-strip**(1)|dev/opkhelper/oh-strip.1]] * [[**oh-fixperms**(1)|dev/opkhelper/oh-fixperms.1]] * [[**oh-autoconfigure**(1)|dev/opkhelper/oh-autoconfigure.1]] diff --git a/dev/opkhelper/oh-architecture.1.mdwn b/dev/opkhelper/oh-architecture.1.mdwn index 4ed8163..ee13049 100644 --- a/dev/opkhelper/oh-architecture.1.mdwn +++ b/dev/opkhelper/oh-architecture.1.mdwn @@ -16,7 +16,7 @@ <p style="margin-left:11%; margin-top: 1em">oh-architecture -− 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>−s </b><i>sourcedir</i></p> +<p style="margin-left:11%; margin-top: 1em"><b>-s </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>−S </b><i>buildsystem</i></p> +<p style="margin-left:11%;"><b>-S </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>−B </b><i>builddir</i></p> +<p style="margin-left:11%;"><b>-B </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 -− 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>] -[−− <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>−s </b><i>sourcedir</i></p> +<p style="margin-left:11%; margin-top: 1em"><b>-s </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>−S </b><i>buildsystem</i></p> +<p style="margin-left:11%;"><b>-S </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>−B </b><i>builddir</i></p> +<p style="margin-left:11%;"><b>-B </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>−T </b><i>buildtarget</i></p> +<p style="margin-left:11%;"><b>-T </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 -− Automatically clean up a package’s built -files.</p> +<p style="margin-left:11%; margin-top: 1em">oh-autoclean - +Automatically clean up a package’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>] [−− -<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>−s </b><i>sourcedir</i></p> +<p style="margin-left:11%; margin-top: 1em"><b>-s </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>−S </b><i>buildsystem</i></p> +<p style="margin-left:11%;"><b>-S </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>−B </b><i>builddir</i></p> +<p style="margin-left:11%;"><b>-B </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 -− 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>] -[−− <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>−s </b><i>sourcedir</i></p> +<p style="margin-left:11%; margin-top: 1em"><b>-s </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>−S </b><i>buildsystem</i></p> +<p style="margin-left:11%;"><b>-S </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>−B </b><i>builddir</i></p> +<p style="margin-left:11%;"><b>-B </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>−t </b><i>targetarch</i></p> +<p style="margin-left:11%;"><b>-t </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 -− Automatically install a package’s data -files.</p> +- Automatically install a package’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>] [−− -<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>−s </b><i>sourcedir</i></p> +<p style="margin-left:11%; margin-top: 1em"><b>-s </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>−S </b><i>buildsystem</i></p> +<p style="margin-left:11%;"><b>-S </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>−B </b><i>builddir</i></p> +<p style="margin-left:11%;"><b>-B </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>−d </b><i>destdir</i></p> +<p style="margin-left:11%;"><b>-d </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>−T </b><i>buildtarget</i></p> +<p style="margin-left:11%;"><b>-T </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 -− Automatically run a package’s test suites.</p> +<p style="margin-left:11%; margin-top: 1em">oh-autotest - +Automatically run a package’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>] -[−− <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>−S </b><i>buildsystem</i></p> +<p style="margin-left:11%; margin-top: 1em"><b>-S </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>−B </b><i>builddir</i></p> +<p style="margin-left:11%;"><b>-B </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 -− 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>−d </b><i>dir</i></p> </td> +<p style="margin-top: 1em"><b>-d </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 -− 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’s data directory.</p> <td width="9%"> - -<p style="margin-top: 1em"><b>−d </b><i>dir</i></p> </td> +<p style="margin-top: 1em"><b>-d </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’s "Shlib-Depends" +substitution variable.</p> + +<h2>COPYRIGHT +<a name="COPYRIGHT"></a> +</h2> + + +<p style="margin-left:11%; margin-top: 1em">Copyright (C) +2019 Patrick "P. J." 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 +<http://www.gnu.org/licenses/>.</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 -− 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>−d </b><i>dir</i></p> </td> +<p style="margin-top: 1em"><b>-d </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>−k</b></p></td> +<p><b>-k</b></p></td> <td width="2%"></td> <td width="78%"> diff --git a/dev/prokit.mdwn b/dev/prokit.mdwn index 9d6dc88..3008ffa 100644 --- a/dev/prokit.mdwn +++ b/dev/prokit.mdwn @@ -14,7 +14,7 @@ programs of Debian and derivatives. Downloading =========== -The current version of prokit is [1.1.0][rel-ann]. +The current version of prokit is [2.0.0][rel-ann]. prokit can be found on the ProteanOS files site by [HTTP][dl-http] or [FTP][dl-ftp]. @@ -22,7 +22,7 @@ prokit can be found on the ProteanOS files site by [HTTP][dl-http] or prokit is maintained in a [Git repository][repo-http], which can be cloned from `git://git.proteanos.com/prokit/prokit.git`. -[rel-ann]: http://lists.proteanos.com/proteanos-dev/2014/10/msg00000.html +[rel-ann]: http://lists.proteanos.com/proteanos-dev/2019/04/msg00004.html [dl-http]: http://files.proteanos.com/pub/prokit/ [dl-ftp]: ftp://files.proteanos.com/pub/prokit/ [repo-http]: http://git.proteanos.com/prokit/prokit.git/ @@ -49,3 +49,5 @@ Pages in the ProteanOS Development Kit Manual: * [[**prokit-shell**(8)|dev/prokit/prokit-shell.8]] * [[**prokit-opkg**(8)|dev/prokit/prokit-opkg.8]] * [[**prokit-build**(8)|dev/prokit/prokit-build.8]] + * [[**prokit-installer-pc**(8)|dev/prokit/prokit-installer-pc.8]] + * [[**prokit-mkinitramfs**(8)|dev/prokit/prokit-mkinitramfs.8]] diff --git a/dev/prokit/prokit-build.8.mdwn b/dev/prokit/prokit-build.8.mdwn index fefa5fc..e7ad25f 100644 --- a/dev/prokit/prokit-build.8.mdwn +++ b/dev/prokit/prokit-build.8.mdwn @@ -1,4 +1,4 @@ -[[!meta title="prokit-build"]] +[[!meta title="PROKIT-BUILD"]] <a href="#NAME">NAME</a><br> <a href="#SYNOPSIS">SYNOPSIS</a><br> @@ -13,8 +13,8 @@ </h2> -<p style="margin-left:11%; margin-top: 1em">prokit-build -− 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 "P. J." 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 -− 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 "P. J." 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 -− 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>−a </b><i>arch</i></p> +<p style="margin-left:11%; margin-top: 1em"><b>-a </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>−p </b><i>plat</i></p> +<p style="margin-left:11%;"><b>-p </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>−m </b><i>mirror</i></p> +<p style="margin-left:11%;"><b>-m </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>−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 "P. J." 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 </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 </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 </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">•</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 +<http://www.gnu.org/licenses/>.</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’s file system.</p> + +<h2>OPTIONS +<a name="OPTIONS"></a> +</h2> + + + +<p style="margin-left:11%; margin-top: 1em"><b>-l </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 </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">•</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 +<http://www.gnu.org/licenses/>.</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 -− 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 "P. J." 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 -− 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 ’opkg install build-essential-$(cat /etc/proteanos_arch)’</p></td></tr> +<tr valign="top" align="left"> +<td width="11%"></td> +<td width="1%"> + + +<p>•</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)’</p></td></tr> <p style="margin-left:11%; margin-top: 1em">Copyright (C) -2014 Patrick "P. J." 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 -− 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 "P. J." 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 − +<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>−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>−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 "P. J." McDermott</p> +2014 Patrick McDermott</p> <p style="margin-left:11%; margin-top: 1em">The ProteanOS Development Kit is free software: you can redistribute it diff --git a/dev/releases/1/packages.mdwn b/dev/releases/1/packages.mdwn index b4992a7..02f6810 100644 --- a/dev/releases/1/packages.mdwn +++ b/dev/releases/1/packages.mdwn @@ -9,9 +9,10 @@ packages: alsa-lib 1.0.27.2-1 alsa-utils 1.0.27.2-1 base-files 1.0.3 - bc 1.06.95-1 - binutils 2.23.2-1 - build-essential 1.1 + bc 1.07.1-1 + binutils 2.32+sip1-1 + bison 3.4.1-1 + build-essential 1.2 busybox 1.21.1-13 bzip2 1.0.6-3 cmake 3.0.2-1 @@ -22,29 +23,31 @@ packages: config-tp-gm45-flash-8mib 1.1 config-x60 1.3 curl 7.38.0-1 - dejagnu 1.5.1-1 + dejagnu 1.6.2-1 dev86 0.16.21-1 - dropbear 2014.65-1 + dropbear 2019.78-1 eglibc 2.19~r25243+sip1-3 - expat 2.1.0-2 - expect 5.45-1 - fakeroot 1.18.4-1 + expat 2.2.7-1 + expect 5.45.4-1 + fakeroot 1.23-2 fbida 2.09-2 - file 5.17-3 - flashrom 0.9.8~r1896-1 + file 5.37-3 + flashrom 1.1~rc1-1 + flex 2.6.4-1 fontconfig 2.11.1-1 freetype 2.5.3-1 fss 1.0 - gawk 4.1.0-1 - gcc-4.7 4.7.3+sip1-1 - gcc-defaults 1.0 + gawk 5.0.0-1 + gcc-8 8.3.0+sip1-1 + gcc-defaults 1.1 + gdb 8.3+sip1-1 gettext 0.18.3.2-1 - gmake 4.0-2 - gmp 5.0.5-1 + gettext-tiny 0.3.1 + gmake 4.2.1-1 + gmp 6.1.2-1 gnupg 2.2.15-1 gpgme 1.13.0-2 - ich9deblob 20150518fix~git20150628.0e3520f-1 - iptables 1.4.21-2 + ich9deblob 20160907-1 libarchive 3.1.2-1 libassuan 2.5.1-2 libexif 0.6.21-1 @@ -56,48 +59,53 @@ packages: libnl-3 3.2.25-1 libogg 1.3.2-1 libpng12 1.2.51-2 - libsigsegv 2.10-1 - libtomcrypt 1.17-1 + libsigsegv 2.12-1 + libtomcrypt 1.18.2-1 libtommath 0.42.0-1 + libtommath.1 1.1.0-1 libtool 2.4.2-2 libubox 0+git20190227.eeef7b5-1 - libunistring 0.9.3-1 + libunistring 0.9.10-1 libvorbis 1.3.4-1 lilo 24.2-1 linux-libre 3.10.60~gnu-1 - m4 1.4.17-2 - mpc 1.0.1-1 - mpfr 3.1.1-1 + m4 1.4.18-1 + mpc 1.1.0-1 + mpfr 4.0.2-1 mplus-fonts 058-2 - ncurses 5.9~20140301-2 + ncurses 6.1+20190706-1 npth 1.6-1 + nss-certdata 3.54-2 open-ath9k-htc-firmware 1.4~git20141115.146bff1-1 - opkbuild 4.0.2-1 - opkg-lede 0+git20190131.d4ba162-5 + opkbuild 4.2.0-1 opkg 0.2.4-3 - opkhelper-3.0 3.1.2-2 + opkg-lede 0+git20190131.d4ba162-6 + opkhelper-3.0 3.1.3-1 opkhelper-default 3.0.0 - patch 2.7.1-2 - pciids 2015.09.03-2 - pciutils 3.3.1-2 + patch 2.7.6-1 + pciids 2019.06.17-1 + pciutils 3.6.2-1 pcre 8.35-1 pkgconf 0.9.6-1 - platconf-pkg-tools 2.1.1 + platconf-pkg-tools 3.0.0 popt 1.16+sip1-1 + proquivs 1.0 proteanos-branding 0.3 pth 2.0.7-1 readline 6.3-1 + readline.8 8.0-1 strace 4.8-1 - tcl8.6 8.6.1+sip1-1 - tzcode 2014e-1 - tzdata 2014e-1 + tcl8.6 8.6.9+sip1-2 + tzdb 2019a-1 usign 0+git20161022.3e6648b-1 + wolfssl.24 4.4.0-3 + wolfutil 1.0.0-2 wpa-supplicant 2.2-2 - xz 5.1.3alpha-2 - zlib 1.2.8+sip1-1 + xz 5.2.4-1 + zlib 1.2.11+sip1-1 ------------------------------------------------------------ - Source packages: 90 - Binary packages: 354 + Source packages: 98 + Binary packages: 395 The above list was generated by running the following shell script: @@ -107,9 +115,6 @@ The above list was generated by running the following shell script: verw=33 base_url='http://files.proteanos.com/pub/proteanos/feeds/dev/trunk' - LF=' - ' - # Print header i=0 l=$(($pkgw + $verw + 2)) @@ -134,17 +139,18 @@ The above list was generated by running the following shell script: ;; esac done <<EOF - $(wget -q -O - "${base_url}/src/all/base/Packages") + $(wget -q -O - "${base_url}/src/all/base/Packages" \ + "${base_url}/src/all/src/Packages") EOF # Collect binary package names bins='' - for aps in $(wget -q -O - "${base_url}/Manifest" | grep -Fv 'src/all/base'); do - bins="${bins}${LF}$(wget -q -O - "${base_url}/${aps}/Packages" | \ + for aps in $(wget -q -O - "${base_url}/Manifest" | grep -Fv 'src/all/'); do + bins="${bins} $(wget -q -O - "${base_url}/${aps}/Packages" | \ sed -n 's/^Package: //p;')" done # Print totals printf '%s\n' "${tblline}" printf 'Source packages: %d\n' "${srcs}" - printf 'Binary packages: %d\n' "$(printf '%s\n' "${bins}" | sort -u | wc -l)" + printf 'Binary packages: %d\n' "$(printf '%s\n' ${bins} | sort -u | wc -l)" diff --git a/dev/todo/install-bb-without-bb.mdwn b/dev/todo/install-bb-without-bb.mdwn new file mode 100644 index 0000000..4bb90ff --- /dev/null +++ b/dev/todo/install-bb-without-bb.mdwn @@ -0,0 +1,86 @@ +[[!meta title="Installing BusyBox Without BusyBox"]] + +**or, Adventures in Regressions and Crazy Ideas** + +--- + +**This work is now done.** + +**The rest of this page is kept only for reference and historical purposes.** + +--- + +Two Problems +============ + +`opkg-lede` and the Outsourced Inflation +---------------------------------------- + +`opkg-lede` [now relies][opkg-lede-dd4c78a] on an external `gzip` executable. +When upgrading a package, it tries to execute `gzip` to unpack maintainer +scripts and data files [after removing][opkg_install_pkg] the old version of the +package. When the package being upgraded is `busybox`, which provides `gzip`, +`opkg` crashes and leaves behind a completely broken system. + +To reiterate, `opkg-lede` is (and has been for as long as it has been in +ProteanOS) **currently unable to upgrade `busybox`**, due to its own design. + +[opkg-lede-dd4c78a]: https://git.openwrt.org/?p=project/opkg-lede.git;a=commitdiff;h=dd4c78aa88efd3b9cf516030937c684814df7962 +[opkg_install_pkg]: https://git.openwrt.org/?p=project/opkg-lede.git;a=blob;f=libopkg/opkg_install.c;hb=d4ba162#l1520 + +The Amazing Alternatives of `busybox` +------------------------------------- + +Instead of [adding alternatives][alts-log] one at a time, [it would be +nice][bb-ua] to manage all of `busybox`'s utility links using +`update-alternatives`. Unfortunately, the [maintainer script][bb.pi] that runs +`update-alternatives` (as well as the [`update-alternatives` script][u-a] +itself) needs a few `busybox` utilities (`/bin/sh` for a start). Thus, after an +older version of `busybox` is deconfigured, a newer version can't be configured. +`busybox` also can't be configured when first unpacked by `prokit`. + +[alts-log]: http://git.proteanos.com/pkg/busybox.git/log/alternatives +[bb-ua]: http://git.proteanos.com/pkg/busybox.git/commit/?id=1558d05c62ed90f7d93a14533541c33896b7b733 +[bb.pi]: http://git.proteanos.com/pkg/busybox.git/tree/busybox.pkg/postinst +[u-a]: https://git.openwrt.org/?p=project/opkg-lede.git;a=blob;f=utils/update-alternatives.in;hb=d4ba162 + +One Solution +============ + +The next version of `src:opkg-lede` (likely 0+git20190131.d4ba162-7) already +will have a [wrapper script called `opkg`][opkg] that executes `opkg-cl` (the +actual binary executable). The script can be extended to first save a copy of +`/bin/busybox` to an empty temporary directory, generate utility links to it in +the directory, and add the directory to `PATH`. Until all of this setup is +complete, the wrapper script must be careful to execute utilities as `busybox +$util` (a full path to `busybox` won't be necessary, as the usual `/bin/busybox` +will be available at that point). This includes the interpreter line, which +will need to be changed to `#!/bin/busybox sh`. `ash` built-in utilities can be +used as usual. + +The `busybox` package can't use `update-alternatives` to manage all of its +utility links until an `opkg-lede` with this wrapper script functionality is +uploaded. This is because, even if `busybox`'s `postinst` script is modified to +use the `busybox` executable directly, other packages' maintainer scripts may be +executed first, while `busybox` is unpacked but not yet configured (and +therefore utility links are not yet created). + +Once this new `opkg-lede` package is uploaded and `busybox` uses +`update-alternatives` for everything, `busybox` would need to declare that it +`Breaks` older versions of `opkg-lede`, to ensure that `opkg-lede` will preserve +a copy of the `busybox` executable and its utility links. However, this is +still insufficient, as the version of `opkg` that is *running* must have already +set up this environment before `busybox` is upgraded. `busybox`'s `prerm` +script will need to check for this somehow and abort the upgrade if `opkg` is +too old to have prepared for a safe upgrade. One solution is for the `opkg` +script to set an `OPKG_BUSYBOX_SAVED` environment variable. + +The `opkg` script of the `opkg-lede` package will need to read `busybox`'s list +of alternatives links. This is currently located at +`/usr/share/busybox/alternatives`. [The file's format][alts] will change when +`busybox` uses `update-alternatives` for everything: the last two columns (name +and priority) will be dropped. `opkg` however can simply read the first column, +so it will maintain compatibility. + +[opkg]: http://git.proteanos.com/pkg/opkg-lede.git/tree/opkg +[alts]: http://git.proteanos.com/pkg/busybox.git/tree/alternatives?id=e37f03311d934a8f33a9ff31db47b18bbf0be555 diff --git a/dev/wolfutil.mdwn b/dev/wolfutil.mdwn new file mode 100644 index 0000000..1fba2fe --- /dev/null +++ b/dev/wolfutil.mdwn @@ -0,0 +1,48 @@ +[[!meta title="Unofficial wolfSSL Utility"]] + +wolfutil is a command-line tool for the wolfSSL embedded (SSL/)TLS +library. It is similar to the OpenSSL command-line tool, providing only +a limited `s_client` TLS client command. The primary goal is to provide +enough functionality for use by BusyBox's wget applet. + +wolfutil's `s_client` command is designed to be stronger by default than +OpenSSL's, as the latter is only meant to be a "diagnostic tool". That +is, the following command: + + $ wolfutil s_client -quiet -connect ${host}:${port} \ + > -servername ${servername} + +is roughly equivalent to the more complicated: + + $ openssl s_client -quiet -connect ${host}:${port} \ + > -servername ${servername} -verify 9 -verify_return_error \ + > -no_ssl3 -no_tls1 -no_tls1_1 + +This utility is in no way authored by or affiliated with wolfSSL Inc. or +its contributors. + + +Downloading +=========== + +The current version of wolfutil is [1.0.0][rel-ann]. + +wolfutil can be found on the ProteanOS files site by [HTTP][dl-http] or +[FTP][dl-ftp]. + +wolfutil is maintained in a [Git repository][repo-http], which can be cloned +from `git://git.proteanos.com/wolfutil/wolfutil.git`. + +[rel-ann]: http://lists.proteanos.com/proteanos-dev/2020/08/msg00000.html +[dl-http]: http://files.proteanos.com/pub/wolfutil/ +[dl-ftp]: ftp://files.proteanos.com/pub/wolfutil/ +[repo-http]: http://git.proteanos.com/wolfutil/wolfutil.git/ + + +Mailing List +============ + +Bug reports, feature requests, and patches for wolfutil are welcome on the +[ProteanOS development mailing list][proteanos-dev]. + +[proteanos-dev]: http://lists.proteanos.com/proteanos-dev/ |