132 lines
4.3 KiB
Markdown
132 lines
4.3 KiB
Markdown
|
The Devuan SDK more in-depth
|
||
|
============================
|
||
|
|
||
|
The following parts will explain the Devuan SDK more technically. It
|
||
|
will show its configuration, important functions, and show how it all
|
||
|
glues together.
|
||
|
|
||
|
|
||
|
Configuration
|
||
|
-------------
|
||
|
|
||
|
Much of the _libdevuansdk_ configuration is done in
|
||
|
`libdevuansdk/config`. Here you can edit the defaults if you wish to
|
||
|
do something your needs are expressing. However, overriding these
|
||
|
through upper levels is recommended.
|
||
|
|
||
|
|
||
|
### `config` file
|
||
|
|
||
|
`vars` and `arrs` are global arrays for holding other global variables
|
||
|
and arrays, respectively. This is required for `zuper` and helps a lot
|
||
|
with debugging. If you declare new variables or arrays, add them to the
|
||
|
aforementioned variables.
|
||
|
|
||
|
|
||
|
* `os` holds the name of the distribution being worked on.
|
||
|
|
||
|
* `release` holds the release codename of the distribution. Used for apt
|
||
|
repositories mostly.
|
||
|
|
||
|
* `version` is the version of the distribution being worked on.
|
||
|
|
||
|
* `mirror` is a mirror holding the required packages for `debootstrap`.
|
||
|
|
||
|
* `section` are the sections of the repository. For adding in
|
||
|
`/etc/apt/sources.list`. Separate them with whitespaces.
|
||
|
|
||
|
* `image_name` is the output name of the raw image. If you declare a
|
||
|
blend or a device name (arm-sdk), they will be appended to this name.
|
||
|
|
||
|
* `rootcredentials` and `usercredentials` are currently placeholders.
|
||
|
|
||
|
* `core_packages` is an array holding the core packages that will be
|
||
|
installed in the bootstrap process.
|
||
|
|
||
|
* `base_packages` is an array holding the base packages that will be
|
||
|
installed at a later point in the bootstrap process.
|
||
|
|
||
|
* `purge_packages` is an array of packages that will get purged at the
|
||
|
end of the bootstrap process.
|
||
|
|
||
|
|
||
|
Helper functions
|
||
|
----------------
|
||
|
|
||
|
You can find useful helper functions in `libdevuansdk/zlibs/helpers`.
|
||
|
They are intended to help when it comes to writing wrappers, as well
|
||
|
as making the developers' jobs easier for developing
|
||
|
_libdevuansdk_. Some of these functions are required for
|
||
|
_libdevuansdk_ to work properly as well.
|
||
|
|
||
|
|
||
|
### `build_image_dist()`
|
||
|
|
||
|
This function is a kind of a wrapper function. It's used in _arm-sdk_
|
||
|
to build a complete dd-able image from start to end. To run, it
|
||
|
requires `$arch`, `$size`, `$parted_type`, `$workdir`, `$strapdir`,
|
||
|
and `$image_name` to be declared. See the section dedicated to
|
||
|
"Creating wrappers" for insight on these variables.
|
||
|
|
||
|
The workflow of this function is bootstrapping a complete _rootfs_,
|
||
|
creating a raw image, installing/compiling a kernel, rsyncing
|
||
|
everything to the raw image, and finally compressing the raw image.
|
||
|
|
||
|
This same workflow is applied in the next two functions in this file,
|
||
|
which are `build_iso_dist` and `build_vagrant_dist`. To get a better
|
||
|
understanding of _libdevuansdk_, it's recommended to go through one of
|
||
|
these functions and following it deeper to find and figure out the
|
||
|
other functions and how they work together.
|
||
|
|
||
|
|
||
|
### `devprocsys()`
|
||
|
|
||
|
This function is a simple helper function that takes two arguments. It
|
||
|
mounts or unmounts `/dev`, `/proc`, and `/sys` filesystems to or from
|
||
|
wherever you tell it to. For example:
|
||
|
|
||
|
```
|
||
|
$ devprocsys mount $strapdir
|
||
|
$ devprocsys umount $strapdir
|
||
|
|
||
|
```
|
||
|
|
||
|
It is very necessary to use this if one wants to do anything requiring
|
||
|
access to hardware or the system's resources, i.e. cryptography.
|
||
|
|
||
|
|
||
|
### `dpkgdivert()`
|
||
|
|
||
|
This function, like `devprocsys` takes two arguments and will create
|
||
|
or remove a dpkg diversion in the place you tell it to and remove
|
||
|
`invoke-rc.d` so that _apt_ does not autostart daemons when they are
|
||
|
installed.
|
||
|
|
||
|
|
||
|
### `chroot-script()`
|
||
|
|
||
|
This very useful functions allows you to _chroot_ into `$strapdir` and
|
||
|
execute the script/binary that's passed as a parameter to this
|
||
|
function. It also takes an optional argument `-d` that will call
|
||
|
`dpkgdivert` on and off before and after execution.
|
||
|
|
||
|
The `chroot-script` is also an example on its own that shows how to use
|
||
|
the `chroot-script` function.
|
||
|
|
||
|
|
||
|
Mandatory variables
|
||
|
-------------------
|
||
|
|
||
|
* `$R` is the root directory of a wrapper. It's defined already in all
|
||
|
the existing ones. In almost evert situation it can be `$PWD`.
|
||
|
|
||
|
* `$workdir` is the working directory of the current build. A sane
|
||
|
default is `$R/tmp/workdir`
|
||
|
|
||
|
* `$strapdir` is the bootstrap directory of the build. It holds the
|
||
|
rootfs when you debootstrap it, and customize it further on. Default
|
||
|
is `$workdir/rootfs`.
|
||
|
|
||
|
* `$arch` is the CPU architecture of the build. I.e. `amd64`, `armhf`,
|
||
|
etc.
|