diff options
35 files changed, 1042 insertions, 307 deletions
@@ -18,26 +18,21 @@ programs and libraries to be built and installed on users' systems. Source packages have a documented [format][spf-2.0], and [[tutorials_on_packaging|doc/pkg]] are available. -There is always [[more_software_to_be_packaged|dev/pkg/needed]], and -[[one_package|dev/pkg/spf-2.0]] needs to be updated to the latest package -format. [15 packages][src_pkgs_spring2015] prepared by a team of students in -the spring 2015 NJIT CCS Capstone program need to be reviewed for uploading to -the package archive. +There is always [[more_software_to_be_packaged|dev/pkg/needed]] (including Perl +5 with cross building support), and [[one_package|dev/pkg/spf-2.0]] needs to be +updated to the latest package format. [15 packages][src_pkgs_spring2015] +prepared by a team of students in the spring 2015 NJIT CCS Capstone program need +to be reviewed for uploading to the package archive. But the work doesn't end after a package is prepared and uploaded; maintaining existing packages is also important and neverending work. ProteanOS currently -has [[81_source_packages_(403_binary_packages)|dev/releases/1/packages]] in its +has [[94_source_packages_(388_binary_packages)|dev/releases/1/packages]] in its package archive (with more not yet uploaded). Many of these have newer upstream versions and can be updated. Some have patches that can be dropped when updating to a newer upstream version. Some others (e.g. the toolchain packages) have patches that may be of interest outside ProteanOS but have not yet been submitted upstream. -Some packages have development problems that will eventually need to be solved, -such as [[cross_building_Perl_5|dev/pkg/needed]], -[[multiple_tasks|dev/pkg/opkg]] in the `opkg` packaging, and adding support in -opkg for installing packages built for foreign architectures. - Most source packages are maintained in [Git repositories][git-pkg]. You can request a repository for your package on the [mailing list][proteanos-dev]. To make changes to a package, it is recommended that you send patches to the diff --git a/dev/archive/mirroring.mdwn b/dev/archive/mirroring.mdwn index 9d2b38a..deabb91 100644 --- a/dev/archive/mirroring.mdwn +++ b/dev/archive/mirroring.mdwn @@ -1,53 +1,117 @@ [[!meta title="Mirroring the ProteanOS Package Archive"]] -Running a mirror of the ProteanOS package archive contributes to the +Running a public mirror of the ProteanOS package archive contributes to the availability of ProteanOS. -You can keep your mirror private or make it an official mirror. +Organizations deploying many ProteanOS systems are encouraged to make local +mirrors, which they may keep private or make public, to save bandwidth on both +their and ProteanOS's infrastructure. Setting up a Mirror =================== -A mirror takes about 700 MiB of storage space as of this writing and should be +Overview +-------- + +*(Impatient mirror administrators may skip this informational section and read +the instructional sections below.)* + +A mirror takes about 730 MiB of storage space as of this writing and should be expected to grow beyond that. -The following command will list files in the archive: +The curious may view a list of files in the archive with the following command: $ rsync --recursive --exclude .db rsync://files.proteanos.com/proteanos -The following command will mirror the archive: - - $ rsync --recursive --times --delete --exclude .db \ - > rsync://files.proteanos.com/proteanos /path/to/your/mirror/directory/ +See below for commands to copy archive files to a local mirror. -Packages are moved from incoming into the archive four times daily. The +Packages are processed from the incoming queue into the archive four times +daily, so mirrors need not be updated more frequently than that. The [[archive_management_software|dev/pro-archman]] is [configured][arch-conf] to keep unreferenced files in the pool for one day, so mirrors must be updated at least once a day. Otherwise, during the update, some feed index files may -reference deleted files. +reference deleted files. Updating at least twice daily is recommended, in case +the synchronization source is ever temporarily unreachable. + +Serving the archive mirror at `/pub/proteanos` over HTTP and FTP is recommended, +but any path and either protocol may be used. HTTP Strict Transport Security +(HSTS) must not be used except on private mirrors used by ProteanOS systems +known to install the `wolfssl-util` package. The ProteanOS package archive is +already [cryptographically verified][archive-signing] using software smaller +than a TLS implementation. + +Mirrors are classified by their synchronization source as either "primary" or +"secondary" as described below. This design distributes synchronization +bandwidth usage more efficiently across the mirror network. Secondary mirrors +will typically update a few hours after primary mirrors do, but are otherwise +still "first-class citizens". All mirrors regardless of classification are +treated equally by [[dev/prokit]], the installer utility that selects a mirror. + +Please configure private mirrors as secondary mirrors, so as to reserve +ProteanOS project bandwidth for those that contribute bandwidth back to the +project. [arch-conf]: http://files.proteanos.com/pub/proteanos/conf +[archive-signing]:http://lists.proteanos.com/proteanos-dev/2019/04/msg00008.html + +Primary Public Mirror +--------------------- + +Primary mirrors are those that synchronize directly from +<files.proteanos.com> and must serve their contents publicly over HTTP +(without HSTS) and rsync and may also serve over anonymous FTP as defined by +[IETF RFC 1635][rfc1635] with no password requirements. + +Run the following command one to four times (four times preferred) daily to +synchronize your mirror: + + $ rsync --recursive --times --delete --exclude .db \ + > rsync://files.proteanos.com/proteanos /path/to/your/mirror/directory/ + +Secondary Public or Private Mirror +---------------------------------- +Secondary mirrors are those that synchronize from a primary mirror and serve +their contents either publicly or privately. Public mirrors must serve over +HTTP (without HSTS) and may also serve over anonymous FTP as defined by [IETF +RFC 1635][rfc1635] with no password requirements. Private mirrors may serve +over either protocol. -Making an Official Mirror -========================= +Run the following command one to four times (four times preferred) daily to +synchronize your mirror: + + $ rsync --recursive --times --delete --exclude .db \ + > ${src} /path/to/your/mirror/directory/ -Official mirror sites should make their archive mirrors available at -`/pub/proteanos` over HTTP and FTP. Sites should also make their archive -mirrors accessible over rsync, if possible. +Where `${src}` is any primary mirror in the [rsync mirrors list][mirrors-rsync]. +Please try to select a primary mirror that is being used by few or no other +secondary mirrors, to evenly spread the load across the primary mirrors. -Once your mirror is set up, please announce it to the [ProteanOS development -mailing list][proteanos-dev] ([list info][proteanos-dev-info]). Please include -the following information in your announcement: +[rfc1635]: https://tools.ietf.org/html/rfc1635 + + +Announcing a Public Mirror +========================== + +After setting up a public mirror, please announce it to the [ProteanOS +development mailing list][proteanos-dev] ([list info][proteanos-dev-info]). +Please include the following information in your announcement: * Name and e-mail address of site maintainer; * Name and URL of site sponsor, if any; - * Domain name, or IPv4 and/or IPv6 address, of mirror site; - * Available protocols; - * Country of site; - * Frequency of mirroring; and + * URIs of mirror site (HTTP and/or FTP, and rsync for primary mirrors); + * Location (country at a minimum) of site; + * Synchronization frequency (or times); + * Synchronization source, in the case of a secondary mirror; and * Any other comments about the site. +Your mirror will be reviewed and added to the official mirror lists +([HTTP][mirrors-http] and [FTP][mirrors-ftp] used by [[dev/prokit]], as well as +[rsync][mirrors-rsync] referenced above). + [proteanos-dev]: mailto:proteanos-dev@lists.proteanos.com [proteanos-dev-info]: http://lists.proteanos.com/proteanos-dev/ +[mirrors-http]: http://files.proteanos.com/pub/proteanos-mirrors-http +[mirrors-ftp]: http://files.proteanos.com/pub/proteanos-mirrors-ftp +[mirrors-rsync]: http://files.proteanos.com/pub/proteanos-mirrors-rsync diff --git a/dev/multiarch.mdwn b/dev/multiarch.mdwn new file mode 100644 index 0000000..d869a7d --- /dev/null +++ b/dev/multiarch.mdwn @@ -0,0 +1,180 @@ +[[!meta title="Multiarch Design"]] + +Earlier design proposals are documented in [[another_page|dev/multiarch/design]] +kept for historical purposes. + + +Background +========== + +ProteanOS is a self-hosting binary distribution that builds its own packages. +It is also an embedded distribution, intended to be suitable for small +resource-limited systems. It may not be practical to natively build all of +ProteanOS on real hardware for every architecture to be supported. Thus, it +will be preferable to cross-build all of ProteanOS's packages, making ProteanOS +a highly ambitious cross-built self-hosting binary distribution. + +Cross-compiling and cross-assembling self-contained code is a solved problem, +however programs typically use separately built libraries, which must be +installed at build time to be available for compiling and linking. Sometimes, +these dependency libraries will already be installed for use by the native +system. So it needs to be possible to "coinstall" different architecture builds +of each library. Package management and build tools also need to be able to +install dependency packages of the correct architecture; for example, libraries +must be of the *host* architecture (the architecture **for** which a package is +being built), but build utilities must be of the *build* architecture (the +architecture **on** which a package is being built). Further complicating +dependency resolution, such build utilities often themselves depend on +libraries, which must also be of the build architecture (not the host +architecture like libraries that are direct build-dependencies). These are the +two main problems in cross-building distribution packages: coinstallability and +dependencies. The solution is a design known as "multiarch". + +ProteanOS's multiarch design is inspired by, but different from, that +[specified][wuc-mas] and [documented][wdo-ma] in Debian and Ubuntu. + +ProteanOS's design solves the coinstallability and dependency problems without +*any* modifications to its package manager, opkg-lede. This is desirable +because opkg-lede is a tool used by many distributions separate from ProteanOS, +and its upstream maintainers (OpenWrt) would likely be unwilling to merge and +maintain invasive patches specific to a different distribution (making the +patches impossible to test upstream). + +[wdo-ma]: http://wiki.debian.org/Multiarch +[wuc-mas]: https://wiki.ubuntu.com/MultiarchSpec + + +Design +====== + +Coinstallability +---------------- + +opkg-lede doesn't allow multiple packages to provide the same file path, so, in +order to be coinstallable, library packages must install all of their files into +architecture-qualified locations. [Debian and Ubuntu][wuc-mas-arch-indep-files] +limit this requirement to only files whose contents differ between +architectures. This is accomplished by the package manager dpkg requiring all +packages of the same name to be the same version, verifying that shared files +have identical contents, and reference counting shared files. As explained +above, ProteanOS's multiarch design doesn't entail such modifications to the +package manager. + +opkg-lede also doesn't allow installation of multiple packages with the same +name and different architectures. The only way to solve this without modifying +the package manager is to qualify the names of coinstallable packages with +their host architectures. This will be done by appending a colon followed by +the host architecture to each coinstallable package name, e.g. `libc.6` becomes +`libc.6:amd64-linux-glibc`. Package names appear in the file system under +`/var/cache/opkg/archives/` and `/var/lib/opkg/info/`, so using a colon in +package names will prevent the use of restricted file systems such as FAT file +systems as the root file system. + +Dependencies +------------ + +opkg-lede allows packages from different architectures to be installed, but +there is no way to select the architecture to install other than blanket +priority values. Since libraries of different architectures will often need to +be installed during the same installation transaction, as described above, such +a blunt solution is insufficient. + +[Debian and Ubuntu][wuc-mas-control-fields] solve this by declaring the kinds of +dependencies each package is able to satisfy (based on the interfaces it +provides: executables and/or libraries). Again this requires modifications to +the package manager to affect dependency resolution. ProteanOS's design is +similar, but implemented in a way such that *dependent* binary packages are +responsible for declaring the architectures of *their dependencies* (which can +be done automatically at build time, so package maintainers can focus on +declaring how their packages satisfy dependencies, as in Debian and Ubuntu). + +One way to declare dependency semantics is by introducing a new single-purpose +control field like Debian's and Ubuntu's `Multi-Arch`. However, ProteanOS will +instead use [a control field that serves multiple purposes: +`Section`][spf-fields-bin]. `Section: lib` packages will be automatically made +coinstallable by opkbuild, by architecture-qualifying their names as described +above. Library dependencies generated by oh-shlibdeps (with [a +fix][oh-shlibdeps-host-libdirs] to be released) will automatically use the +architecture-qualified names. + +ProteanOS systems should have only native architecture feeds for sections +`boot`, `dev`, and `util` but may have multiple feeds for sections `dbg`, `lib`, +and `libdev`. (Sections `doc`, `locale`, and `share` are +architecture-independent.) + +opkg-lede's architecture priorities as described above can be useful in certain +specific ways, through a [wrapper script that adds an `-a`/`--host-architecture` +option][opkg-wrapper] (similar to that of apt-get). First, since multiple +`Section: dbg` feeds may be downloaded and requiring users to +architecture-qualify such packages would be undesirable, such packages could be +installed instead via `opkg -a amd64-linux-glibc foo-dbg` or even simply `opkg +install foo-dbg` for the native architecture. Similarly, `Section: libdev` +packages as build dependencies could be automatically installed for the host +architecture by prokit supplying an appropriate `-a` option, allowing +maintainers to continue listing unqualified package names in `Build-Depends` +instead of having to add `:${Host-Arch}` to every `Section: libdev` package in +`Build-Depends`. Therefore, only `Section: lib` packages need to have +architecture-qualified names (due to the coinstallability issue described +above), and neither users nor maintainers are expected to manually install or +list as dependencies such architecture-qualified packages. + +[wuc-mas-arch-indep-files]: https://wiki.ubuntu.com/MultiarchSpec#Architecture-independent_files_in_multiarch_packages +[wuc-mas-control-fields]: https://wiki.ubuntu.com/MultiarchSpec#Binary_package_control_fields +[spf-fields-bin]: http://specs.proteanos.com/spf-2.0/fields.html#fields-bin +[oh-shlibdeps-host-libdirs]: http://git.proteanos.com/opkhelper/opkhelper.git/commit/?id=c214c727f60b070aa502b20dcc1ad7e3ce8579f2 +[opkg-wrapper]: http://git.proteanos.com/pkg/opkg-lede.git/tree/opkg + + +Use Cases +========= + +**Run-time dependency on a utility:** Only the native architecture of the +utility dependency is available in the downloaded feed lists, and the dependency +is not architecture-qualified. The native architecture will be installed. + +**Run-time dependency on a library:** Multiple architectures of the library +dependency may be available, and the dependency must be qualified with the +native architecture. + +**Run-time dependency on a language extension:** Despite technically being a +shared object file, only the native architecture of the language extension +dependency is available in the downloaded feed lists, and the dependency is not +architecture-qualified. The language extension dependency in turn depends on a +language interpreter, which is also not architecture-qualified. The native +architecture of both will be installed. + +**Build-time dependency on a utility:** Only the build architecture of the +utility dependency is available in the downloaded feed lists, and the dependency +is not architecture-qualified. The build architecture will be installed. + +**Build-time dependency on a library:** Multiple architectures of the library +dependency are available, and the dependency must be qualified with the host +architecture. + +**Build-time dependency on a language extension:** Despite technically being a +shared object file, only the native architecture of the language extension +dependency is available in the downloaded feed lists, and the dependency is not +architecture-qualified. The language extension dependency in turn depends on a +language interpreter, which is also not architecture-qualified. The native +architecture of both will be installed. + + +Implementation +============== + +File System Hierarchy +--------------------- + +As explained above, to be coninstallable, library packages must install all of +their files in architecture-qualified locations. Debian and Ubuntu install +shared object files in `/usr/lib/<triplet>` or `/lib/<triplet>`, where +`<triplet>` is a [GNU system type][ac-systemtype]. Since multiple ProteanOS +architectures may share the same GNU system type, ProteanOS architecture names +are instead used in such library directories. + +ProteanOS's GNU Binutils and GCC packages have been patched and configured to +use multiarch library paths since their initial releases in 2014. opkhelper has +used multiarch library paths when configuring packages since version 3.0.0-beta1 +released in 2012. + +[ac-systemtype]: https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/System-Type.html diff --git a/dev/opkbuild.mdwn b/dev/opkbuild.mdwn index b055f80..9e45e00 100644 --- a/dev/opkbuild.mdwn +++ b/dev/opkbuild.mdwn @@ -2,24 +2,24 @@ opkbuild is a distribution build system – a set of tools for building software packages. From source packages it builds binary packages for -use with the [opkg package manager][opkg]. +use with the opkg package manager. Currently one format of source package is supported by opkbuild: ProteanOS [Source Package Format 2.0][spf-2.0]. -opkbuild is similar in function to the [development library and utilities -of dpkg][dpkg-dev] ([sources][dpkg-dev-git]), the Debian package manager. +opkbuild is similar in function to the [development library][libdpkg-perl] and +[utilities][dpkg-dev] of [dpkg][dpkg], the Debian package manager. -[opkg]: https://code.google.com/p/opkg/ [spf-2.0]: http://specs.proteanos.com/spf-2.0/ +[libdpkg-perl]: https://packages.debian.org/sid/libdpkg-perl [dpkg-dev]: https://packages.debian.org/sid/dpkg-dev -[dpkg-dev-git]: https://anonscm.debian.org/gitweb/?p=dpkg/dpkg.git;a=tree;f=scripts +[dpkg]: https://wiki.debian.org/Teams/Dpkg/ Downloading =========== -The current version of opkbuild is [3.0.0-beta7][rel-ann]. +The current version of opkbuild is [4.2.0][rel-ann]. opkbuild can be found on the ProteanOS files site by [HTTP][dl-http] or [FTP][dl-ftp]. @@ -27,7 +27,7 @@ opkbuild can be found on the ProteanOS files site by [HTTP][dl-http] or opkbuild is maintained in a [Git repository][repo-http], which can be cloned from `git://git.proteanos.com/opkbuild/opkbuild.git`. -[rel-ann]: http://lists.proteanos.com/proteanos-dev/2014/10/msg00002.html +[rel-ann]: http://lists.proteanos.com/proteanos-dev/2020/07/msg00000.html [dl-http]: http://files.proteanos.com/pub/opkbuild/ [dl-ftp]: ftp://files.proteanos.com/pub/opkbuild/ [repo-http]: http://git.proteanos.com/opkbuild/opkbuild.git/ diff --git a/dev/opkhelper.mdwn b/dev/opkhelper.mdwn index 70deda7..47bcd49 100644 --- a/dev/opkhelper.mdwn +++ b/dev/opkhelper.mdwn @@ -14,7 +14,7 @@ Debian. Downloading =========== -The current version of opkhelper is [3.0.0][rel-ann]. +The current version of opkhelper is [3.1.3][rel-ann]. opkhelper can be found on the ProteanOS files site by [HTTP][dl-http] or [FTP][dl-ftp]. @@ -22,7 +22,7 @@ opkhelper can be found on the ProteanOS files site by [HTTP][dl-http] or opkhelper is maintained in a [Git repository][repo-http], which can be cloned from `git://git.proteanos.com/opkhelper/opkhelper.git`. -[rel-ann]: http://lists.proteanos.com/proteanos-dev/2014/03/msg00000.html +[rel-ann]: http://lists.proteanos.com/proteanos-dev/2020/07/msg00001.html [dl-http]: http://files.proteanos.com/pub/opkhelper/ [dl-ftp]: ftp://files.proteanos.com/pub/opkhelper/ [repo-http]: http://git.proteanos.com/opkhelper/opkhelper.git/ @@ -43,6 +43,7 @@ Manual Pages in the Distribution Build System manual: * [[**oh-installfiles**(1)|dev/opkhelper/oh-installfiles.1]] + * [[**oh-shlibdeps**(1)|dev/opkhelper/oh-shlibdeps.1]] * [[**oh-strip**(1)|dev/opkhelper/oh-strip.1]] * [[**oh-fixperms**(1)|dev/opkhelper/oh-fixperms.1]] * [[**oh-autoconfigure**(1)|dev/opkhelper/oh-autoconfigure.1]] diff --git a/dev/opkhelper/oh-architecture.1.mdwn b/dev/opkhelper/oh-architecture.1.mdwn index 4ed8163..ee13049 100644 --- a/dev/opkhelper/oh-architecture.1.mdwn +++ b/dev/opkhelper/oh-architecture.1.mdwn @@ -16,7 +16,7 @@ <p style="margin-left:11%; margin-top: 1em">oh-architecture -− 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/ 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 © 2011–2017 + Copyright © 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> |