Compare commits

..
940 Commits
Author SHA1 Message Date
Joachim Wiberg 8b4f10c21d doc: update ChangeLog for v23.08 release
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-31 13:23:15 +02:00
Joachim Wiberg 76fe75469d libsrx: fix include, core.h replaced by common.h outside confd
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-31 10:47:08 +02:00
Tobias WaldekranzandJoachim Wiberg a88391afa2 common: nameif: Drop the assumption that any eN interface is a port
The port marker is intended to be used as a hint to the
auto-factory-config generator, so that it can create a bridge for all
switch ports by default. Therefore, revert to only include ports that
devlink reports as "flavour physical".

If we want to test this functionality in QEMU, we can use Rocker, the
virtual switch, instead.
2023-08-30 12:45:51 +02:00
Tobias WaldekranzandJoachim Wiberg 93118b02fe confd: Make physical port detection compatible with Linux 6.1
The old assumption was that only virtual links would have specific
"linkinfo" data. However, somewhere between 5.19 and 6.1, DSA ports
gained the ability to report its "conduit" interface via the
"linkinfo" attribute. That's great, but unfortunately it broke our
heuristic assumptions.

The new assumption is that only physical ports will report a
"parentbus" attribute. Let's see how long that will last :)
2023-08-30 12:45:51 +02:00
Tobias WaldekranzandJoachim Wiberg 4a4733354b kernel: Use Buildroot's default kernel (6.1.y)
Our custom version has gone from being newer than Buildroot's default
to being older, so there is no reason for us override it anymore.

The kernel has become a bit more picky and will give nasty error
messages if a link's PHY connection is not explicitly defined, but
instead relies on implicit defaults. This was missing from the CPU
port of the CRB, so we supply a small patch to fix that.
2023-08-30 12:45:51 +02:00
Joachim WibergandTobias Waldekranz 04e8a87287 package: set foo_REDISTRIBUTE = NO for local packages
When running `make legal-info` Buildroot will collect source and
licenses for all packages, which generates a few warnings for our
local packages.  Local packages are skipped.

> The source code for packages that set <PKG>_REDISTRIBUTE = NO will not
> be saved.  Patches that were applied are also saved, along with a file
> named series that lists the patches in the order they were applied.

Hence, setting 'foo_REDISTRIBUTE = NO' disables the warning, which seems
like a good idea to reduce the number of unnecessary questions we might
otherwise get.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 12:44:57 +02:00
Joachim WibergandTobias Waldekranz ab88c97d45 package/statd: properly declare license and group decls.
Correct license for package is the same as confd and libsrx.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 12:44:57 +02:00
Joachim WibergandTobias Waldekranz 1baeaeddf5 src/statd: licensed under the same license as confd & libsrx
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 12:44:57 +02:00
Joachim WibergandTobias Waldekranz b6baf452bd package/confd: properly declare license and group decls.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 12:44:57 +02:00
Joachim WibergandTobias Waldekranz e3d9236927 test: disable flaky services_basic test
See issue #126 for details.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 8ce3785d26 test/case: increase test time slightly to catch per-20 sec LLDP
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz c07d3e7ec9 Relocate confd-bootstrap.sh to /usr/libexec
Bootstrap and daemon-specific helper scripts, sometimes known as foot
guns, should not be in $PATH.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 31abe00514 test/case: add LLDP to same test
This unfortunately required some restructuring, and as well as extending
the run time since we have no way of sending Ethernet frames currently
in the test framework (socat would be nice).

 - Put enable/disable of services before tcpdump start, LLDP lingers ...
 - Extend run time: 3 -> 20 sec to catch periodic LLDP messages

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 943603b636 test/case: check for both SSDP and mDNS in same test
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 3dd5810b59 test/case: new test, verify SSDP can be disabled/enabled
This test use NETCONF to enable/disable SSDP, it then verifies that the
DUT responds to, or does not respond to, SSDP discover messages.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 9075e93524 test: add SsdpClient helper class to probe for end devices
This first version reliles on netcat (nc), mostly because that's what I
could figure out how to run in a netns.  A better way would be to have a
full SsdpClient that can collect query responses properly and log all
devices found.

This, however, will do fine for verifying SSDP on/off functionality.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 9a5c619571 test: add Sniffer helper class, wrapping tcpdump
Monday fixup, audit with @wkz

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 1ff744fd04 test: minor, syntax pep-8
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 27387e5e27 package/skeleton-init-finit: rename SSDP service .conf
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz b31e2e9a74 package/skeleton-init-finit: let SSDP advertise every 30 sec, like LLDP
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz efccd7fbda Enable LLDP agent in factory-config
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 50a550b83f confd: add support for enabling LLDP agent using ieee802-dot1ab-lldp
This patch adds support for enabling LLDP using the std IEEE 802.1ab
LLDP yang model.  An infix-lldp model is as well to reduce the set of
available parameters to a bare minimum (enabled), for now.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz f6cfdfd467 cli: add "end" alias to "up", leave this node/subsection
I'm sorry, I'm just so used to this modus from the previous company.
The difference to 'exit', which is available on Cisco IOS, is that it
on the top-level config context does not exit/abort to admin-exec but
instead stops.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 44987d7045 Fix 120: rename sysrepo-bootstrap -> confd-bootstrap
The script resides with confd and sets up our system for confd, this
should make it easier to rememeber where it's located.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 757428364b patches/tcpdump: add missing drop-verbose-default-output patch
Lost in the big summer merge of 2023

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 445cf92009 patches/netcalc: add missing pipe colorization patch
Lost in the big summer merge of 2023

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz bbf9560d73 Ignore /.backup and /x-* directories
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 9e1e90e87b Enable mDNS/SD and SSDP discovery services in factory-config
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz dba737b975 confd: add support for enabling mDNS/SD and SSDP discovery services
Also, for usability, add `name:<SVC>` to each service declaration so they
can be located more easily and/or enabled/disabled using the service they
provide.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 295cc11a8d confd: flatten hierarchy now that statd has moved out
Fix #115

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz ac011e459b src: minor, add missing dist_doc_DATA incl. LICENSE file
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz a38e5582ac Refactor, break out a libsrx from confd, shared with statd
Everything (!) potentially shared with other sysrepo plugins/daemons and
helper functions (not yet in libite) that can be used by other daemons
have been relocated to libsrx.

Fix #116

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 72c8aaef0c package/skeleton-init-finit: enable fewer services by default
This patch drops auto-enable of services we want to be able to control
via NETCONF/YANG.  SSDP and mDNS/SD enable/disable configure support,
using native models, will be included in the same PR and LLDP+SNMP may
come later, using std. IEEE/IETF models, they are not critical atm.

Fix #118

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Tobias WaldekranzandJoachim Wiberg 2d6c872937 netconf: Ignore internal ifaces (e.g. DSA ports) in factory-config
On some system, certain interfaces are not usable by an end-user. The
canonical example of this is the ethernet MAC connected to a switch,
i.e. the DSA port.

Avoid having these be picked up in the generated factory-config, which
would be confusing to a user, by classifying them as "internal" ports
to be ignored by confd and friends.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 319a1bb46b cn9130-crb: Add a workaround for the MMC timeout issue in U-Boot
For some reason, the controller disables the bus power sometime after
it was enabled by the driver. The reference manual says, in Table 645,
about the SD_BUS_POWER bit:

> ... It will be cleared if one of the following occurs: the
> sd_bus_vlt and the voltage support in the Capabilities Register 1 do
> not match or if a card removal state was detected.

Further investigation will be needed to find the (electrical?)
root-cause of this issue.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 02ac90b35f cn9130-crb: Upgrade U-Boot to 2023.07.02 2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 06ea1dd80b uboot: Fix inconsistency in naming of the netboot mode
This is referred to "net" in all places except for this script.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 246b06b8d5 uboot: When booting from a block device, wait for it to show up
The kernel's mounting of the rootfs may race against the underlying
device being probed - especially for media like MMC cards and USB
sticks.

Therefore, tell the kernel to wait for the root device to show up.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 73f991081c post-image: Allow disk images to be built from downloaded release
This is useful when we're only building a bootloader, but we still
want to create a full disk image on the format expected by Infix.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg c08fe9f522 post-image: Defer RAUC status file generation to disk image creation
In the future we want to build disk images from builds where we
haven't locally built Infix, we've just downloaded an existing
release. In those cases we also have to create rauc.status, even
though we're not creating a bundle.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg cf05d46548 aarch64: Keep dtb directory structure from kernel tree in /boot
This is the layout expected by the "distro boot" effort in U-Boot.

As far as I understand, the contract is:

- U-Boot built for `fooboard` by `vendor`, will set the `fdtfile`
  variable to `vendor/fooboard.dtb` - or more precisely: matching
  whatever path the dtb is built at in the kernel tree.

- A distro (e.g. Infix) then just needs to specify the `fdtdir` in its
  syslinux config (/boot in our case), and U-Boot will be able to find
  the correct dtb.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 308a620b69 common: Improve "traditional FIT" image generation
Make the traditional FITs smaller by:

- Filtering out the kernel image from the rootfs, since the FIT way is
  to ship it separately.

- Gzipping the kernel in the FIT, since aarch64 uses the uncompressed
  "Image" format, and squashfs won't take care of it for us.
2023-08-25 10:51:45 +02:00
Richard AlpeandTobias Waldekranz c6513a37bb cli: add source to show interface (ietf type)
Add source, such as "ethernet" to the show ietf interfaces command.
This is translated from the somewhat obscure ietf type, such as
iana-if-type:ethernetCsmacd => ethernet

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 1112203eb3 cli: merge ipv4 and mac in show interface output
Print both ip and mac in the PROTOCOL/ADDRESS column.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz fdf027d282 cli: change header design in show interfaces
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 035397e87f cli: add color to state in show interfaces
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 03f99d7252 cli: autocomplete interface names in show interfaces
And quote the "$name" variable.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 62f0958b65 cli: replace show interfaces with new pretty printer
Replace the old "ip" output with data from the sysrepo operational
datastore. This data is piped through the new json-cfg-pretty script,
which formats the data in a nice human readable way.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 2656f17f58 statd: add operational ipv4 address data
Add IPv4 address info from "ip addr" json to sysrepo operational
datastore.

This patch adds: MTU and ip with prefix-length.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Jon-Olov VatnandJoachim Wiberg d34908a0e5 Fixing broken urls in document docs 2023-08-22 13:41:09 +02:00
Joachim WibergandTobias Waldekranz 3f3de71a38 Fix #107: auto-sync forks every day 2:42 UTC or on dispatch
Highly experimental.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:33:19 +02:00
Joachim WibergandTobias Waldekranz fcb629f08f test: update cases to use new infix-if-types
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 3a56cbe1d4 confd: minor janitoring, yang linting
The commit adds a missing description and reorders some yang statements
to meet canonical ordering according to RFC7950, section 14.

It also relocates the /interfaces/interfaces/infix-if:port augment to
its own base model that the bridge (and later lag) models reference.
Solving the bisarre ordering issues we've seen previously.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 34fd50d1b8 confd: add deviation for if:type limiting it to supported types
This patch adds a new infix-interface-type, derived from the IANA base
type, allowing us to limit the list of supported native interface types.

Basing on IANA interface type ensure compatibility with other models,
e.g., standard/ieee/published/802.3/ieee802-ethernet-interface.yang,
which attaches itself to all interfaces of type ianaift:ethernetCsmacd.

Tested with yanglint and in Infix using ieee802-ethernet-interface.yang,
the 'ethernet' container was properly attached to interfaces of type
infixift:ethernet.

Tab completion in the CLI now lists only the supported types.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 43dd052707 confd: in case of error from aug_save(), log error strings
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 782d63e910 board/netconf: fix regex that adds /bin/clish to /etc/shells
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 96a2418d19 confd: set fallback shell to /bin/false
This further locks down confd to fall back to /bin/false as login shell
in case of internal errors.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 1e74f17a66 Fix #95: lock down and restrict /system/authentication/user/shell
This patch restricts the possible user shells to a subset of the list in
/etc/shells, which is generated by Buildroot.  The default is 'false' to
prevent accidental shell access for non-admin role users.

The default shell for the admin user is now /bin/clish, which can be
further locked down before Infix v24.02 LTS.

In case of internal error the default fallback shell is now set to the
customizable LOGIN_SHELL, which currently is /bin/bash.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 7307439bf6 confd: drop old versions of internal yang models
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 2d614d4fe1 confd: merge internal yang revisions when inside release cycle
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 5f63a4d671 confd: fix lost deviations and timezone enumerations lost in merge
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz bc048f6313 Drop Hybrid Mode from default builds, update documentation
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 10:38:02 +02:00
Ahmed KaricandJoachim Wiberg 2c4b67cbbc test/case: add basic routing test 2023-08-18 14:26:58 +02:00
Joachim WibergandTobias Waldekranz 920a4481b1 .github: simplify contribution guidelines slightly
Also, the file MAINTAINERS has been removed previously.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Joachim WibergandTobias Waldekranz 64a6df7b71 .github: add support resource/contact for when reporting issues
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Joachim WibergandTobias Waldekranz cad6530949 Drop unused script, PROFINET moved to separate repo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Joachim WibergandTobias Waldekranz b1720f7f77 Relocate from top level
No need to clutter up the root directory of the project.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Joachim WibergandTobias Waldekranz 58525325b9 Slight redisposition of content
The following changes have been made to condense and simplify the
leading text in the README.  Tested with Grip to verify that the first
paragraph flows nicely to the left to the fine new logo.  This allows
us to use the space more efficiently and the reader does not have to
scroll so long before reaching relevant content.

 - Right-align logo, and shrink it a bit, to fit text to the left
 - Move topic links to a foldout at the top
 - Move boring licensing stuff to separate docment

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Tobias Waldekranz 8b8090bd31 doc: Add new Logo (again)
Go for something simple - Tux trapped in an RJ45 jack.

Also, remove the old versions that we don't use any more. They're in
the log if we ever need them.
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz 1dc1a02f0c doc: add syntax highlighting for dot segments
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz 361ba05d8e doc: drop unused documents
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz b480cd76f1 Fix #64: initial Developer's Guide
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz 93db790de6 Untabify
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz d2ccb32871 New logo and split of README in multiple pages
This is a cleanup and reorganization of the Infix documentation.
Starting with a simplification of the top-level README, splitting
it up into several pages.

Also, fixes #100 by updating the documentation on Qemu.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Ahmed KaricandTobias Waldekranz 7432ff10aa test/case: add bridge forwarding tests (single-DUT, dual-DUT, VLAN separation) 2023-08-16 13:51:00 +02:00
Ahmed KaricandTobias Waldekranz fc7d212696 test/infamy: add edge type to logical topology (mgmt port selection) 2023-08-16 13:51:00 +02:00
Richard AlpeandJoachim Wiberg 769338515a klish-plugin-infix: fix indentation in infix.xml
Prior to this patch the indentation was a mix of tabs and spaces.
Now use 2 spaces as indentation.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-14 16:49:30 +02:00
Joachim WibergandTobias Waldekranz c94733f6bd package/klish: add missing faux dependency
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-14 13:00:09 +02:00
Joachim WibergandTobias Waldekranz 83e5af33ff Fix #86: rename klinfix -> klish-plugin-infix
Also renames all klix_SYM@klinfix to SYM@infix, this is fine since we're
always calling these symbols with @infix.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-14 13:00:09 +02:00
Tobias WaldekranzandJoachim Wiberg f660f6e9c7 qemu: Homogenize network setup
- Always respect the requested model to emulate. Before this change, a
  device configured to run in TAP mode would ignore a user's requested
  model and always emulate a e1000.

  This worked on x86_64 where that driver is part of the kernel, but
  that is not true for aarch64.

- Always supply a mactab. It was very confusing that the interface
  names would change, in Infix, depending on the selected networking
  mode.

- Remove old decoy variables that were assigned but never used
  anywhere.

- Separately setup the host and target side of a nic (i.e. use a
  -netdev/-device pair instead of the -nic shortcut). This lets us
  share the host side setup across all modes.
2023-08-09 19:45:32 +02:00
Tobias WaldekranzandJoachim Wiberg 9e5904936a statd: Add missing dependencies to Config.in 2023-08-09 19:45:32 +02:00
Joachim WibergandTobias Waldekranz 15795c4b41 confd: skip lldpd and avahi hostname reload during bootstrap
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 17ff8677ee board/common: replace default editor, nano -> mg
This reverts an earlier change where nano was made the default editor in
a misguided attemt by yours truly to accomodate beginner users.

With the recent improvements of the CLI and the fact that the NETCONF
support has matured greatly, the need for a user-friendly editor have
diminished drastically.  Editing system files is now limited to devs
and the core team prefers Mg over nano and vi.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 9766bbbed5 doc/cli: update all the topics to match the refreshed CLI functions
Also, add a new `quick.md` that pops up when the user types `help`.
Very quick intro to get started.  Useful when we add a factory-default
motd: "Welcome to the CLI, type 'help' for a quick overview."

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz bfce877525 confd: ensure change_hostname() returns a sysrepo error code
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz d5298d10e8 klinfix: misc. fixes
- Sync sysrepo conf settings, lots of new settings added, one removed
 - Check if help topic exists
 - password encrypt arguments should be optional, add SWITCH
 - show datetime argument should also be optional, add SWITCH
 - Trial, output factory- and startup-config colorized
 - Switch to srp_prompt v2 for configure context

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 0c6d82cf2f package/klish-plugin-sysrepo: bump to latest + new kkit srp_prompt
The upstream help system has improved greatly.  We can now rely more on
it for generating the man-page like help texts for leaf nodes.  There
is also a new srp_prompt symbol that overrides the default klish one,
srp_prompt adds a '%x' format specifier for an inline path instead of
the default [edit foo bar] JunOS style two-liner.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 8d79235436 package/klish: bump to kkit-next, based on latest upstream
Lots of changes upstream for parsing help texts, running as different
user, etc.  Was getting too difficult to backport to tags/3.0.0, so this
resets the clock on top of (almost) the latest.  Experienced issues with
the admin user in configure mode on the latest commits (e4f65d5).

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz fdb2a5a6dc package/faux: bump to latest upstream git hash
This is needed for the bleeding edge klish + klish-plugin-sysrepo, which
the next couple of commits will add.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz e57616fe3a confd: improve DHCPv4 YANG model descriptions
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 987ec779d3 klinfix: add new commands uptime, version, and netcalc
Preparing for a "show system-information" as well, which still needs to
be discussed to determine contents.  Some data also still missing, e.g.,
article/serial/product number db.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 883d59709e klinfix: add new commands ping and tcpdump, w/ interface completion
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 10684d200f board/common: use tempfile for sysctl manip and remove when done
Mainly just cleaning up /tmp from stale files.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 032881fbf8 board/netconf: chmod 444 (read-only) generated factory-config
Prevent tampering and unintentional overwrite by users.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz b95a82207d package/klish: switch to kkit branch @kernelkit, new features
This commit switches the klish package to use the kkit branch instead of
keeping a lot of patches from the v3.0.0 release.

Most of the changes made are for dragging tinyrl into the 21st century.
It now supports most of the basic features one have come to expect from
a readline replacement: line navigation, deleting words, erasing entire
line, kill and yank of lines/words and last argument on previous line.

The history has also gotten a bit of a stern talking to.  It no longer
deletes lines matching existing old ones from the history, instead it
just checks if the previous command is repeated.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 07b057c455 board/common: import bash completion for initctl
From upstream Finit@b682a5e

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 1a2d799f82 board: drop disabling of built-in help for bash on NETCONF builds
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz d4b23eac75 klish: klish-plugin-sysrepo: klinfix: bump for new srp_prompt@sysrepo
This commit changes the JunOS look of the CLI to something more akin to
a standard shell.  To achieve this a %w format specifier to display the
path components is added to both klish and klish-plugin-sysrepo.

Before:
	admin@infix-12-34-56:exec> configure
	[edit]
	admin@infix-12-34-56:configure> ediit interfaces interface eth0
	[edit interfaces interface eth0]
	admin@infix-12-34-56:configure> leave
	admin@infix-12-34-56:exec>

After:
	admin@infix-12-34-56:/> configure
	admin@infix-12-34-56:/config/> edit interfaces interface eth0
	admin@infix-12-34-56:/config/interfaces/interface/eth0/> leave
	admin@infix-12-34-56:/> leave

However, due to unforseen problems with the naming of VIEWs in klish,
the admin-exec level "path" is hard-coded to "/" for now.

Future imporovement: fold in calling prompt@klish from srp_prompt, and
figure out why the "main" VIEW cannot be changed to "exec" without klish
just bailing out starting up.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 63779cfe37 configs: change default TERM from linux to xterm
Turns out one of the reasons some keys did not work as they should in
certain commnands, most notably the Home/End in 'less', was due to the
default TERM variable being set to 'linux'.  Changing to 'xterm' fixes
this issue, works with both console and ssh login, and from testing do
not seem to have any adverse effects on existing functionality.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 63aa130e9c klinfix: restore Ctrl-C to abort current line, use Ctrl-D instead
While spending the past couple of weeks actually trying to use the CLI,
I realized that it was very confusing to have a different behavior for
Ctrl-C than I was used to from regular shells (including the old clish
from $OLDJOB).

This change drops the Ctrl-C binding, restoring break/abort behavior,
and lets Ctrl-D be abort/exit.  Pressing Ctrl-D in a sub-context in
configure calls exit, when in the top-most configure context we now
do an abort and return to admin-exec.

To apply the changes the user still has to type 'commit' or 'leave',
or tap Ctrl-Z as in the Cisco CLI.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz d913ce00e6 doc/cli: relocate and extend CLI docs with intro and keybindings
This is not just for online viewing, these markdown documents are also
made available in the CLI itself from admin-exec as:

    help [introduction | keybindings | tutorial]

With this commit we also add lowdown and the real less application to
be the Infix help system.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 52301db8bd package/lowdown: new package, markdown pretty-printer for terminals
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Tobias Waldekranz 0aae72745f package/klish-plugin-sysrepo: bump and switch to KernelKit mirror
This adds support for the srp_help_text() symbol.  It allows us to
display the full description for a leaf in a YANG model.  This has
been added to the 'help [foo]' configure context command.

A separate admin-exec level 'help' command will be added in a later
commit.  It will only be an intro to the CLI, keybindings, etc.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 3a4097c741 package: switch faux and klish to KernelKit mirrors on GitHub
No need to go fishing every time we build when we have everything we
need in the pond next door.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 142f33e89e patches/klish: restore some common keybindings for line manipulation
This restores some of the original keybindings for line manipulation
that was part of the original CLISH.  They had been disabled upstream
during the UTF8 conversion and never got reimplemented.

From branch kkit on https://github.com/kernelkit/klish, the kkit branch
is based off of the 3.0.0 release.  The same patches are also available
on kkit-next, which is based on the latest upstream master.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 30a28fe874 klinfix: modify show datetime, add optional [iso] flag
By default, output human-friendly RFC2822 format rather than NETCONF:ish
ISO-8601 format.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 697a907350 klinfix: new commands show log [FILE] and follow [FILE]
With completion support.  The log command has an optional last arg,
after FILE, tail NUM, which runs tail -n NUM FILE instead of cat.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 24d9a6dfc6 klinfix: add new commands password [generate | encrypt]
An excellent example of how to define commands with optional subcommands
and optional parameters:

  password encrypt [type <md5 | sha256 | sha512>] [salt STRING] [PASSWORD]

The tricks here are two:

  1. mode="switch" in the top-level password command
  2. min="0" in the encrypt subcommands

The first turns the COMMAND element into a SWITCH element (with command
matching), and the second makes a COMMAND optional.  If an optional
command is input by the user, then the enclosed PARAM is mandatory.

Please note, due to limitations in the mkpasswd¹ utility, spaces are not
supported in PASSWORD, i.e., when read from CLI prompt.  However, spaces
are allowed when using the interactive prompt, i.e., when omitting the
PASSWORD from the CLI prompt.

¹) mkpasswd does not look for any leading ' or " in the password arg.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz a5ad52e5eb package/klish: install default type definitions for klish plugin
The documentation for klish mentions the file ptypes.xml, which defines
the ptype /STRING.  So let's use that instead of defining our own types.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 682384875c klinfix: add new commands show bridge [fdb | mdb | vlans]
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz cd0d12c8c0 klinfix: add new commands show [ip | interfaces] [brief | detailed]
Helper commands for quickly diagnosnig the networking subsystem after
making config changes.  Should over time be replaced with operational
status from sysrepo.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz de9c255b27 klinfix: add support for libyang
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Richard AlpeandTobias Waldekranz 7e1027488f statd: add interface type to operational data
An iana or infix interface type is derived from "ip link" data.
Such as loopback -> iana-if-type:softwareLoopback.

This patch adds support for the following types:
loopback, ethernetCsmacd, veth, l2vlan and bridge.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-08 14:39:50 +02:00
Joachim WibergandTobias Waldekranz 2a37d903b9 board/common: enable CONFIG_FEATURE_CHECK_NAMES for usernames
This commit enables a basic sanity check of usernames in BusyBox that by
default is disabled (!).  The rules enabled by this are:

 - the user or group name should consist only of letters, digits,
   underscores, periods, and dashes¹, and not start with a dash (as
   defined by IEEE Std 1003.1-2001), or periods²

 - for compatibility with Samba machine accounts, $ is supported at the
   end of names

 - max length of user or group name is 256 chars

Changes in this commit also includes a sync with latest BusyBox 1.36,
which adds: tree, tsort, SHA hw acceleration, and a separate script
for udhcpc6.

_____
¹) The documentation actually mentions "and at-signs" as well, but that
   has been explicitly removed from the source code.
²) The documentation does not mention that leading periods are not
   allowed, though this is also explicitly mentioned in the source code.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz fe23781827 package/confd: follow-up to 259239c, drop clean-etc script
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz c100a75abe confd: refactor, reduce code duplication
Factor out a new helper function, change_get_user(), to do the bulk of
the work for the change callbacks.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz e078465d19 confd: add support for specifying login shell for ietf-system users
- Add /bin/clish (symlink) to /etc/shells, as well as the traditional
   /bin/{true,false} for completeness
 - Validate shell string, with fallback to /bin/bash and /bin/sh
 - Step infix-system revision, keeping old model in tree

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 0585499202 confd: give local callbacks access to the current sysrepo session
Needed when searching for unchanged data, e.g., default values when
creating new users.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 69fa434b44 confd: call lldpcl and avahi-set-host-name after system bootstrap
Services have not even started up yet, so system() calls will only
unnecessarily delay the boot.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 4d76da309d confd: minor refactor, dry
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 3893538e46 cli: add support for editing NACM rules
This patch bumps klish-plugin-sysrepo to get EnableNACM support.  For
this to work as expected for the admin user we also need to change the
permission for the model in sysrepo.

Note: the srp_rollback() symbol has been renamed to srp_reset() upstram.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 11ba06fddf confd: minor cleanup
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 528ea61302 confd: set up compat authorized_keys symlink for netopeer2-server
Apparently netopeer2-server expects public keys for users to be in the
canonical place (~/.ssh/authorized_keys).  Infix use a custom location
in /var/run, maintained by the ietf-system plugin, which OpenSSH knows
but netopeer2-server doesn't.

It seems to be possible to add some sort of "pattern" to netopeer2 to
indicate where to look for public keys.  This is added when building it
but Buildroot does not expose this as a setting.  So for now, this seem
to be the least intrusive way of handling it.  The owner is root, so a
malicious user cannot change the link or contents without some other
form of privilege escalation first.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 94908ed33c confd: remove home directory when removing users
No point in leaving unused home directories lingering on the system,
also a potential security problem.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 5f27f043d1 confd: create users not locked but with password login disabled
Employ the new 'adduser -d' feature where users can be created with
password login disbled instead of creating them locked by default.

This allows us to create remote users that can only access the device
using public key SSH login, which until this point was not possible.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 7cb68b3a51 patches/busybox: add support for shadow passwords to login applet
The login applet did not know about shadow passwords, and could thus not
determine if a user accont was locked or passwordless.  This caused it
to return 'login: bad salt' instead of "Login incorrect", which is the
more secure path for handling brute force attempts.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 7bc14cf07b patches/busybox: add support for adduser -d
The existing 'adduser -D' command adds a locked user account, similar to
the Debian adduser --disabled-login'.  This patch adds support for the
'adduser -d' command, similar to Debian 'adduser --disabled-password',
meaning login is possible but using methods other than password, e.g.,
SSH keys.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Richard AlpeandJoachim Wiberg f727653834 statd: add tx/rx counters to iface operational data
Add tx and rx bytes as YANG out-octets and in-octets.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-08 06:30:25 +02:00
Tobias WaldekranzandJoachim Wiberg 5236d81819 confd: infix-system-software: Add descriptions 2023-08-07 16:29:59 +02:00
Tobias WaldekranzandJoachim Wiberg c14d506ab1 confd: infix-system-software: Remove unsupported notification node
This would be nice to have, but it is not prioritized at the moment.

Fixes: 4fb0926 ("confd: Add a sysrepo interface to install RAUC bundles")
2023-08-07 16:29:59 +02:00
Tobias WaldekranzandJoachim Wiberg 5978edce94 confd: Explicitly set operstate to up when bringing interfaces up
This ensures that the operstate is defined for all interface
types. Without supplying this, virtual interfaces (e.g. loopback,
dummies, tunnels) will report an "UNKNOWN" operstate. For ports backed
by physical (or virtualized) hardware, this option has no effect.
2023-08-07 15:50:52 +02:00
Joachim WibergandTobias Waldekranz 1afc2adcfc confd,statd: add support for enabling DEBUG log messages at runtime
- add debug flag to trigger DEBUG() statements
 - DEBUG() macro needs 'path' argument

For statd we can add support for an optional '-d' command line option to
trigger, and SIGUSR1 to toggle, debug mode.  TBD for confd which still
remains to be refactored into the same standalone daemon as statd.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-07 00:28:04 +02:00
Joachim WibergandTobias Waldekranz f40e747fbd statd: drop extra \n, not needed
The idea is to 1) map debug/error macros to syslog(), which does not
need \n, and 2) when stdout logging is used, let the macro add a \n.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-07 00:28:04 +02:00
Joachim WibergandTobias Waldekranz db813bd623 klinfix: add CLI support for set datetime 2023-07-03T16:06:34+02:00
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-06 23:58:59 +02:00
Joachim WibergandTobias Waldekranz 6dafda072a klinfix: add klix_rpc() for poweroff and reboot CLI commands
This change allows us to verify common RPC commands from within the
CLI, starting with the poweroff and reboot commands.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-06 23:58:59 +02:00
Richard AlpeandJoachim Wiberg a9317901c3 statd: add support for additional operstates
Add support for yang link state "lower-layer-down" and "not-present".

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-02 11:11:19 +02:00
Ahmed KaricandJoachim Wiberg 2ff57f865a test/case: upgrade deprecated hash method 2023-07-13 15:41:38 +02:00
Joachim Wiberg 84fda1dd56 test/docker: update instructions on test and upload of new container
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-13 15:13:27 +02:00
Ahmed KaricandJoachim Wiberg b44932c614 "test/docker: add passlib to docker image" 2023-07-13 14:15:41 +02:00
Jon-Olov VatnandJoachim Wiberg 76c09ba3bd Timezone names as enumerated strings defined by IANA
Use timezone names defined in iana-timezones.yang, replacing
the type 'string' in standard ietf-system.yang

This enables CLI (tab complete) and NETCONF clients (dropdown)
to view available timezone strings, and the yang engine to
validate the input.
2023-07-12 08:51:27 +02:00
Jon-Olov VatnandJoachim Wiberg a43bdd94ab Limit username length and pattern in system yang model
Deviation in ietf-system.yang
'replace' username type from general string to a string
with length and pattern restrictions inline with the
BusyBox 'adduser' tool.

Note, chk_sr_user_update is more restrictive, which should
be handled.
2023-07-12 08:51:27 +02:00
Jon-Olov VatnandJoachim Wiberg 5c4982e388 Specify deviations for optional features (ietf-systems.yang)
Declaring deviations for optional features for clarity regaring
extent of support.

New revision and file of infix-systems created, as earlier version
was included in infix-2023.06 release.
Please see infix-systems@2023-04-11 for history.

Support and deviations has not been checked for the included
'sub-yang-module' infix-systems-software, thus there may be
more updates to come.
2023-07-12 08:51:27 +02:00
Ahmed KaricandJoachim Wiberg b0d3976ae0 test/case: Add interface status tests 2023-07-11 18:05:58 +02:00
Jon-Olov VatnandJoachim Wiberg a1a4491d37 Doc: Fixing hybrid-mode FRR example
two fixes
- first a typo (probably copy/paste issue)
- the sleep and 'vtysh -b' was added to make
  vtysh read the /etc/frr/frr.conf file upon start(*)
  sleep needed to make this happen after initctl reload

(*) See https://docs.frrouting.org/en/latest/vtysh.html#integrated-configuration-mode
But there ought to be a better way.
2023-07-06 16:54:22 +02:00
Ahmed KaricandJoachim Wiberg 7b99cdbd16 test/case: Add authentication/user test 2023-07-04 23:08:21 +02:00
Richard AlpeandJoachim Wiberg b3213c6228 statd: break out operational status into new daemon
This patch does two main things:
1) Breaks "statd" free from "confd".
2) Introduces netlink monitoring of interfaces for sysrepo data.

Prior to this patch, sysrepo operation status was handled by code
named "statd" inside "confd". (Where confd is a sysrepo-plugin and
not a real daemon, which its name implies)

In this patch, we break out the interface part of the operational
sysrepo status, previously "statd", into a new daemon, also called
"statd".

The main reason for doing this is to avoid sysrepo threading, which
allows the new "statd" to have control over sysrepo events in the
same event pool as netlink events from the kernel. This in turn allows
statd to subscribe and unsubscribe dynamically to interfaces that
comes and goes during runtime (such as vlans).

It also makes sense that "statd" is in fact a finit daemon.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-07-04 17:43:16 +02:00
Richard AlpeandJoachim Wiberg e26d4663d0 Increase rmem_max size
This allows an application to set a larger socket receive buffer size.
The default size is left unchanged (212992). 1MB is arbitrary chosen.

The main reason for this is to allow netlink kernel sockets to
hold more interface data while user-space is processing it. Typically
useful during main configuration changes where lots of kernel side
changes occur in short period of time, such as VLAN creation.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-07-04 17:43:16 +02:00
Joachim WibergandRichard Alpe 6befbf6a20 package: add missing LICENSE and LICENSE_FILES to packages
For some reason, the `make license-info` target complained klinfix
needed a hash file, but not the other local repos.  Issue #67 tracks
adding license-info to releases, which will need some looking into,
for now this fixes the most glaring packaging oversights.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe d2f83ef1b3 package: fix LICENSE_FILESS for klish family of packages
The packages have a misspelled license file. Sneaky

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe ff8cd981e1 .github: simplify expression guards
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe 259239ce5b package/confd: drop clean-etc script, fix #74
This script has some seriously sharp edges.  Today two devs cut their
fingers on it trying to get new functionality in place.  One when, in a
attempt at, adding an innocent status daemon, and another setting up a
client repository with a custom, enabled-by-default, daemon.  In both
instances this script happily cleaned out the deamons from enabled/.

A better alternative, as described in issue #74, is to be stricter on
what is enabled by default, and for things we feel provide value in the
Classic build, maintain a separate list of symlinks in its meta board
definitiion instead.

Also, clean out previous attempt at factory-config.  Now that we have
the auto-factory support in place we don't need this.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe 72e388458d board/common: drop sshd.conf symlink, enabled by skeleton-init-finit
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe 8ab2bdc625 package/querierd: don't enable service by default
In normal use-cases querierd needs a bridge with multicast-snooping
enabled to run.  No point in attempting to start querierd by default.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe 45466bcbc7 package/skeleton-init-finit: smcrouted default changes
- allow custom options sourced from optional /etc/default/smcrouted
 - don't enable smcrouted by default when enabled in Buildroot .config
   because normal use-cases require an /etc/smcroute.conf

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe f8666ddeb2 .github: possible fix of Bob's upload
Use same if: syntax for release/upload job as for build job.  Only thing
the upload job needs to ensure is that it does not try to upload built
artifacts from forks or from non-main builds.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandRichard Alpe c8c0350859 .github: fix markdown link to doc/MAINTAINERS
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandRichard Alpe d5c28bc454 package: replace TARGET_FINALIZE_HOOKS with POST_INSTALL
When calling `make foo-rebuild` one expects all the registered hooks in
the foo package to have been called by Buildroot.  The Buildroot manual
has this to say about the target-finalize hook:

> These hooks are run after all packages are built, but
> before the filesystem images are generated.  They are
> seldom used, and your package probably do not need them.

The correct hook to use for target packages is POST_INSTALL_TARGET_HOOK.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandRichard Alpe de24d0389a package: relocate PROFINET packages to customer repo.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandRichard Alpe 93fe939f91 Fix #72: import up-to-date Debian /etc/services (OSPF, mDNS, etc.)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandTobias Waldekranz 77ef063185 klish: backport hotkey fixes, now Ctrl-D and Ctrl-Z work properly
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-01 14:39:42 +02:00
emihasandJoachim Wiberg 443b9cdf9f test/case: Add ietf_interfaces/ipv4_address.py
Verify that IPv4 addresses can be added and removed.
2023-06-30 18:38:59 +02:00
Tobias WaldekranzandJoachim Wiberg 7cf65f4c56 test/infamy: Support submitting edits containing deletions 2023-06-30 18:38:59 +02:00
Tobias WaldekranzandJoachim Wiberg 5be61a7013 test/case: Add ietf_system/upgrade
Verifies that RAUC bundles can be installed using NETCONF.

We choose to not add this to the "all" suite for now, as the qeneth
topologies do not run with full disk emulation.

To test locally, configure your "make run" instance to use the UEFI
loader, launch `make run`, and then run:

    make INFIX_TESTS=test/case/ietf_system/upgrade.py test-run
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 4fb09267cf confd: Add a sysrepo interface to install RAUC bundles 2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 6ca6a4e2f8 confd: Restructure list of source files
We were now at the point where it was completely impossible to see
which files are actually built.

Bring back some order, making future diffs easier to understand.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg c4a1b2558d rauc: Increase maximum download size to 1 GiB
Default is 8 MiB which is, you know, not alot. Choose a very high
value and let the OS notify RAUC when the disk is full.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg c4b7b2aa65 rauc: Enable service
The RAUC service exports a D-Bus API that fits well with NETCONF's
notion of RPCs and notifications.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg f056e20558 rauc: Bundle RAUC status file in disk image
This let's us report the installed software versions, before any
updates have been made. Since the info should _not_ be erased in a
factory reset (since the installed software versions will not change),
move the status file to aux, which is the proper place for this class
of information.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 1b85d0c4e0 qemu: Restore 9p host mount support
This broke in the qemu-in-images-dir refactor when the config prefix
changed.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 193acaac6b qemu: Declare some missing dependencies in the configuration
- Only U-Boot can deal with the MMC disks at the moment
- Initrd's only make sense when starting QEMU with `-kernel`
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg f572f173da qemu: Refine serial setup
- When running with full disk emulation (via GRUB on x86, or U-Boot on
  aarch64), there's no way for us to influence the commandline passed
  to the kernel, so the console is fixed to ttyS0/AMA0. Therefore,
  reintroduce an option to choose the console.

- Use a fixed `nr`s for virtconsoles, so that the gdbserver always
  listens on `hvc1`. Ideally, we should use udevs `/dev/virtio-ports/*`
  symlinks, but for some reason these point to `/dev/vportXpY` and not
  to `/dev/hvcY`. TODO: Figure out what the difference is.

- While we're here, remove the duplicated RTC setup which was
  introduced with the virtio-console work a while back.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg b02bba991d netboot: Consistently use /dev/ram0 as the root when ramloading
/dev/ram is accepted by the kernel during boot, but there's no actual
file with this name in /dev, so RAUC will get confused about which
slot is actually one we booted from.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 1202edc990 test: Ensure that the local pip environment is setup for test-run* 2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg be7b57412e test/case: Add meta/play
Launches an interactive ipython environment, attached to Infix nodes.
This can be used as a playground for developing tests, testing out
NETCONF operations, etc.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 6d6acda35d test/infamy: Patch netconf_client's logging to support IPv6
As an example, when running meta/play, a call to a device's `_debug()`
method will enable logging of all transmitted and received NETCONF
messages, which is very useful during debugging.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg fd939f65ce test/infamy: Add helpers to access operational state 2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 6fc131dace test/infamy: Add helpers to call actions and regular RPCs
As with config, the call can be described with a regular python
dictionary. As an example, to reboot the device:

    target.call_dict("ietf-system", { "system-restart": {} })
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 60beca8820 test/infamy: Ensure that environment always has an ltop attribute
This fixes an issue where attaching to a device in an environment
without a logical topology would trigger an exception.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 31760e1c96 sysrepo-plugind: Require all plugins to load without error
If confd or statd fails to initialize, we want Finit to know about it.
2023-06-30 15:33:10 +02:00
Joachim WibergandTobias Waldekranz 772dbe9d64 test: add checklist for howto update the docker iamge
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz fcf3605e12 test/case: new regression test for IPv4 autoconf
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz ecdf2a1012 test: add fakeroot to the docker image
We need fakeroot for running tcpdump inside the container.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz b88348145c confd: fix regression in enabling ipv4 zeroconf address
To reproduce regression, before fix, in CLI from factory-default:

  > configure
  > set interfaces interface e0 ipv4 autoconf enable true
  > leave
  > shell
  $ ps; ip -br a

Turns out, for some reason I cannot figure out, that we cannot use the
same pattern as for ipv6 with lydx_get_descendant().  Manually fetching
the node works though.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz d6eca354b3 klish: add reboot and poweroff commands, for usability
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz ecc24d13cb confd: call avahi-set-host-name on hostname changes
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz e4a1261ad8 Fix #57: unneccesary lldpd restarts on configuration change
Instead of restarting lldpd we can call lldpcli to inform lldpd of the change.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz 6410a96d6d Fix #58: trim interface factory-defaults
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz c93edfb6a2 board: relocate NETCONF factory-default scripts
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz 4925636b2a Fix #56: relocate board/common auto-factory.d to board/netconf
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz 32e8e95088 Fix #60: add replace BusyBox ping with iputils-ping
Among other things, it supports -L when detecting IPv6 neighbors:

    ping -6 -L ff02::1%eth0

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz b2c77a2457 test/infamy: use factory-default rpc between tests
Instead of relying on startup-config == factory-config we can now set
running-config to factory-config using the factory-default rpc when
we prepare for a new test.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:37:12 +02:00
Joachim WibergandTobias Waldekranz 123317ce35 confd: add support for factory-default rpc
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:37:12 +02:00
Joachim WibergandTobias Waldekranz 8302ad9735 confd: fix missing RPC OK from system-restart et al
Use new APIs runbg() and run_status() to call 'reboot' or 'poweroff' in
the background.  This allows sysrepo + netopeer to reply to remote RPCs
before networking goes down.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:37:12 +02:00
Joachim WibergandTobias Waldekranz 2d453d0025 Fix #46: 'make run-menuconfig' needs buildroot-config/mconf
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:37:12 +02:00
Joachim WibergandTobias Waldekranz 0a40014d1b package/finit: backport fix to indefinite stall at reboot/shutdown
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:35:36 +02:00
Richard AlpeandJoachim Wiberg 9d63aeed61 confd: fix memory leak in lydx_new_path()
Prior to this patch, every new call to lydx_new_path() where "first"
was set to 1 resulted in a memory leak of 72 bytes. Typically at least
once for each sysrepo query.

The memory was allocated deep down in the lyd library, but as the
parent node wasn't set (NULL) it wasn't found by sysrepo when
cleaning up.

In this patch we mitigate this by simply removing the "first" concept,
as it doesn't appear to be needed.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-06-29 14:47:36 +02:00
Joachim Wiberg 6d536e1b3f Further clarify how to use containers in Infix
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-28 08:57:42 +02:00
Joachim Wiberg 15843f4325 doc/container.md: add Real Example and update Hybrid Mode
Add a real example where we create a writable layer for container based
on a simple image.

To be able to properly start/stop and monitor containers using Finit, we
need to add the options `--systemd=false` and `--conmon-pidfile=...`.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-27 11:55:40 +02:00
Joachim Wiberg a8f14b949c doc/container.md: use correct interface in cni host interface
We usually put the vethNb interfaces in the bridge and the vethNa end in
the appliance/container.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 22:47:06 +02:00
Joachim Wiberg 44983a4bd5 doc/cli.md: add diff to veth and bridge sections
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 15:27:48 +02:00
Joachim Wiberg cfa220a043 package/podman: log any console output from podman to syslog
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 13:11:46 +02:00
Joachim Wiberg 01455a08f8 doc/container.md: use unused host port 222 for container port 22
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 13:05:54 +02:00
Joachim Wiberg cc1845d62b doc/container.md: add section on debugging
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 12:53:37 +02:00
Joachim Wiberg 43c68de6f1 doc/container.md: update Multiple Networks and Hybrid Mode example
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 12:06:45 +02:00
Joachim Wiberg d99445c489 Fix Frr Hybrid Mode example and link to doc/container.md
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 12:06:17 +02:00
Joachim Wiberg eed5c2f206 doc/cli.md: update with a toc and help on veth pairs and bridging
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 11:56:42 +02:00
Joachim Wiberg 593a0626d1 doc: always lead with an example, put caveats last
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-24 18:42:42 +02:00
Joachim Wiberg 81f2e78984 Minor, spellcheck Buildroot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-24 18:42:24 +02:00
Joachim Wiberg 2057f3dae5 Update ChangeLog for v23.06.0 release
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-23 14:22:13 +02:00
Joachim Wiberg a8271d878d .github: Introducing the Infix Release General
Similar to the standard build workflow, with the following exceptions:

 - Sets internal variable 'ver' to ${GITHUB_REF#refs/tags/v}, for filenames
   and directories, ensuring the leading 'v' in the tag is dropped
 - Sets INFIX_RELEASE variable, for post-image.sh, to '$ver' so it creates
   the .img files with the same name as the tarball and directory. (RELEASE
   clashes with OpenSSL's release handling, breaking builds completely.)
 - Sets release directory + tarball to infix-$variant-$ver, where variant
   is one of "classic" or "" (for NETCONF).
 - *Skips the tests*, for now.  We release from main, which should already
   be tested.  Future releases may run a release test suite here
 - Each build step (matrix) uploads its artifacts, when all build steps
   have completed we start the release job (depends on build), which then
   downloads all the various artifacts before creating the GitHub release
 - The release notes are derived from the file ChangeLog.md.  Please note,
   extraction of the first release notes will fail since there is no prior
   release marker in the file

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 23:16:33 +02:00
Joachim Wiberg 89ea840e74 board/common: append $INFIX_RELEASE to artifact names
This patch affects the various artiact file names in release tarballs.
The files /etc/os-release and /etc/version in the image use the actual
GIT commit (git describe), as per post-build.sh

Guiding principle: artifacts without release suffix are development or
"nightly" builds.  Artifacts *with* release suffix are released ones.

This drops the $GITVER from .img files for consistency with the other
artifacts, e.g. .gns3a and .pkg.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 23:12:10 +02:00
Joachim WibergandTobias Waldekranz f48fdcd211 buildroot: bump to 2023.02.1
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 19:16:41 +02:00
Joachim WibergandTobias Waldekranz aea74842e0 test/case: new test, basic bridge vlan filtering
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 13:55:16 +02:00
Joachim WibergandTobias Waldekranz a295086a35 confd: add support for bridge VLAN proto and pvid
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 13:55:16 +02:00
Joachim WibergandTobias Waldekranz c8a3e94501 confd: initial support for bridge native vlan filtering
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 13:55:16 +02:00
Tobias Waldekranz 3784d769ca netopeer: Increase timeout to 60s
Empirical data shows response times of over 10s for even simple config
changes on heavily loaded systems (non-accelerated VMs with lots of
stress on the host). So we choose a really large number, hoping that
we won't be back here for a while.
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz da1bc57b92 confd: prevent sprious errors of symlinks already existing
When/If dagger generations are abandoned we should not bail out if a
recovery generation finds an existing 'order' in the previous gen.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 76b7dce7fc confd: ignore other end of veth pairs also when deleting interfaces
Same as with creating veth pairs, we must not try to delete both ends
since the kernel does that for us.  Ensure we check skip in the current
generation and not in the next.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 5e5cc8070f confd: skip shebang in dagger action if action already exists
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 9ca26a6ef7 confd: clean up error messages and drop developer debug messages
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 2994b68e89 confd: follow-up to bridge support, support removing bridge ports
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 791a153ebf confd: minor refactor
Relocate and reorder code a bit, preparing for VLAN support.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 1c6b06d3ac test/case: minor, fix copy-paste in step description
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 2014c470cd test/infamy: reset between test cases using 'copy startup running'
This should copy factory running, instead of using the factory-reset RPC
but for now we use startup since 'factory' is not yet supported as a
copy-from target.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 52c2fe1e68 test/infamy: spellcheck
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-22 00:12:43 +02:00
Joachim WibergandTobias Waldekranz 35b4e3296b test/infamy: fix runtime exception handling
File "/home/runner/work/infix/infix/test/infamy/netconf.py", line 116, in put_config
    except self.ncc.RpcError:
           ^^^^^^^^^^^^^^^^^
AttributeError: 'Manager' object has no attribute 'RpcError'

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz d4014816d9 test: fix copy-paste from other test
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz e8c3eff52b confd: add support for setting bridge group_fwd_mask
This one was a little bit tricky with the special yang union.  To figure
out the integer value of enums one has to check the schema and deref the
correct subvalue within.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 587f92cbaa test/infamy: attempt to handle RpcError "processing timed out"
While running tests in GitHub action, the following[1] often happens.
From the timestamp it seems unlikely to be casused by timeout, which
from what I can tell is 120 sec in the library and 30 sec on our socket.
This never happens when running locally, so I've added a simple
try-catch to retry the operation, because some[2] jobs actually pass.

2023-06-18 09:18:17 # Traceback (most recent call last):
2023-06-18 09:18:17 #   File "/home/runner/work/infix/infix/test/case/infix_interfaces/dual_bridge.py", line 18, in <module>
2023-06-18 09:18:17 #     target.put_config_dict("ietf-interfaces", {
2023-06-18 09:18:17 #   File "/home/runner/work/infix/infix/test/infamy/netconf.py", line 117, in put_config_dict
2023-06-18 09:18:17 #     return self.put_config(lyd.print_mem("xml", with_siblings=True, pretty=False))
2023-06-18 09:18:17 #            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2023-06-18 09:18:17 #   File "/home/runner/work/infix/infix/test/infamy/netconf.py", line 112, in put_config
2023-06-18 09:18:17 #     self.ncc.edit_config(xml, default_operation='merge')
2023-06-18 09:18:17 #   File "/root/.infix-test-venv/lib/python3.11/site-packages/netconf_client/ncclient.py", line 277, in edit_config
2023-06-18 09:18:17 #     self._send_rpc(rpc_xml)
2023-06-18 09:18:17 #   File "/root/.infix-test-venv/lib/python3.11/site-packages/netconf_client/ncclient.py", line 223, in _send_rpc
2023-06-18 09:18:17 #     r = f.result(timeout=timeout)
2023-06-18 09:18:17 #         ^^^^^^^^^^^^^^^^^^^^^^^^^
2023-06-18 09:18:17 #   File "/usr/lib/python3.11/concurrent/futures/_base.py", line 456, in result
2023-06-18 09:18:17 #     return self.__get_result()
2023-06-18 09:18:17 #            ^^^^^^^^^^^^^^^^^^^
2023-06-18 09:18:17 #   File "/usr/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result
2023-06-18 09:18:17 #     raise self._exception
2023-06-18 09:18:17 # netconf_client.error.RpcError: EV ORIGIN: "rpc" ID 5 processing timed out.
2023-06-18 09:18:17 #

[1]: https://github.com/kernelkit/infix/actions/runs/5302735753/jobs/9597878647
[2]. https://github.com/kernelkit/infix/actions/runs/5302735946/jobs/9597878838

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz c832a906fd test/case: split bridge-basic test in three
A basic test should be just that, very basic test of a feature.  So we
split out the more advanced ones, building up to the dual-bridge.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 16be0e9db5 test/infamy: use merge operation with edit-config
Unsure if this is right, but existing nework test does not send loopback
or other interfaces in the networking configuration, so maybe merge?

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 4d122eb49b .github: prevent multiple reggies from running from the same branch
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 09055f64ea .github: start bob on push to main
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz c4f16e788d .github: upload resulting Infix image(s) even if tests fail
Add support for uploading resulting image(s) from a job even though the
tests may have failed.   This way we can inspect the image and see what
went wrong, or if it was a glitch in the matrix^W^Wazure.

Retain a symlink to images/ for test step.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 1d3b9e9e0f patches/sysrepo: add support for sysrepoctl -Cfactory -d running
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 812ee32029 test: add basic pc --> bridge-veth-bridge test
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 7555e18996 confd: allow wheel group (admin) to access datastore locally
The admin account is the superuser in Infix.  The root account will soon
only be for running system daemons.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz c00ff6daf5 confd: bootstrap sysrepo+netopeer yang models with factory defaults
To set up proper factory defaults in Infix we need to drop the default
/etc/sysrepo datastores, initialized at compile-time by Buildroot when
installing netopeer2.  The pre-initialized datastores cannot be set up
with new {factory} data in any other way.

The system factory-config is constructed from two parts: static data and
generated data.  The latter is:

 - hostname (product name + the three last octets of the base MAC)
 - interface defaults (depends on number of ports on the device) that
   enable IPv6 link-local on all interfaces, and
 - per-device unique SSH hostkey for remote NETCONF access, requires
   openssl binary on target.  Can maybe use openssh for this (TODO).
   The hostkeys are saved in /cfg/factory.d/ to prevent them from being
   regenerated on every boot.

The script gen-hostkeys and the update of 10-netconf-server.json are
inspired by the netopeer2 scripts merge_hostkey.sh and merge_config.sh,
which do just about the same thing for regular systems.

We bootstrap sysrepo early with all the required models, netopeer2 as
well as our own, by calling sysrepoctl with initial data for {factory}
and {startup} datastores.  A local patch to sysrepo is used to allow it
to look for an /etc/factory-default.json instead of compile-time default
data, the patch allows us to have variable amount of objects in the init
data, e.g. number of interface objects.

A system startup-config is generated, if one is mising, from {running}.

We then drop the initial {running} datastore before starting the daemons
sysrepo-plugind and netopeer2-server so that they, and our plugins, are
ready when we load the system startup-config.

Some sanity checks and debug possibilities:

 - Ensure /etc/sysrepo exists before copying factory-config
 - Keep factory-default.json for debug

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz f19939e405 buildroot: backport sysrepo factory-default init support
Backport upstream sysrepo support for initializing internal modules,
like ietf-netconf-acm, with factory-default data.

A local KernelKit patch on top is required for run-time loading from
/etc/sysrepo/factory-default.json instead of the upsream compile-time
support.

Renamed existing patches to maintain the proper patch order.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 003eedeab8 confd: IP addresses must not be set, or be deleted, when not enabled
The ietf-ip yang model has a global IPv4 and IPv6 'enabled' setting that
must be honored.  E.g., when setting eth0 as a bridge port and disabling
IPv4 address on eth0, we must flush all addresses, including autoconf.
When detaching interface from the bridge and toggling the 'enabled' node
back on, we only get a "replaced" flag for that node, so we must restore
all addresses from the configure data.  The same goes for 'autoconf'.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz d71a3b3db6 confd: add support for "replace" operation
When toggling settings like 'interfaces/interface/ipv6/enabled', which
guards both link-local and all static addresses, the operation is not
"create" or "delete", but "replace".  Callback must take any "replace"
on an 'enabled' node into account since none of the other nodes will
be available in the diff.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 5be4a629f3 confd: add errno codes for out-of-range prio and missing current gen
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 352a1f1f64 confd: refactor, make lydx_is_enabled() available to all modules
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 86304e2656 confd: rudimentary support for Linux bridges
Very limited, only TPMR-style bridge, no VLAN filtering support yet.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 1b7d72a07c confd: add support for veth pairs, incl. new native YANG models
This change adds support for Linux veth pairs and is also a bit of a
cleanup of our native yang models, more on that below.  The interesting
things are the use of submodule(s) for veth, and the addition of the
deviation for the deprecated /if:interfaces-state.

Unfortunately the `fprintf(ip, "link add dev %s down", ifname);` had to
be delagated from netdag_gen_afspec_add() because of this change.  This
because we only know very late that the peer-end of the pair should be
skipped.  Having a lingering `ip link add dev foo down` causes iproute2
to fail hard.

A note about Yang models.  According to RFC they must follow the naming
standard; 'org-name' and use prefixes 'org-shortname'.  So we've decided
to standardize on 'infix-modulename' and 'infix-mn', where 'modulename'
is the standard model we extend, and 'mn' is the prefix used by that
standard model.  For example

 - infix-interfaces extend ietf-interfaces and use infix-if
 - infix-if-veth is a submodule extending infix with veth pairs

Upcoming bridge and lag models follow the same pattern.  The use of
submodules require a patch to sysrepo, included earlier, and allows
us to have the same 'infix-if:', or 'infix-interfaecs:' prefix to
all ietf-interfaces extensions.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 7c17793e5a confd: add support for bookkeeping "skip" interfaces
When setting up veth pairs we only need to set up one end of the pair,
so the confd callback code need a way to remember to skip setting up
the peer interface.

The code added here is generic enough to handle other such transactions.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 491239f99c confd: backport fexistf() from latest libite master
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 50a02e1690 confd: add support for changes in more deeply nested nodes
With the coming support for veth pairs, bridge, and link aggregates, we
need to infer peer interfaces (veth), and similar more deeply nested
data nodes to aid the user.  Thereforce we can no longer rely on the
xpath in the callbacks to always be "interfaces/interface[name='ifnm']".

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz f6e64a52ac confd: minor fixes
- initialize stack variables to prevent undefined behavior
 - memory leak

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 28d07c6255 confd: new function, srx_set_str(), complements srx_set_item()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 6f27e51700 confd: refactor srx_require_module(), patched upstream now works
This changeset includes a patch to the upstream sysrepo that is a slight
refactor of the internal function sr_install_modules_prepare_mod() that
is used by sr_install_module2().  Meaning, the srx_require_module() can
now be simplified greatly and we now also support the include statement
with submodules in yang models.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Joachim WibergandTobias Waldekranz 8462fe4ab6 confd: refactor ietf-system augments and deviations
Initial yang model cleanup:

 - Use infix-foo@rev.yang for augments and deviations of each std-foo model
 - Drop kernelkit-infix-deviations, moved to infix-system model

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-20 11:11:52 +02:00
Jon-Olov VatnandJoachim Wiberg aa372c247e Fixing typos is Infix discovery doc.
Ready for review.

Note for future: Add picture on Infix as Network Infrastructure
equipment in Windows Explorer (SSDP section)
2023-06-16 16:21:14 +02:00
Jon-Olov VatnandJoachim Wiberg ede1f59479 Minor changes to Infix discovery doc 2023-06-16 16:21:14 +02:00
Jon-Olov VatnandJoachim Wiberg 14712fdc91 Add info on Infix discovery services and possibilities 2023-06-16 16:21:14 +02:00
Tobias WaldekranzandJoachim Wiberg 77f9ca8e2a doc/testing: Add an overview of the test system 2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg 4e69f800de test/case: Add meta/wait to wait for nodes to boot up
When running in the cloud, without KVM emulation, together with many
other tenants, it can take a very long time to boot the instances.

Therefore, add a meta test that will wait for all devices in the
physical topology to come up before exiting. This means that the
actual test cases that follow can assume that devices will answer
NETCONF requests.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg aa8e11a58b test/infamy: Create an infamy specific topology object
Create topology objects that are tailored to represent topologies on
the expected format. This let's us make convenient accessors for
things like the controller node, infix devices, getting the ports used
to reach a certain device from another one, etc.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg 175f7e1c58 x86_64: Make the test environment more customizable
- Collect all test related targets under the test- prefix.

- Add target to run test suite against a `make run` instance. The
  intended use-case is that you are testing out a new build with `make
  run`, and then realize that you want to run some tests.  With this
  change, it is now possible to run `make infix-run-check` from a
  separate terminal - which attaches to the running instance and runs
  the tests.

- Provide -sh targets to spawn interactive environments, which is
  useful during debugging.

- Allow the user to supply a custom suite or list of tests to be run
  by 9PM.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg d75ecf3a1e test/env: Improve usage message 2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg c35553b20a test/env: Allow KVM to be explicitly disabled in the container
This let's us check for timing issues in tests that arise when falling
back to TCG acceleration in QEMU.

While we're here, add a proper option to see the usage message.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg d5b5cffa3b test/env: Provide a wrapper for qeneth to the running topology
With this change, when running an interactive test session, a plain
`qeneth status` will show the status for the network started by
test/env.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg bc3933ad92 test/env: Accept an explicit topology in place of a qeneth network
For now, this is only expected to be used with `-C`, i.e. not in a
containerized environment.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg c76233f5ba test/docker: Add debug tools to container
busybox-extras contains an implementation of telnet, which is needed
for `qeneth console` to work. While we're updating, add tcpdump since
we'll need it sooner or later.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg 7eb2269972 test/infamy: Fix incorrect call when bailing out of MACVLAN creation
We're calling the bound instance of __exit__, so `self` is
superfluous.
2023-06-14 17:40:16 +02:00
Richard AlpeandJoachim Wiberg 723c325b0d statd: add limited operational data for all ifaces
Add oper-status and if-index data to sysrepo for every existing
interface. The origin of the data is the "standard" ip tool with
JSON output.

Current implementation is limited to interfaces existing at startup.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-06-13 16:39:53 +02:00
Richard AlpeandJoachim Wiberg 75155b72b3 confd: move helper.c to lib
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-06-13 16:39:53 +02:00
Joachim Wiberg 9e5cf13522 test: debug gh action
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-09 11:54:23 +02:00
Joachim Wiberg 6c9735a783 .github: shorten job title
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-09 11:54:23 +02:00
Joachim Wiberg 3afd84fb1a board: minimal builds provide qeneth compatible .img
Minimal builds should probably trigger use of another template in
Infamy, but for now we use this.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-09 11:54:23 +02:00
Joachim Wiberg 0da9606644 test: infamy: raise exception if dut mgmt ip cannot be found
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-09 11:54:23 +02:00
Joachim Wiberg 4582b3446c .github: drop this job from regular branches and run after merge
We want Reggie to take most of the hits, then we sail in and build after
the PR has been merged so we can upload new "Nightly" images.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-09 11:54:23 +02:00
Joachim Wiberg 72c5e18f5c .github: add dedicated regression job for all actions and branches
- Keep build times low, use minimal defconfig and a single arch
 - Focus on the regression testing
 - Allow running on all branches for all users

Goal: when tests pass, reviews can start, if review is good, then merge

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-09 11:54:23 +02:00
Joachim Wiberg a4c3d7367b configs: add x86_64_minimal_defconfig
The idea for this is to maintain a smallest-possible type build that can
be used to run regression tests in GitHub Actions.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-09 11:54:23 +02:00
Joachim Wiberg c34981cc9f board/common: allow image signing to be optional
Primarily intended for minimal/testing images, but likely also useful
for other use-cases as well.

Defaults remain to sign all images.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-09 11:54:23 +02:00
Tobias WaldekranzandJoachim Wiberg d28b17bdef .github: Run the test suite as part of the CI on x86_64-netconf 2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg 225395f749 x86_64: Add convenience target to run the test suite
Once infix has been built, the test suite can now be run by issuing:

    make infix-check
2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg f26bd54336 test: Add a 9PM compatible test suite to run all tests 2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg 0f76b07625 test: Introduce a standardized test environment 2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg d81ca8fcd1 test: Add qeneth topology for running tests in VMs 2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg 3c0afcdc08 test: Add ietf_interfaces/vlan_ping
Verify that we can communicate with an infix device over a stacked
VLAN interface.
2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg d82da157b6 test: Add ietf_system/hostname 2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg 0fc720d48a test/infamy: Initial add of python based test library 2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg 9bead2fca4 qemu: Generate graphviz description of instance
This will be used to run tests against a `make run` instance.
2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg b3e6325c76 9pm: Generic test anything protocol (TAP) runner and expect wizard
The plan is to leverage this for Infix's internal test suite.
2023-06-08 11:10:31 +02:00
Tobias WaldekranzandJoachim Wiberg 60d2b1f105 test: Remove 9pm console lab
Hopefully we won't have to go down the dark path of console parsing,
but if we do, it's good to have this example in the log.
2023-06-08 11:10:31 +02:00
Richard AlpeandJoachim Wiberg 382f428edf confd: add new statd skeleton for operational status
Add a new "statd" module to sysrepo. This module is intended to handle
operational status, i.e. R/O attributes.

In this state, the statd module only retrieves and answers to the
"oper-state" of "eth0". This will be replaced by proper interface
handling and json data processing in upcoming patches. The indent here
is to get the base logistics in place as soon as possible to make life
easier for developers.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-06-07 13:24:23 +02:00
Richard AlpeandJoachim Wiberg 26391d5381 confd: move srx_module to src/lib
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-06-07 13:24:23 +02:00
Richard AlpeandJoachim Wiberg 84822390ff confd: move lyx source to new src lib directory
Preparation for statd.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-06-07 13:24:23 +02:00
Tobias Waldekranz f6a7fe5353 qemu: Allow qemu.sh to be run from any directory
Since qemu.sh is now tied to the directory it's ran from, it makes
sense to change into that directory before starting to resolve any
file paths. This let's us start the script from any directory without
the need for any (cd && qemu) subshell.
2023-06-05 14:07:02 +02:00
Joachim WibergandTobias Waldekranz fd9d3a2723 board: minor shellsheck fixes
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-05 14:07:02 +02:00
Joachim WibergandTobias Waldekranz f8d5c3a9b8 Drop Infix Qemu support from "make menuconfig"
This change drops Qemu menuconfig from the regular 'make menuconfig' in
favor of full release tarball support.  Meaning "make update-defconfig"
will not longer cause unwanted diffs for Qemu defaults checked in when
the defconfigs are updated.

Details:

 - For "make run, run-menuconfig" and bootstrapping qemu.cfg we want to
   use the Buildroot menuconfig system. However, we must set the proper
   environment variables for it to not overwrite our product's .config,
   so the calls to conf and mconf are not pretty.

 - The qemu.sh script can probably be cleaned up further, I've just set
   a CONFIG_ prefix to all variables and dropped any images/ prefix vs.
   the original.  The CONFIG_ prefix is to make the qemu.cfg compatible
   with kconfig-mconf from the kconfig-frontends package.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-05 14:07:02 +02:00
Joachim WibergandTobias Waldekranz 816cf5c370 qemu: add stand-alone menuconfig support
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-05 14:07:02 +02:00
Joachim WibergandTobias Waldekranz 93701ae2ef qemu: export Qemu start script in release tarball
First basic step, we also want a menuconfig-like way of changing the
settings, e.g., networking options.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-05 14:07:02 +02:00
Richard AlpeandTobias Waldekranz 4fa89651a7 confd: move src into confd subdirectory
This patch is a preparation for the upcoming "statd" addition.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-06-05 13:21:01 +02:00
Joachim WibergandTobias Waldekranz 19df588fe4 package/querierd: bump to version 0.10
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-02 18:19:50 +02:00
Joachim Wiberg 646364a6e0 doc: update README and add doc/cli.md
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-02 15:38:40 +02:00
Joachim Wiberg e6ef11a023 configs: fix string syntax, i.e., s/""/"/g
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-02 14:32:49 +02:00
Joachim WibergandTobias Waldekranz c81bc445ca confd: simplify, yang model ensures iftype (+ ifname) is always set
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 15:16:39 +02:00
Tobias Waldekranz d82e586687 confd: Infer VLAN parameters for the common <BASE>.<VID> pattern
When adding a new interface to the candidate, if the name matches
<BASE>.<VID>, infer that:

- The parent-interface is <BASE>
- The tag-type is c-vlan
- The vlan-id is <VID>

With this in place, from klish, the following sequence:

configure
set interfaces interface e0.10
leave

Will create a stacked VLAN interface, using VID 10, on top of e0.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz a09a1b922f confd: Generalize VLAN support to arbitrary virtual interfaces
- Make sure that when we need to delete an interface, this is done in
  the exit phase of the generation we're exiting, i.e. it is treated
  as a regular delete.

- When we need to delete and rebuild an interface, make sure that all
  settings and addresses are applied again.  This is done by swapping
  out the diff for the configured data, which we just annotate with
  enough metadata to make it look like a diff.

- Create a dagger dependency from the VLAN to it's parent interface.
  This ensures that the parent interface is properly configured before
  the VLAN is created, which is important when virtual interfaces are
  stacked on top of each other. E.g. a VLAN on top of another VLAN.

- Recreate the VLAN when the parent is changed.

- Fix VLAN tag-type parsing
2023-06-01 15:16:39 +02:00
Tobias Waldekranz 361c0d7827 confd: Move interface deletion logic to its own function
Let's try to keep netdag_gen_iface from becoming do_everything().
2023-06-01 15:16:39 +02:00
Tobias Waldekranz 82aa842cd2 confd: srx: Add helper to query the number of items matching a path
This is useful in candidate inference scenarios where you only want
to infer settings that don't have explicit values set.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz 258ba272c7 confd: lyx: Allow diffs of NULL nodes
This makes the pattern

    if (lydx_get_diff(lydx_get_child(diffnode, "attribute"), &nd)) {
        /* Handle changes to "attribute" */
    }

safe to use in the common case where "attribute" has not been
modified, and is therefore not present in `diffnode`.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz 092db20a80 confd: Avoid duplicate nodes in fetched config data
It is not clear why, but the former XPATH will return a tree with many
duplicate nodes in it, while the latter will not.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz a9c5fccd47 dagger: Keep abandoned generations around for debugging
When evolving to a new generation fails, users will typically abandon
it (so that a new attempt can be made).  However, the generated
scripts and the logged output is very valuable from a debugging
perspective.

Therefore, keep the data around by just renaming the generation
directory.

Later, we can include these directories in the garbage collecting
process, if we want to.
2023-06-01 15:16:39 +02:00
Tobias Waldekranz af298a0a05 qemu: Create a gdbserver to UNIX socket bridge
Infix ships with a gdbserver configuration that listens on
/dev/hvc1. Connect this to gdbserver.sock on the host, so that we can
attach to or run Infix processes using GDB.
2023-06-01 15:16:39 +02:00
Joachim WibergandTobias Waldekranz ba382e1af5 src/confd: fix copy-paste check of alloca() return value
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 15:16:39 +02:00
Joachim WibergandTobias Waldekranz 37397543fa src/confd: drop developer debug messages
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 15:16:39 +02:00
Joachim WibergandTobias Waldekranz ee73ed3410 src/confd: add support for VLAN sub-interfaces
This adds support for VLAN sub-interfaces on physical interfaces, e.g.,
eth0.10 on eth0.  There are no restrictions or sanity checks other than
what is defined in the YANG models.

Neither the ietf-if-extensions or the ietf-if-vlan-encapsulation model
have been ratified as standards and are thus experimental.  As such, the
ietf-if-vlan-encapsulation model originally references a non-existing
revision of ieee802-dot1q-types, which has been modified to use the
latest release from IEEE.

How to set up, notice we do not use the l2vlan type:

  interface eth0.10 {
    type ethSubInterface;
    encapsulation {
      dot1q-vlan {
        outer-tag {
          tag-type s-vlan;
          vlan-id 10;
        }
      }
    }
    parent-interface eth0;
    ipv6 {
      autoconf {
        create-global-addresses true;
      }
    }
  }

Unfortunately, we have to create the VLAN interface on a separate line
since adding VLAN interfaces does not allow setting addrgenmode at the
same time, hence the introduction of the new line `link set %s down`.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 15:16:39 +02:00
Joachim WibergandTobias Waldekranz c2fc658734 board/common: relocate and drop unused files from NETCONF build
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 08:23:36 +02:00
Joachim WibergandTobias Waldekranz d449279661 configs: trim default build, drop unused packages
These packages are not (yet) used in the NETCONF build, only make sense
in the Classic Infix builds.  SMCRoute will be needed later on, but not
right now, so also remove.

The dhcpcd package is only used by ifupdown-ng in Classic, in NETCONF we
use avahi-autoipd and udhcpc.

iproute2 is selected by the net tool, so collapsed by menuconfig.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-01 08:23:36 +02:00
Joachim WibergandGitHub 4ad676bb4e .github: also run when PR is merged
https://stackoverflow.com/a/61565445/1708249
2023-05-30 09:00:59 +02:00
Joachim WibergandTobias Waldekranz 8ffe839a99 src/confd: add support for ietf-system user authorized-key(s)
- Keys stored in system specific directory /var/run/sshd/$USER.keys
 - Keys are regenerated on each corresponding reconfiguration event
 - Deletion of key(s) or user remove all keys

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-28 23:31:18 +02:00
Joachim WibergandTobias Waldekranz e7bc7d76e8 src/confd: always run initctl in batch mode
Also, quiet output from cond get.  We're only using the exit code.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-28 23:31:18 +02:00
Joachim WibergandTobias Waldekranz 838a83e5b3 src/confd: fix review issue 'cannot disable dhcp client'
- Flip 'enabled' logic, if attribute is missing => 'enabled: false'
 - Release lease on udhcpc exit
 - Call initctl with -f (force) when deleting dhcp-$iface.conf otherwise
   in interactive mode, waiting for (y/N)? question
 - Also, always use -batch and -quiet modes with initctl

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz 6c8d5472d5 src/confd: finalize initial DHCPv4 with optional client-id support
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz f2cb63df72 src/confd: initial support for DHCPv4 yang model
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz 0e48a847b9 buildroot: bump libyang, sysrepo, and netopeer2 to latest versions
Changes to netopeer2-server required refactoring our foreground patch.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz b319a2df9d src/confd: refactor commit done hook into a pre and post hook
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Joachim WibergandTobias Waldekranz ebc87eb0a0 src/confd: refactor handling of callbacks for SR_DS_CANDIDATE
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-26 15:10:26 +02:00
Tobias WaldekranzandJoachim Wiberg 3424985b2b netconf: Allow IPv6 connections by default in factory-config
By default, netopeer2 will accept connections from
INADDR_ANY (0.0.0.0), which limits it to IPv4. Open it up to include
IPv6 as well.
2023-05-25 16:34:50 +02:00
Tobias WaldekranzandJoachim Wiberg cd52a42388 netconf: Inject NACM config for admin user in factory-config
On May 10, 2023, @troglobit wrote:
> Initial proposal for factory-config, based on example from RFC8341.

This gives the admin user the ability to configure the device over
NETCONF.
2023-05-25 16:34:50 +02:00
Tobias Waldekranz 3dbc59120f confd: srx: Duplicate entire tree in srx_get_diff
Use the _siblings variant to ensure that the full diff tree is
duplicated. Otherwise, the caller would only see the first branch of
changes.
2023-05-25 11:45:10 +02:00
Richard AlpeandJoachim Wiberg 6adb508f37 confd: add new factory user admin:admin
This patch adds a new user "admin" with the password "admin". The
password is hashed with sha512 ($6) as a hint to new users attempting
to change the password (avoid the weakest algorithms).

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-05-25 08:24:31 +02:00
Richard AlpeandJoachim Wiberg f56ca0d0ca confd: fix json merging when generating factory config
jq -s 'add' didn't merge data, i.e.:

hostname.json:
"ietf-system:system": {
  "hostname": { }
}

auth.json:
"ietf-system:system": {
  "authentication": { }
}

Didn't become:
"ietf-system:system": {
  "authentication": { }
  "hostname": { }
}

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-05-25 08:24:31 +02:00
Joachim Wiberg d4333e1a8d src/confd: fix ietf-interfaces copy-paste bug in netdat_init()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 11:20:09 +02:00
Joachim WibergandTobias Waldekranz 96fb836635 Add disclaimer about Frr and podman in Hybrid Mode section
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:52:16 +02:00
Joachim WibergandTobias Waldekranz 4c15897c6a Fix #29: drop FRR from default builds
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:52:16 +02:00
Joachim WibergandTobias Waldekranz 9844f0e148 configs: enable CA certificates package for all defconfigs
Provided a little time, all an embedded system really needs is trust.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:52:16 +02:00
Joachim WibergandTobias Waldekranz 0a99f1a5f6 board/common: drop factory/reset user
Initial analysis of system default users gives that there is no real
need for a default 'factory' user to trigger a factory reset.  On an
actual physical device we will have a reset button or a menu option in
the bootloader to trigger factory reset, and in both physical and
virtual (GNS3) devices a logged in admin user can call the factory
command.

A virtual device that cannot be logged in to will have to be removed and
have its persistent backing store deleted, but that is the only real
downside to removing this user.  The idea is to set a kernel command
line flag from the bootloader, and that could also be done from, e.g.,
GNS3.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:51:37 +02:00
Joachim WibergandTobias Waldekranz 08ad4e9bc6 Fix #24: disable bridge firewalling by default in Infix
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-23 08:48:47 +02:00
Joachim WibergandTobias Waldekranz d8b24e16de doc: new document, Containers in Infix (with podman & CNI)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 8addf469bf package/podman: add tool to create CNI profiles
Currently only supports creating host-device profiles, e.g. from veth
pairs or physical interfaces.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 679d64d496 Update Hybrid Mode with podman example to start Docker containers
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 56677fb1d6 package/podman: helper script to create supervised Finit service
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz b3761d84dc board: update kernel defconfigs for running containers (podman)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 852f1ed4c4 board/common: bind mount /var and /var/lib
The /var, and particularly /var/lib, directories are used for persistent
storage for various system daemons.  While adding support for containers
it became clear we had to change how we make these directories writable.
Both LXC and Podman use OverlayFS for the writable layer, and you cannot
set up an overlay on top of another overlay.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz bd696cba9a qemu: add support for optional /var disk (256M)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 468b49e916 buildroot: bump to v2023.02.1 w/ kkit patches
- package/libyang: Bump version to 2.1.55
 - package/netopeer2: Bump version to 2.1.59
 - package/sysrepo: Bump version to 2.2.60
 - package/cni-plugins: partial backport to enable missing plugins

The libite v2.5.3 backport has been dropped from the kkit patches
since it's been merged in upstream Buildroot LTS branch.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 65d170985c package/podman: new package
Podman (POD manager) is an open source tool for developing, managing,
and running containers on your Linux systems.

Based on work by Christian Stewart and Nathaniel Husted.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Joachim WibergandTobias Waldekranz 1624c88708 package/conmon: new package
Conmon is an OCI container runtime monitor.  It sits between container
runtimes, e.g., crun and runc, and userland managers, e.g., podman.

Based on work by Christian Stewart and Nathaniel Husted.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-21 20:39:12 +02:00
Richard AlpeandJoachim Wiberg 08a3f51e8f test: add functional example of how to test CLI auth
This test is based on the 9pm framework, which supports execution
of test-cases written in any language. This test is written in
tcl/expect with help from the 9pm expect library. It's what I used to
test during development of the Infix basic authentication support.

The aim of this patch is to serve as an example of how the
interactiveness of the 9pm-expect library can be used.

9pm framework code is here:
https://github.com/rical/9pm

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-05-16 13:34:28 +02:00
Joachim Wiberg 8aed30552f package/finit: bump for Finit v4.4 (GA)
Full release notes: https://github.com/troglobit/finit/releases/tag/4.4

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-15 19:17:23 +02:00
Joachim Wiberg 8ab2f5f9da src/confd: system users, like admin, have no shell by default
Rudimentary support for setting login shell for new users.  Currently
hard-coded from what's selected in the Buildroot config, if Bash is
available or not.

Follow-up to f5866ee

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-15 18:45:37 +02:00
Joachim Wiberg 50963a7883 src/confd: fix regression in ietf-system:motd and ietf-system:clock
The writesf() API was hard coded to always open files in "r+" mode,
which fails if the file doesn't exist.

Add a mode option to writesf() and writedf().

Also, drop the default motd, we don't have one in NETCONF mode.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-15 16:05:08 +02:00
Joachim Wiberg 23dc3fcb4f qemu: change console to hvc0, ensure TTY is saved and restored
This change drops -nographic in favor of the more flexible virtconsole,
fixing the problem with loss of terminal history and reset.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-15 16:05:08 +02:00
Joachim Wiberg 480d870587 src/confd: harmonize ietf-system, rename infix-system.yang augment
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-15 16:05:08 +02:00
Joachim Wiberg f5866ee3d4 Add support for admin/admin to manage Infix as group 'wheel'
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-15 12:53:32 +02:00
Tobias WaldekranzandJoachim Wiberg 304e65e298 confd: ietf-interfaces: Handle attribute deletions properly
When deleting a value, the old value is in nd.val, so use the absence
of a new value to catch deletions.
2023-05-15 12:17:10 +02:00
Tobias WaldekranzandJoachim Wiberg 9d5a1d893c confd: lyx: Return the modified-from-default value from the diff
I.e. return the answer to the question "has this attributes changed
from the last config generation?" Which is always what we want to know
anyway.
2023-05-15 12:17:10 +02:00
Tobias WaldekranzandJoachim Wiberg 7491c280ac confd: Reload finit after the exit phase, if services are disabled
Bringing down the current generation is a step of its own, so it makes
sense to let finit clear out all old services before setting up the
new ones.

For example, with avahi-autoipd, without this step, we would run the
following sequence when disabling it on an interface:

initctl disable zeroconf@iface
ip link set dev iface down
ip link set dev iface up
initctl reload

But we really want to stop the zeroconf service before the down/up
cycle on the interface, since that is likely to disrupt the
daemon. With this additional step, the sequence becomes:

initctl disable zeroconf@iface
initctl reload
ip link set dev iface down
ip link set dev iface up
initctl reload

Which means that finit won't try to restart zeroconf if it dies during
the down/up cycle, since the service is already gone at that point.
2023-05-15 12:17:10 +02:00
Tobias WaldekranzandJoachim Wiberg 5b261cff2d dagger: Add pre and post hooks for actions
The special directories @pre and @post will always have their scripts
ran before and after, respectively, the rest of the DAG.
2023-05-15 12:17:10 +02:00
Joachim Wiberg b2191d0c20 package/finit: bump for 4.4-rc2 + kill process group fix
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-14 09:37:49 +02:00
Joachim WibergandTobias Waldekranz 3b3cadd72d src/confd: simplify after review comments from wkz
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-12 15:58:20 +02:00
Joachim WibergandTobias Waldekranz c98a99df58 src/confd: use global hook also for core_startup_save()
Saving running to startup follows the same pattern as config update of
candidate to running, so we must employ the same hook mechanism here.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-12 15:58:20 +02:00
Joachim WibergandTobias Waldekranz 688e196347 src/confd: consistent whitespace
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-12 15:58:20 +02:00
Joachim WibergandTobias Waldekranz 36f38d6198 src/confd: global event hook support
Refactor register_change() wrapper, for sr_module_change_subscribe(),
with an additional twist of setting up a commit DONE event catcher.

This creates a global event hook that ensures we call 'initctl reload'
after all module callbacks have completed, regardless of the xpath and
without having to have "shadow" subscriptions to all new modules being
added to confd.

Based on on ideas from https://github.com/sysrepo/sysrepo/issues/2188

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-12 15:58:20 +02:00
Tobias WaldekranzandJoachim Wiberg 580bcf5115 confd: Support controlling IP forwarding on interfaces 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg a1183780d1 sysctl: Disable forwarding by default on netconf builds
This matches the defaults in ietf-ip.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 0d09c4e16a confd: Use regular errnos internally when generation iface config
This:
1. Makes the code more familiar and easy to read
2. Let's us output more precise error messages
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg a07910f51f confd: Simplify code with the lyx diff helpers 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg fa311c699b sysctl: Keep static IPv6 addresses on downed interfaces 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 32f6f22b47 common: Use IPv4/6 default configuration on all interfaces
The comment in the script has the story.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg c2042bb036 confd: ietf-interfaces: Add IPv4/6 autoconf support 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 82d11112a6 avahi-autoipd: Default to always assigning a LL address
Without --force-bind, the address is removed if another routable
address is added to the interface.

While this is likely something that should be configurable in the
future, we choose this mode as the default so that IPs used for
NETCONF connections are not dropped because other addresses are added.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 5e23b2ac79 confd: dagger: Explicitly choose order for init/exit actions
Dagger's builtin fallback to bottom-up works for init, but exit should
run top-down.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 580c5b06b9 confd: lyx: Add helpers to classify the modification of a node 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg cc15adb774 confd: Move from net-do to dagger for managing config generations 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 3342270e18 dagger: Directed Acyclic Graph Generational Execution Runner
A generic replacement for src/net with some advantages:

- Shell script is well-suited to these kinds of tasks, making this
  implementation much simpler.

- Allow arbitrary number of actions (not just init/exit), this can be
  used to implement things like `dagger exec up/down`.

- Allow arbitrary number of scripts for each action/node tuple. This
  will let us handle more complex scenarios in confd without having to
  fiddle about with src/net.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 8df758dac0 confd: Add support for static IPv4/6 address configuration 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 88c845bc16 confd: Disable support for non-contiguous netmasks
Not something we need, and keeping it disabled has some nice symmetry
effects on the handling of ipv4/6 addresses.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 3192a69970 confd: ietf-interfaces: Initial work on net-do implementation 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg a5b4c04d08 confd: Add helper to get the diff being applied as a libyang tree 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 6e39b3dbf6 confd: Add helpers to find attributes belonging to a lyd_node
This avoids awkward XPath lookups when the structure of the lyd is
known.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 35ec76b0ef confd: Add helpers to read files containing a single number 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 751b22f4db confd: Avoid futile attempts to reload finit's config during boot
finit is not ready to accept the messages anyway, so we end up waiting
for the 2s timeout (2 times). Since finit won't setup a utmp entry
until it leaves runlevel S, we use that as the sync point for when
finit is ready to receive reloads.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 3ae4e1d9ca confd: Use printf attribute on relevant helpers
This let's the compiler catch format-specifier-to-argument mismatches.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 31d5dbda8c confd: Split out libyang extensions to separate file 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg a79c6ec06c confd: Remove temporary interface configuration
This will be replaced by the "net do" implementation
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 03e44dd5b1 confd: Dynamically generate factory-config
This allows you to define a single "logical" config that can be
tailored to the specific system based on the available interfaces,
base MAC address etc.
2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg 80d9312e36 confd: Infer type when configuring physical interfaces 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg ed41b621d9 confd: Fix -Wformat-security warning 2023-05-12 14:24:41 +02:00
Tobias WaldekranzandJoachim Wiberg f40841e5e7 confd: Consistently use srx_require_modules
This allows confd to start without errors when modules are already
loaded.
2023-05-12 14:24:41 +02:00
Richard AlpeandJoachim Wiberg def761b067 src/confd: add basic user authentication support
This patch introduces basic user authentication support via sysrepo.

Namely it adds:
* The ability to create or delete a UNIX user.
* The ability to set or delete a UNIX user password.

The password needs to be hashed and in a UNIX shadow format, such as
"$ALG$SALT$HASH". We want to avoid the handling of clear text
passwords as much as possible. In the meanwhile, passwords
can be generated in the infix shell using mkpasswd.

CLI Examples:

Add a user:
configure> set system authentication user foo

Delete a user:
configure> delete system authentication user foo

Set a user password:
configure> set system authentication user foo password ...

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-05-10 09:50:53 +02:00
Richard AlpeandJoachim Wiberg 53ad138854 sys/confd: expose systemv functions in new header
Expose systemv() and systemv_silent() to confd code that includes
core.h or systemv.h explicitly.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-05-10 09:50:53 +02:00
Joachim Wiberg e7e22c4a13 package/finit: bump for fixes to 'initctl enable' regression
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-05 06:04:45 +02:00
Joachim Wiberg 28f8f36cca Enable runparts support at bootstrap for hybrid systems
This commit enables support for running custom startup scripts at boot,
allowing a mix of a NETCONF-based system and Classic /etc.  For example,
use NETCONF to set up network interfaces, users, etc. and runparts for
enabling and configuring the device as an OSPF router.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-05 06:04:45 +02:00
Henrik NordstromandJoachim Wiberg 7db1581b21 linux aarch64: Enable CPU_THERMAL 2023-05-02 10:52:43 +02:00
Joachim Wiberg f19d1fc06f package/skeleton-init-finit: take "new" runlevel 0 into account
Some critical services must never be stopped, and with the unfortunate
separation of runlevel S and 0 in Finit recently, all affected service
definitions must be updated.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-05-02 00:00:04 +02:00
Joachim Wiberg 941a2d85aa src/confd: system() replacement without /bin/sh intermediary
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-30 19:49:27 +02:00
Joachim Wiberg 60fa170bee board/common: for consistency, preserve x86_64 even in filenames
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-29 12:47:30 +02:00
Joachim Wiberg d69109305c .github: store symlinks as files
For each build there is an infix-$ARCH-$VARIANT.img -> rootfs.squash
that we want to be a real file when extracting it.  This to ease the
integration with testing frameworks like Qeneth.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-29 12:18:38 +02:00
Joachim Wiberg da014804a6 patches/lldpd: allow group wheel to use lldpctl
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-28 20:40:20 +02:00
Joachim Wiberg 6d96b218ca board/classic: generate interfaces.d, set hostname from qemu_fw_cfg
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-28 19:43:06 +02:00
Joachim Wiberg 806a0293a5 board/common: allow /bin/bash as login shell (BusyBox symlink)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-28 19:00:51 +02:00
Joachim Wiberg 5e15d85ff9 board/common: artifact naming overhaul
With the introduction of the -classic defconfigs we need to also make
sure to name the resulting artifacts accordingly:

 - infix-$ARCH.{gns3a,img,pkg}
 - infix-$ARCH-classic.{gns3a,img,pkg}

For release builds the version (-23.02-$REV) will be appended before
the file suffix, e.g., infix-x86-64-classic-23.02-3.img

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-28 18:18:16 +02:00
Joachim Wiberg 42dbc1feee configs: follow-up to 5d7e6bd, path to grub-embed.cfg has changed
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-28 11:47:56 +02:00
Joachim WibergandTobias Waldekranz daa67f94c1 board/netconf: add missing (empty) rootfs overlay
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz ff7faada00 .github: fix .ccache caching
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz f515d8e737 .github: update to bild all platform::variant defconfigs
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 5b02ab80e9 configs: add aarch64_classic_defconfig, same as x86_64_classic
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 2272b56618 board/common: let Bash update its PS1 hostname for each new line
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 05d49f6cfc src/confd: set NETCONF specific motd as default
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 8158d3bffb Simplify and refine NETCONF and Classic build variants
- board/common: drop everything not needed by NETCONF mode
 - board/classic: most board/common helpers relocated here
 - Simplify Finit scripts for critical services
 - Source variant from /etc/os-release to select ramdisk /etc

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 5d7e6bd693 Rename amd64 -> x86_64 and native -> classic
A long standing internal debate comes to its logical conclusion.  Arch
naming should follow GCC.  The "native /etc" has also found a better
name: classic!

README and GitHub action has been updated accordingly.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz de85e4e4e0 configs: netconf build requires 512 MiB RAM and we want 10 ifaces
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 3caaada051 board/common: add menuconfig support for GNS3 RAM and num. of ifaces
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz ce10e4b734 board/common: add missing $DISK_IMAGE_SIZE to mkdisk.sh
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 291bfaeff0 board/common: fix system timezone in "show system-information" command
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 9462499d51 configs: split defconfigs in default (NETCONF) and simplificed (native)
- Drop unused packages in NETCONF (default) mode
   In the default build we will use the net tool instead of iupdown-ng,
   p-net & Profeth will move to customer-specifc builds with another
   licensing model.
 - Split out NETCONF specific parts from board/common to board/netconf

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 3cea71a11f configs/amd64_minimal_defconfig: simplified basic Linux build
This build is intended as a base reference and for use as a very simple
end device.  The default starts DHCP and IPv4LL (ZeroConf) on eth0, but
can be configured by editing /etc/network/interfaces.d/*

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 65afece50a package/confd: update factory-config, zeroconf for IPv4/IPv6 on eth0
Still ways to go here, eth0 should be in a bridge with a vlan1 interface
on top, which in turn should have this config.  But let's start here, it
works! :-)

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 0fffb1296f package/confd: allow avahi (mDNS/SD) and sshd to be enabled by default
The idea is to, as a plain Infix default, start up devices with DHCP and
IPv4LL/ZeroConf and IPv6 link-local address.  Using mDNS the user can
then and push a NETCONF configuration over SSH.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 7dde00c6b0 package/confd: rename factory.cfg -> factory-config.cfg
Consistent naming to match startup-config.cfg and running-config.cfg

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 461599e502 src/confd: hackish w/a to get 'initctl reload' for ietf-interfaces
This is very ugly, what we really want is that the commit_done_hook()
runs when *all* DONE events have been processed in all models.  The
side-effect of this hack is that the callback is run twice, both for
ietf-systm and ietf-interfaces if both are modified.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 8b9504ffa5 src/confd: augment ietf-ip with an 'autoconf' setting also for IPv4
This patch adds a first Infix model to augment ietf-ip with a node,
similar to the IPv6 'autoconf' node, also for IPv4.  For IPv6 the
autoconf feature comes built-in, for IPv4 it is defined in RFC3927.

The setting behaves the same as for IPv6, but in the case of IPv4 we
enable avahi-autoipd per interface to acquire the 169.254/16 address.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz ae62c20d40 src/confd: minor, spellcheck
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 85f67f6a0f configs: enable avahi-autoipd for use as ZeroConf agent
With the new templating support in Finit, and this patch, we can now
very easily enable a ZeroConf service on, e.g., eth0:

    $ initctl enable zeroconf@eth0

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 78c12d66fe patches/klish: allow all users of group 'wheel' to connect to klishd
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 33d1b9cfc5 board/common: drop clicon + www-data users, add default admin user
The root user is by default not allowed to log in over SSH, so we add an
admin user with limited root privileges for this purpose.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz cb9d981dfc board/common: replace sshd subsystem cli with klish
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz e789738a64 package/finit: bump for S vs 0 runlevel fixes and templating support
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Joachim WibergandTobias Waldekranz 3cd3d04bae package/skeleton-init-finit: fix make skeleton-init-finit-rebuild
When calling 'make skeleton-init-finit-rebuild' to (re)install any new
or modified services, we cannot remove everything installed already.
That breaks what other packages may have installed already and is not
the Buildroot way.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-27 09:59:35 +02:00
Tobias WaldekranzandJoachim Wiberg dcf3c5fe97 confd: Infer the interface type for common patterns
When a new interface is create, but the type is not specified, try to
infer the type from the interface name.
2023-04-21 19:03:15 +02:00
Tobias WaldekranzandJoachim Wiberg 54200eaba9 confd: Add wrapper for sr_set_item
This allows the xpath to be built using format string.
2023-04-21 19:03:15 +02:00
Tobias WaldekranzandJoachim Wiberg 2259e108e4 confd: Rename srx_set_item -> lydx_new_path
Since this function wraps lyd_new_path.

This allows us to write a wrapper for sr_set_item, using the expected
name.
2023-04-21 19:03:15 +02:00
Tobias WaldekranzandJoachim Wiberg 69d6bc6942 confd: Fix some build warnings 2023-04-21 19:03:15 +02:00
Tobias WaldekranzandJoachim Wiberg 62e4a733d0 confd: Honor CFLAGS coming in from configure
This makes it easy to create unoptimized debug builds, for example.
2023-04-21 19:03:15 +02:00
Tobias WaldekranzandJoachim Wiberg 7afc650bcf confd: Fix use of uninitialized value 2023-04-21 19:03:15 +02:00
Tobias WaldekranzandJoachim Wiberg 9969987347 confd: Skip extraneous calls to sr_unsubscribe
core.c will always take care of this if any initialization fails.
2023-04-21 19:03:15 +02:00
Joachim WibergandTobias Waldekranz 81c7939a0d src/net: update docs with new admin-state control file
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz dd96583ce2 package/net: depends also on iproute2
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz cd00a3d2be package/net: new package
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 8a73c31f91 package/confd: update package dependencies
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 64804bee5d src/net: add missing deps when moving between generations
The init_next_gen() function moves us to the next generation, as well as
intialize all data files for expected interfaces in that generation.

However, bridge and lag interfaces have dependendcies that need to be
moved as well.  It is only the test author that knows the expected new
state, so this function only sets up the desired state, without ever
looking at what any previous generation looked like.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 1c99e92312 src/net: finalize bridge-lag.sh test, add step remove; vlan1 and br0
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 3edd4c7dff src/net: let init_next_gen init new generation with ifaces
The (optional) interface list represent the expected state in the new
generation.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz c99b5c659a src/net: add test to verify moving port from lag to bridge
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 61c5724da7 src/net: update basic bridge test with new create_bridge() API
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz afb82a52e4 src/net: test; factor out state file creation from create_iface()
With more advanced interface types we cannot use create_iface() to set
up the file structure in new generations.  This commit adds a _data()
function that should be used instead.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 19ed88ac9e src/net: silence noisy "skipping" debug logs for missing scripts
Not really needed unless you're doing changes to the net tool itself.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 9aeb35c73b src/net: rename helper fn create_ng -> init_next_gen
This function is responsible for initializing the necessary files for
the next net generation.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 4c7813f996 src/net: new test, advanced bridge with lag and a top VLAN interface
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 7945207989 src/net: fix interface creation/attach order in generation generator
The net tool traverses the graph and executes the scripts et al in
postorder, i.e., all leaves are evaluated first before the parent's
script is run.  Hence, attaching ports to a bridge or link aggregate
is the responsibility of the parent, not the leaves.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 45c6b704f9 src/net: must close each pipe before exectuing the next pipe action
For instance, when adding ip command to the ip pipe we need the kernel
to execute those commands before the bridge command pipe is executed.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 2de8ff052d src/net: factor out pipe identification and debug each piped command
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz e6834c5db6 src/net: new test, basic bridge
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz a26dd9c19f src/net: install tests to target /usr/share/net
Host tools and target are often out of sync, sometimes because we need
to run a newer version of iproute2 with more features.  By installing
tests to target we can still verify basic functionality, provided the
tests verify their dependencies and exit 77 (SKIP).

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz f84b4803d9 src/net: fix bugs in 'net up|down' uncovered by first test
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 48fba80baf src/net: finalize first test, three indep ifaces in two generations
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 6b3eaa05e5 src/net: refactor test into lib.sh and <test>.sh
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz f180bcae24 src/net: convert to GNU Configure & Build system
- Simplify build process, including cross compilation
 - Add basic test framework, available as `make check`

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz da56f8d653 src/net: first automated test case, run with unshare
Run with unshare, as so:

    make clean; make; cd test/
    unshare -mrun ./three-independent.sh

This sets up a test directory in /tmp/net, creates three independtent
interface configs for dummy interfaces.  Activates the config with a
call to `net -vd apply`, and then verifies the result using a mix of
ip link/addr and jq magic.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 0f337a4b13 src/net: increased debugging of basics
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz ad1c3fb777 src/net: 'do' is a reserved keyword in shell scripts add 'apply' too
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 0ec3448858 src/net: refactor, reuse existing linked list also for 'do' command
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 997e536081 src/net: add support for acting as a multicall binary (ifup/ifdown)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 75a1b231da src/net: add commands; do, up/down with optional ifname(s)
Calling net prevsiouly meant `net do`, the new separation is to be able
to add `net up` and `net down` commands, with optional interface args.

The idea is to support the same semantics as `ifup -a` of `ifup foo`.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 32db1fe3d0 src/net: refactor filtering of forbidden names
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz f2472d6474 src/net: minor cleanup
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz a80a8eeee5 src/net: fix bug in savedep(), trashed interface path argument
This caused the critical run() function to run action scripts properly.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 9a895dcd47 src/net: fix bug in test, lag0 remains a dep for br0 even in gen 1
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 6eb6324477 src/net: rename action scripts as per review
Naming the actions after their executing entity, e.g., foo.sh when it is
executed by /bin/sh, is a tried and true paradigm.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 47c3448774 src/net: calculate and run teardown in reverse dependency order
When taking down a network setup, it needs to be deconstructed using the
foo.exit rules of the previous generation, and in reverse dependency
order.

This patch adds support for generating the deps when bringing up the
network setup, and saving an rdeps file in that generation, which can
be used later when moving leafs between nodes.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz 0f7d931541 src/net: new test, also drop lo and use same interfaces as in figure
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Joachim WibergandTobias Waldekranz a2fbc9e2f8 src/net: ovarhaul script naming ip-link.up/ip-addr.up -> ip.init etc
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-20 21:14:54 +02:00
Tobias WaldekranzandJoachim Wiberg 09751fdd96 x86_64: Harmonize GRUB's behavior with that of U-Boot
This means that:

- The full boot order is now respected, using the magic "fallback"
  varible in GRUB. This means that if an entry fails to load, we move
  on to the next one in the defined order.

- Netbooting is supported. In this mode, GRUB will acquire an IP
  address using DHCP, after which it downloads an image using TFTP.

- If we run out of valid entries, we always make sure to reboot. This
  ensures that, e.g., a temporary TFTP server outage does not cause an
  Infix device to get stuck in GRUB.

At the moment, the image handling is excruciatingly inefficient when
netbooting, as the image is downloaded multiple times behind the
scenes. Ideally, downloads would be cached, but a quick investigation
indicates that an implementation of this would take more time than we
can spare at the moment. Therefore, we settle for the working, though
wasteful, implementation.
2023-04-19 10:47:54 +02:00
Joachim Wiberg b7058b2d6c board/common: enable ipv4 and ipv6 global forwarding flag by default
The per-interface and per-af setting in the ietf-ip yang module allow
the user to enable a more granular forwarding between interfaces, which
is disabled by default.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 23cf9df856 Follow-up to 7e089ee: convert to kernel modules, use /etc/modprobe.d
Instead of having to rely on the kernel command line, we convert all the
kernel functionality in question into modules and rely on the auto-load
feature in the kernel and modprobe to add options at load time.

The fb_tunnels setting is a net core setting, for that we use sysctl.

This commit also syncs the kernel config between our two main archs,
disabling DRM and SOUND for the Amd64 build as a spin-off.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg dfda11f9ce Follow-up to 025a877, import new iana-if-type version
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 15010acc3a src/confd: set default loopback addresses
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 4f09f2b51e src/confd: refactor, simplify ietf-system:system-state
We now have our own srx_set_item() that hides a lot of the complexity.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 5bc7dd443f qemu: disable bond0, dummy0, sit0, erspan0, etc. fallback interfaces
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg a8227a3ab9 src/confd: standardize on 'fail:' as cleanup label on failure
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 4fe6a2aba7 src/confd: initial operational data support for ietf-interfaces
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 5fe77fdbee src/confd: add missing free() of data from lyd_print_mem()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 34d8cf2fdb src/confd: add missing calls to release context in ieft-system
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg a061242119 src/confd: minor refactor, add convenience macro REGISTER_OPER()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg f080ebd341 src/confd: add support for ipv6 in ietf-interfaces
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 36d4e1b92b src/confd: refactor srx_val.c to use sr_get_items() to silence log
Calling sr_get_time() for an xpath that has no data causes sysrepo to
always log the access as an error.  With sr_get_items() it is left to
the callee to determine if the missing data should cause an error.

This patch is a refactor that silences the syslog message and also
fixes one or tow memory leaks.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg fdb8e56461 src/confd: fix invalid xpath, 'enabled' not available per address
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg abe8ecb3d3 src/confd: fix invalid use of fopenf() in write*f() wrappers
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg dabfe7bc20 src/confd: drop developer debug messages
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 2e73d643ed src/confd: add support for ietf-ip:ipv4/forwarding
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg a7306d0c06 src/confd: refactor, add first file function helper: writesf()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 8296f75893 src/confd: optionally use netmask instead of prefix-length
Some users still prefer the old netmask style to set up an interface.
This patch enables the corresponding model feature and checks for a
netmask only if prefix-length is unset.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg ac0b0d520f src/confd: refactor srx_get_bool() to create srx_enabled()
All value functions, except the new srx_enabled(), now return clear
error indication, with the value as a separate argument.

The srx_enabled() predicate function is for cases where the default
value is disabled and code checks enable a subsystem or flag.  I.e.,
when an error can safely be returned as 'false'.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 63bc767593 src/confd: refactor sr_get_int() into a generic srx_get_int()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 9882309adf src/confd: rename sr_ext.[ch] -> srx_module.[ch]
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg eaedae4ccb src/confd: draft ietf-interfaces prototype to set static IP address
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg ce5ff75c9c src/confd: refactor sr_get_bool() into srx_get_bool()
Note: new API, srx_get_bool() returns -1 on error, leaving 0 and 1 as
false and true, respectively.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 4654e169a5 src/confd: replace local run() function with systemf() from libite
It started its life as a copy of systemf() anyway, time to clean up.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg c838977f91 src/confd: unlock -lite API, e.g. fopenf(), systemf(), etc.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg f28a19c9ea src/confd: minor, rename local var for consistency
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 12f72c5e5f src/confd: refactor helper fns to new namespace
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg ede544257f src/confd: add missing header
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg cfba783f1c src/confd: minor, drop trailing / from YANG_PATH_
Prevent // in new srx_require_module() when composing module PATH.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 6ff3d15b0b src/confd: add SPDX license identifier to new files
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg c74f76cdee src/confd: minor, use more common fmt rather than frmt
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Joachim Wiberg 6a73a3fcc2 src/confd: minor, fix iana-if-type revision
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-17 14:09:24 +02:00
Tobias WaldekranzandJoachim Wiberg 1bd66003ae confd: if: Ensure that the required modules are loaded 2023-04-17 14:09:24 +02:00
Tobias WaldekranzandJoachim Wiberg a7fcdc8f4a confd: Add helper to ensure that required modules are loaded
Unfortunately, sysrepo considers it an error to load a module that is
already loaded, ruling out using `sr_install_modules`.

Therefore, provide `require_modules` instead, which ensures that a
given set of modules are loaded, or loads them otherwise.
2023-04-17 14:09:24 +02:00
Tobias WaldekranzandJoachim Wiberg db804eb9d0 confd: Allow usage of asprintf 2023-04-17 14:09:24 +02:00
Joachim WibergandTobias Waldekranz 95a4b43091 configs: drop currently unused packages to save build time + size
Things we really want later, but don't use right now:

 - MRP
 - MSTP

Neat to have in a networking product, but not used at all by us atm:

 - ttyd
 - tmux

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-13 12:22:29 +02:00
Joachim WibergandTobias Waldekranz 3217722c36 Update, Clixon has been replaced by sysrepo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-13 12:22:29 +02:00
Joachim WibergandTobias Waldekranz 4e4b6f2a7b package/{ifupdown2,python-templating}: drop unused packages, replaced by ifupdown-ng
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-13 12:22:29 +02:00
Joachim WibergandTobias Waldekranz 4d835ff808 package/{sysrepo*,umgmt}: drop unused packages, replaced by confd
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-13 12:22:29 +02:00
Joachim WibergandTobias Waldekranz 73892ea6f0 package/cli*: drop cligen and clixon after migration to sysrepo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-13 12:22:29 +02:00
Joachim WibergandTobias Waldekranz 41b17fc64d package/mech: drop, unused after migration to sysrepo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-13 12:22:29 +02:00
Joachim WibergandTobias Waldekranz e9757ac3ef .github: run action on approved PR or if started manually
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-13 11:12:09 +02:00
Joachim WibergandTobias Waldekranz 1ebdf05371 .github: only allow upload of latest build from main repo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-13 11:12:09 +02:00
Tobias Waldekranz f2aaf4a558 Merge branch 'sysrepo' 2023-04-13 10:21:23 +02:00
Tobias Waldekranz e9c4bafb4c confd: Treat all build warnings as errors
We exclude unused parameters, since many callbacks have parameters
that we're not interested in.
2023-04-13 09:30:43 +02:00
Tobias Waldekranz f5259b32d8 confd: Kill all -Wall -Wextra warnings 2023-04-13 09:30:43 +02:00
Tobias Waldekranz 3320175abd confd: Fix symbol redefinition error 2023-04-13 09:27:36 +02:00
Richard AlpeandJoachim Wiberg 02ac6a7ea7 src/confd: add the ability to change MotD in cli
Add the ability to set and delete system MotD (Message Of The Day)
using the cli.

This patch augments the standard ietf-system yang schema with
a new infix-system schema which contains a new motd leaf.

The default value is hard coded in two places, confd and the rootfs
file /etc/motd. The intention is to fix this in upcoming patches.

Introduces:
exec> configure> set system motd STRING
exec> configure> delete system motd
2023-04-12 16:51:08 +02:00
Joachim Wiberg 22a18f3e61 src/confd: skeleton for ietf-interfaces
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-12 09:22:50 +02:00
Joachim Wiberg 015f1b7a87 package/finit: add support for setting RTC plugin fallback datetime
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-10 16:36:32 +02:00
Joachim Wiberg 82c8423cea src/net: fixes after spec. audit by wkz
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-08 10:53:44 +02:00
Joachim Wiberg caa07e8b20 Drop local libite patches in favor of libite v2.5.3
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-08 07:18:46 +02:00
Joachim WibergandGitHub e9a49ac546 Merge pull request #6 from hno-addiva/fix/crb_defconfig
cn9130_crb_boot: Add required host tools for build

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-06 15:45:28 +02:00
Joachim WibergandGitHub 530adeaf53 Merge pull request #5 from hno-addiva/fix/binutils-2.9
Patch for building ARM TF-A with binutils-2.39+

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-06 15:44:46 +02:00
Henrik Nordstrom dc8f1c344e cn9130_crb_boot: Add required host tools for build 2023-04-06 15:44:17 +02:00
Henrik Nordstrom a410c38c0f Patch for ARM TF-A with binutils-2.39+
Adopted from https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/19401/4/Makefile
2023-04-06 15:35:50 +02:00
Joachim WibergandGitHub 2bdb910db8 Merge pull request #3 from hno-addiva/main
Set buildroot branch name

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-06 14:53:46 +02:00
Henrik Nordstrom 64c3fdc5b1 Set buildroot branch name
allows "submodule update --remote" to refresh to current version
2023-04-06 14:31:04 +02:00
Joachim Wiberg 8f1f74263d src/net: first prototype
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-05 16:08:07 +02:00
Joachim Wiberg 2943922b4c configs: add dosfstools and mtools for disk image generation + gns3
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-04 15:11:55 +02:00
Joachim Wiberg 2ba8612f7f src/confd: add commit_done_hook() to call initctl reload
This is needed to confirm the new system configuration generation and
reload all affected services.  E.g., when configuring an NTP server
and committing the candidate to running, the ietf-system plugin has
only enabled the service, as a last step we need to tell Finit to
actually start it.

This hook needs to run last since the enabled service(s) may depend on
other service(s), or networking, to be enabled in the proper order.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 20:35:55 +02:00
Joachim Wiberg 59d5340eae src/confd: mark missing yang support with XXX
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 19:33:37 +02:00
Joachim Wiberg 69920cb230 src/confd: add support for /ietf-system:system/dns-resolver
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 19:31:34 +02:00
Joachim Wiberg 42281378f8 src/confd: new function, sr_get_int()
Really ugly handling here, needs to be reworked into sr_uint8() etc.,
adding as-is for big upcoming demo.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 19:29:55 +02:00
Joachim Wiberg 443cb2ddf1 src/confd: add support for /ietf-system:system/clock, with deviation
Declare deviation for /ietf-system:system/clock/timezone-utc-offset,
which we currently do not support.

Please note, when setting out to add support for timezone-utc-offset,
you need to ensure the user does not input both, that should be a
validation error.  It's an either-or thing.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 18:17:59 +02:00
Joachim Wiberg 68a5a50040 src/confd: add timezone support to set-current-datetime rpc
How to verify, use the following command and paste the XML below:

    $ sysrepocfg -R
    <sys:set-current-datetime xmlns:sys="urn:ietf:params:xml:ns:yang:ietf-system">
        <sys:current-datetime>2022-01-12T14:29:00-02:00</sys:current-datetime>
    </sys:set-current-datetime>

Reuse code from mech, verified and working.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 16:37:23 +02:00
Joachim Wiberg 4e0d7ad494 src/confd: use /etc/os-release for platform operational data
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 14:14:05 +02:00
Joachim Wiberg a2d2d0948f src/confd: minor refactor
Reuse code from mech, verified and working.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 14:08:30 +02:00
Joachim Wiberg 32e55d3562 configs: update defconfigs post e729c82
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 06:32:17 +02:00
Joachim Wiberg 4e3f3a01b3 board/common: change cli alias to start klish
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 06:31:47 +02:00
Joachim Wiberg 36ff60f99c package/confd: support for customer factory startup-config.cfg
When researching the systemd tmpfiles.d implementation I discovered the
effort to standarize on /usr/share/factory as a generic factory defaults
for Linux systems.  This patch adds a small example factory.cfg file
that is installed as /usr/share/factory/cfg/startup-config.cfg.  The
tmpfiles.d backend will then install it as /cfg/startup-config.cfg if
that file is missing at boot.  Confd does the rest to bootstrap our
(by default) empty sysrepo db with this startup-config.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 06:00:54 +02:00
Joachim Wiberg f9a7c256ca package/libite: backport rsync + copyfile fixes from upcoming v2.5.3
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-03 06:00:16 +02:00
Joachim Wiberg 79eb5fd5f4 confd: startup-config hook with support for merging in at bootstrap
This change adds a hook to the startup datastore, we use the ietf-system
module because the module argument is mandatory.  The hook runs when all
changes have been saved to the internal store.  Since sysrepo has many
startup files in /etc/sysrepo, we saving a JSON copy of all these files
in /cfg/startup-config.cfg, which is persistent.  On system bootstrap
this file is merged into the (empty) running datastore, which is what
the sysrepo maintainers recommend to be independent of any yang model
updates that might occur on image upgrades.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-02 16:24:08 +02:00
Joachim Wiberg d8eb88e6da src/confd: improve error handling in ietf-system
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-02 16:24:08 +02:00
Joachim Wiberg af5c5bc3d2 src/confd: refactor, expose flags arg to change subscrie
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-02 16:24:08 +02:00
Joachim Wiberg 405e1f1b70 src/confd: minor refactor, split in multiple files
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-02 16:24:08 +02:00
Joachim Wiberg b3b25ed4d6 src/confd: improved coverage of ietf-system
- Call external programs safely with run()
 - Use augeas to update /etc/hostname and /etc/hosts
 - Add support for generating /etc/chrony.conf
 - Update license copyright due to significant contrib.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-02 16:24:08 +02:00
Joachim Wiberg 7079a35088 configs: disable nginx temporarily while evaluating sysrepo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-02 16:24:08 +02:00
Joachim Wiberg 3bef1eec16 Disable rauc streaming and kernel nbd, not used atm.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-02 16:24:08 +02:00
Joachim Wiberg b639812ba4 patches/netopeer2: add support for running in foreground with syslog
The default is to use -d (debug), which changes logging to stdout, which
we do not want with Finit.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-04-02 16:24:08 +02:00
Tobias Waldekranz e729c82c32 klinfix: Initial add
Infix integration of klish and klish-plugin-sysrepo.

Initially we add:

More flexible management of running vs. startup: Instead of always
committing changes both to running and startup, commit only modifies
running. To persist changes to startup, the copy command is
introduced. This lets the user copy from factory/startup/running to
startup/running at any time.

Well-known verbs like abort, leave, end, etc.
2023-03-31 17:31:34 +02:00
Joachim Wiberg abd001f57d package/confd: start netopeer2-server along with sysrepo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-31 11:03:44 +02:00
Joachim Wiberg cfef79bbf9 configs: enable netopeer2-cli and add klish to defconfigs
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-31 11:02:45 +02:00
Joachim Wiberg 3cce1e6427 src/confd: drop shortname yang module aliases and load with version
Drop the shortname yang aliases, installed they become copies of
their versioned counterpart, which is not the intention, but also,
no other yang consumer does this.

We'd like to use ly_ctx_load_module() directly, or a slim sysrepo
wrapper of the same, but no such API (load by yang module *name*
with optional revision) exists currently.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-29 13:00:10 +02:00
Tobias Waldekranz d66dc16600 package/klish-plugin-sysrepo: Bump to latest master
This adds completion support for nodes nested under choice and case
nodes.
2023-03-29 11:32:09 +02:00
Joachim Wiberg 24a1eb542d src/confd: add support for enabling yang features
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-29 08:03:37 +02:00
Joachim Wiberg 708b756eba src/confd: minor, coding style
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-29 07:43:48 +02:00
Joachim Wiberg 3bbc5c49cd src/confd: derive YANG module search path from configure
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-29 07:12:13 +02:00
Joachim Wiberg 41db19ffaa src/confd: import updated yang models from mech
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-29 06:22:27 +02:00
Joachim Wiberg 1907bd6a75 src/confd: adjust Denis' copyright year, last changed 2020
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-29 06:22:27 +02:00
Joachim Wiberg d1444b900a package/confd: allow klishd to run in NETCONF mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 20:53:55 +02:00
Joachim Wiberg 737f99e35e package/klish: make sure to enable libxml2 in configure
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 20:53:41 +02:00
Tobias WaldekranzandJoachim Wiberg b549ddd88a package/klish-plugin-sysrepo: Add version 1.0.0
Adds a klish interface to local datastores managed by sysrepo.
2023-03-28 20:29:31 +02:00
Tobias WaldekranzandJoachim Wiberg 5d8e0ec123 package/klish: Add version 3.0.0
Extensible CLI application
2023-03-28 20:29:31 +02:00
Tobias WaldekranzandJoachim Wiberg fdfcac70eb package/faux: Add version 2.1.0
Used by the upcoming klish package
2023-03-28 20:29:31 +02:00
Joachim Wiberg 7a69c21e9d configs: change default NETCONF to use sysrepo instead of clixon
Extended evaluation of sysrepo due to problems parsing yang v1.1 models
with the built-in yang parser in Clixon.  Problems not seen with libyang

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 20:27:18 +02:00
Joachim Wiberg b1be357a41 package/confd: new package
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 20:27:18 +02:00
Joachim Wiberg 767296e830 src/confd: port to sysrepo 2.x
Changes compared to original project:

 - installs into the sysrepo-plugind plugin directory, so no need
   for calling sysrepoctl to load the plugin
 - the plugin loads its yang module, so no need for calling sysrepoctl
   to load the module before starting sysrepo-plugind
 - bug fix ERROR() macro

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 20:27:18 +02:00
Joachim Wiberg 91d67e6b00 src/confd: import sysrepo ietf-system plugin by Denis Kalashnikov
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 20:27:18 +02:00
Joachim Wiberg 8e03114518 patches: add support for running sysrepo-plugind in the foreground
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 20:27:18 +02:00
Joachim Wiberg 546a2f3afb package/mech: relocate clixon system setup
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 20:27:18 +02:00
Joachim Wiberg aa3d8945b9 buildroot: switch to (updated) sysrepo branch from kkit
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-28 13:37:45 +02:00
Joachim Wiberg d7b032cee7 .github: dispatch workflows manually from now on
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 15:53:35 +02:00
Joachim Wiberg f5a863df04 package/finit: bump for initctl -n additions (enable/disable)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 15:48:38 +02:00
Joachim Wiberg 0cfd0fcd89 package/skeleton-init-finit: add Frr pathd and vrrpd start scripts
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 14:38:17 +02:00
Joachim Wiberg 81c9398a19 doc: project goals and founding ideas
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 14:13:25 +02:00
Joachim Wiberg eed61988d1 doc: RESTCONF adventures, lab notes
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 14:11:10 +02:00
Joachim Wiberg fe20f4a470 mech: new autocli commands, cut-and-paste from various examples
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 14:10:26 +02:00
Joachim Wiberg ac7b9073a5 mech: disable debug dumps of transactions by default
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 14:08:27 +02:00
Joachim Wiberg aec2514eae mech: add support for ietf-syste:system/dns-resolver
This commit adds multi-nameserver support using openresolv (resolvconf)
and dnsmasq.  This means that a DHCP client (dhcpcd) or VPN client can
be providers of nameservers to the system.  Dnsmasq takes over as the
system resolver, except when the user has set up static configuration.

Static nameserver(s), as well as search and options, are always added
first by openresolv to /etc/resolv.conf.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 14:05:03 +02:00
Joachim Wiberg a5258d7102 mech: wrap system() as run(), returning WEXITSTATUS() or -1 on error
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-27 14:03:03 +02:00
Joachim Wiberg 4acaa170e4 mech: add support for ietf-system:set-current-datetime rpc
Also adds:
 - namespace validation
 - proper rpc operation lookup

Fixes:
 - ietf-system:system-shutdown (broken due do invalid op)

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-24 01:50:36 +01:00
Joachim Wiberg 688c0ce2f7 mech: add support for ietf-system state data
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-24 01:50:36 +01:00
Joachim Wiberg 2ff4f869fa board/common: add ID_LIKE, BUILD_ID and ARCHITECTURE to /etc/os-release
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-24 01:50:36 +01:00
Joachim Wiberg cdb68cb611 package/skeleton-init-finit: add remaining Frr daemons
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-24 01:50:36 +01:00
Joachim Wiberg 8cff15e215 package/skeleton-init-finit: drop stdout log redirection
lldpd already use syslog

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-24 01:50:31 +01:00
Joachim Wiberg b25a374409 mech: drop unused code
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-23 18:40:18 +01:00
Joachim Wiberg 35b0880e7b package/clixon: add clish alias and append to /etc/shells
Allow clixon_cli to be a login shell.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-23 15:00:15 +01:00
Joachim Wiberg 80f57d0809 Add Building section and ToC
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-23 14:51:49 +01:00
Joachim Wiberg 89d08338ce mech: initial support for ietf-interfaces state data
First example of how to implement supoort for ro/state-data.
Only oper-status and phys-address per interface currently.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-23 13:25:23 +01:00
Joachim Wiberg 2abb0a5eb9 mech: add support for setting interface description as ifalias
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-23 13:24:26 +01:00
Joachim Wiberg 4730f3fe09 mech: clean up developer logs in ietf-interfaces
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-23 13:23:54 +01:00
Joachim Wiberg ec7d72c4c5 package/finit: bump to latest snapshot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-22 09:43:41 +01:00
Joachim Wiberg cbc0374251 mech: add support for ietf-system:system-restart and system-shutdown
Shutdown depends on how the kernel is configured, on most embedded
systems this just means reboot.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 19:32:24 +01:00
Joachim Wiberg 2124f27d2c mech: initial support for ietf-interfaces and ietf-ip
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 17:40:39 +01:00
Joachim Wiberg 6df91143ba board/common: no need to clean up rc.local or /etc/network/*
In managed NETCONF mode /etc is always based on the image's read-only
/etc with a read-writable overlay as a RAM disk.  We control the image
and know the default rc.local is empty and the interfaces file only
list the loopback interface.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 17:38:38 +01:00
Tobias Waldekranz c74203720a mech: Compress empty yang containers in CLI
E.g. instead of: `set interfaces interface eth0`

We can now say: `set interface eth0`
2023-03-16 16:13:09 +01:00
Joachim Wiberg 74cf105512 mech: fix disabling chronyd when system ntp client is disabled
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 15:55:13 +01:00
Joachim Wiberg 0da4578362 board/common: allow lldpd to run by default in NETCONF mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 15:55:13 +01:00
Joachim Wiberg 24d2f28fb6 board/common: allow default auth:none restconf via nginx to clixon
- Only disable default services we don't need, prevents touching
   services mid-air in runlevel S.  Allow nginx now as well
 - Enable fcgi based RESTCONF interface via nginx by default
 - Enable auth:none for customer demo

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 15:55:13 +01:00
Tobias Waldekranz 3c6c2ec66d mech: Import ietf-{interface,ip} models 2023-03-16 15:48:38 +01:00
Tobias Waldekranz f7f6333b6f mech: Generate a tree representation of the YANG model
If pyang is available, generate texual and HTML representations of the
system's YANG model.
2023-03-16 15:48:38 +01:00
Joachim Wiberg 4e46b60b6f mech: deviation /sys:system/clock/timezone-utc-offset not-supported
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 08:26:21 +01:00
Joachim Wiberg 0185efeb3f mech: add support for setting timezone, e.g. Europe/Stockholm
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 08:00:40 +01:00
Joachim Wiberg f0e659c185 chrony: does not support SIGHUP, requires /var/lib/chrony
Chrony drops privs after startup to user chrony, when restarting it
writes its state in /var/lib/chrony, so the directory needs to have
the correct permissions for that user.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 07:26:40 +01:00
Joachim Wiberg 4ca2e2d8c4 mech: initial support for ietf-system ntp using chrony
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 07:26:40 +01:00
Joachim Wiberg 79f4baf519 board/common: enable syslog LOG_DEBUG messages to /var/log/debug
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 06:37:56 +01:00
Joachim Wiberg fa45015140 mech: debug transactions
For observability. All transactions that reach ietf-system are logged
with LOG_DEBUG log level.  See /var/log/debug for details.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 06:37:56 +01:00
Joachim Wiberg 17424a140f mech: ensure clixon_backend always use syslog backend
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 06:37:56 +01:00
Joachim Wiberg d130011f96 mech: common convenience library, currently only XML debug fns
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 06:37:56 +01:00
Joachim Wiberg d01617a79e board/amd64: enable RTC subsystem
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-16 06:37:56 +01:00
Joachim Wiberg 00daab72fc package/mech: start clixon_backend as 'clixon', redirect stdout/err
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 20:32:38 +01:00
Joachim Wiberg 90b4a739b5 mech: always run initctl in batch mode when in non-interactive mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 20:31:50 +01:00
Joachim Wiberg 28b6cecb73 package/clixon: bump to 6.1.0+kkit
Tracking kkit branch (clixon 6.1+) w/a for issue #334.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 17:05:21 +01:00
Joachim Wiberg 48f819b315 package/cligen: bump to v6.1.0
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 17:05:00 +01:00
Joachim Wiberg e9b252b514 buildroot: bump to 2023.02 LTS
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 16:07:15 +01:00
Joachim Wiberg 060af92a29 package/clixon: /var/clixon is a directory
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:38:08 +01:00
Joachim Wiberg 7a4fe98a3e mech: remember hard-coded strings
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg f43b31b1f5 mech: system headers before clixon, skip sys/ prefix
The canonical location for syslog.h is in the root.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 1aac798041 mech: must specify model revision
Found when debugging output from "show state", which displayed NULL for
the infix model.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 77f6d5e82e mech: use same pager as Clixon by default
Add configurable pager support to Clixon later.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg cc5453bfbd mech: use new 'show -n' to skip shell user's help notice
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 3c4ff8cabb board/common: add 'show -n' for no footer output
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 6fec738628 board/common: make sure to enable clixon_backend in NETCONF mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 6a591ddd5a mech: use NOTICE file and spdx format for Apache 2.0 license
Recommendations on how to apply the Apache 2.0 license to a project from
https://www.linkedin.com/pulse/how-apply-apache-20-license-your-open-source-software-vladimír-gorej/

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg d8d761bfa4 mech: change license to Apache v2.0, same as Clixon package
To facilitate linking and circumvent any possible legal problems.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 2f7dbe110a src/mech: add some basic 'show' commands
- Example of optional args (show log [FILE])
 - Example of dynamic expansion
 - Example of how to re-enable signals for external commands
 - Example of hidden commands
 - Add basic 'help' command for the current level

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 9041c54dbd README: mention Clixon and add Qeneth as alternative to GNS3
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 9f74bac06c README: fix footnote link
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Joachim Wiberg 70a393ec99 package/mech: minor, for Buildroot conformance
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-14 09:06:22 +01:00
Tobias Waldekranz 77d94e0ffd doc: Expand boot procedure documentation
Provide more details on the boot procedure, different image types
used, how to configure the bootloader, and how to perform system
upgrades.
2023-03-13 23:20:01 +01:00
Tobias Waldekranz 19672fcc58 rauc: Initial support
Add support for firmware updates via RAUC on aarch64. The created RAUC
bundle (images/infix-$BR2_ARCH.pkg) is signed with the same key used
to sign the raw FIT image.
2023-03-13 14:46:37 +01:00
Tobias Waldekranz e7112ca0c9 qemu: Support mounting host filesystem inside guest
This is mounted at /mnt/host in the guest. By default the images
directory is mounted.
2023-03-13 13:53:12 +01:00
Tobias Waldekranz 162f019574 aarch64: Remove U-Boot envimage generation from defconfig
This created a circular dependency that caused the build to fail. This
is now handled by the mkdisk.sh script instead.
2023-03-13 10:21:08 +01:00
Tobias Waldekranz bf240e0d89 amd64: Update GNS3 appliance generation to use the disk image
The appliance now uses the same QEMU setup as when using `make run`
with OVMF loader.
2023-03-13 09:57:04 +01:00
Tobias Waldekranz 6cc26307b7 common: Mark output from Infix shell scripts similarly to Make
Similarly to how $(call IXMSG,"hello world") outputs a blue
information line from a makefile, provide `ixmsg` to accomplish the
same thing in shell scripts.

Use a different prefix (`#!:` vs `>>>`) to differentiate it from
makefile output.
2023-03-13 09:57:04 +01:00
Tobias Waldekranz d777d59ee2 common: Prettify output from Infix extensions to the build system
This makes it easier to spot where we've added things (that might not
work :))
2023-03-13 09:57:04 +01:00
Tobias Waldekranz 3c720892dc aarch64: Cleanup unused stuff from defconfig
Config options are now loaded internally by the post-image script.

We never use the EXT image for anything.
2023-03-13 09:57:04 +01:00
Tobias Waldekranz f3304a6539 common: Unify disk image generation across aarch64 and amd64
On amd64, we use grub instead of U-Boot, because yours truly can't
figure out how to handle ACPI handover to the kernel.

The resulting image is now called disk.img instead of the old mmc.img,
since we can use it over any interface (e.g. virtio or SCSI).
2023-03-13 09:57:03 +01:00
Tobias Waldekranz 515d9f6e84 config: Replace $() with ${}
This lets us source .config from shell scripts
2023-03-13 09:56:37 +01:00
Tobias Waldekranz 96af542d40 qemu: Consolidate DTB extension handling in qemu.sh 2023-03-13 09:55:16 +01:00
Tobias Waldekranz e9adde4100 qemu: Add option to start with UEFI instead of BIOS 2023-03-13 09:55:16 +01:00
Tobias Waldekranz 81f0276a31 qemu: Remove redundant enabling of KVM 2023-03-13 09:55:16 +01:00
Tobias Waldekranz 7ba2e0a0b1 qemu: Always use disk images when using U-Boot
The U-Boot scripts won't accept a raw squash.
2023-03-13 09:55:16 +01:00
Tobias Waldekranz d1607cc2f3 doc: Document boot process and image formats 2023-03-13 09:55:16 +01:00
Tobias Waldekranz 9869c1a290 common: uboot: Update environment to new disk layout
- Adapt boot scripts to exepect the split FIT header/SquashFS image
  layout.

- Make sure that we can boot from any kind of block device (most
  importantly virtio for GNS3).

- Rename net -> dhcp as we might have more kinds of netboots in the
  future (http).
2023-03-13 09:55:16 +01:00
Tobias Waldekranz 8296a98e61 common: Use plain SquashFS images on disk
Store FIT headers separately on aux, and place the raw SquashFS images
on primary/secondary. This removes the need to muck about with the
device mapper to setup the rootfs, and it allows us to boot using
syslinux files.
2023-03-13 09:55:16 +01:00
Joachim Wiberg c328c41eff package/profeth: document QEMU_NET_TAP_N=10 requirement
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-09 07:21:50 +01:00
Joachim Wiberg 6c1a53ffdb package/skeleton-init-finit: add missing /etc/sysctl.d directory
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-09 07:17:21 +01:00
Joachim Wiberg 597207b7dd profeth: drop copy of p-net headers, use library headers instead
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-09 06:58:46 +01:00
Joachim Wiberg 67727e3050 configs: enable PROFINET support in default builds
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-09 05:58:09 +01:00
Joachim Wiberg 8eb879c8b2 board/amd64: enable E1000 ethernet nic support for Qemu
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-09 05:58:09 +01:00
Joachim Wiberg f8738de608 package/skeletin-init/finit: per-package tmpfiles.d directory
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-09 05:58:09 +01:00
Joachim Wiberg 2f0b2e113e package/skeleton-init-finit: update lldpd configuration
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-09 05:58:09 +01:00
Joachim Wiberg 0f38ac54f8 src/profeth: add submodules for all ports, matching the GSD file
These changes allow profeth to pass the Automatic RT Tester's first
behavior tests: Scenario 1-9.

 - Explorative changes to the GSD file to appease the conformance tool
 - Fix mismatch in installed submodules vs advertised ports in GSD file

Note: changes in GSD file only match the amd64 virtual build.  Must be
      updated for the final product.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-09 05:58:09 +01:00
Joachim Wiberg 25db613398 Refactor boot mode handling
With the recent `if:<cond>` addition to Finit we can simplify a lot of
the logic for disabling and enabling features in Infix.  Standardizing
on conditions that Finit provides.

We create boot/netconf, boot/etc, and boot/profinet conditions early,
after all filesystems have been mounted (and cleaned), so they are all
set before Finit loads its configuration files in runlevel S.

The default is still to boot into a managed NETCONF mode, since the end
goal remains to integrate PROFINET as yet another service.  The other
mode, native /etc, should then be the only exception.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-08 20:02:03 +01:00
Joachim Wiberg 81212e12f1 package/profeth: persistent data in /var/lib, syslog.conf
Split tmpfiles config in two, one for snmpd and one for profeth.
Add logging and redirect profeth logs to /log/profinet.log with
default log rotation.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-08 20:02:03 +01:00
Joachim Wiberg f8670f7150 package/p-net: increase log level slightly Fatal -> Info
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-08 20:01:55 +01:00
Joachim Wiberg 917633f439 mech: create the /run/clixon directory at boot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-08 18:40:25 +01:00
Joachim Wiberg e94b4de865 rootfs: add handy /log shortcut to /var/log
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-08 18:39:23 +01:00
Joachim Wiberg 5045c6e6ba utils: use same IP subnet as PROFINET Automated RT Tester
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-08 17:05:37 +01:00
Joachim Wiberg f41846fab4 src/profeth: use RT-Labs VendorID and DeviceID for now
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 15:08:20 +01:00
Joachim Wiberg 4942a53483 package/profeth: add set_network_parameters script
Allow profeth to set IP address, netmask and gateway on PROFINET set.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 15:08:09 +01:00
Joachim Wiberg 06599d2097 package/finit: bump for next snapshot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:54:00 +01:00
Joachim Wiberg 5ddbb2cf55 utils: helper script for briding a Qemu instance with the real world
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg 7cf945af5b board/common: add PROFINET boot mode, compliments native /etc
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg 6c7d945e8b profeth: use /var/run/agentx/master socket instead of default
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg bb62d58b17 profeth: branding
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg c0c087e719 src/profeth: fix system IP address/netmask and gateway query
Replace the old p-net API for querying the interface address, netmask
and gateway with the new ones that use getifaddrs() and inspect the
kernel routing table.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg e33f191d07 package/profeth: add support for starting and monitoring PROFINET
An Infix build with PROFINET gears Net-SNMP heavily towards acting as a
servant to profeth (p-net stack).  This will be hard-coded for now until
we've integrated it all better in Clixon.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg d572bc78f3 package/skeleton-init-finit: add support for monitoring net-snmp
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg 5a003c40c3 package/skeleton-init-finit: add env file to mini-snmpd
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg e3adc8a6e4 src/profeth: add GPLv3 license and basic README
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg 221cc0b1f6 mech: move Finit service .conf to package and add conditions
The new if: conditions require latest Finit master, unreleased v4.4

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg 90a1fd99ec board/common: ensure cache directory for nginx is created at boot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg 80b23566b5 board/common: use same method to determine operating mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Joachim Wiberg 281183755b qemu: replace -nic with -netdev to get >8 NICs, fix MAC calculation
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:58 +01:00
Tobias WaldekranzandJoachim Wiberg 5a441252f8 profeth: Initial add 2023-03-06 10:50:58 +01:00
Tobias WaldekranzandJoachim Wiberg 23a25147cc package/p-net: new package
Use ael fork with not-yet upstreamed fixes for now.

Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-03-06 10:50:51 +01:00
Joachim Wiberg 04e646ab40 qemu: default to 256M RAM for both targets
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-28 14:47:56 +01:00
Joachim Wiberg 7537e7e263 package/clixon: prevent host install from stripping .so files
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-28 11:34:59 +01:00
Joachim Wiberg bc7b366c85 package/cligen: prevent host install from stripping .so files
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-28 11:34:55 +01:00
Joachim Wiberg 046b15fbc0 common: separate handling of aarch64 and amd64 images, for now
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-28 11:33:35 +01:00
Joachim Wiberg 759f8aa589 aarch64: add missing $BR2_ARCH arg to post-image.sh
Needed by sign.sh when creating the image.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-28 11:33:08 +01:00
Tobias WaldekranzandJoachim Wiberg d8c529a2a7 common: Make U-Boot's auxiliary environment accessable from Infix
This is not the full environment used by U-Boot, just the bits needed
for U-Boot to know which slot to boot and for Infix to know how the
boot process went.

U-Boot will selectively import/export only these keys during boot,
which avoids a malicious user from altering the boot in a way that
might bypass signature validation.
2023-02-28 11:01:04 +01:00
Tobias WaldekranzandJoachim Wiberg dd8bcca180 common: Generate a new dev cert with a distant expiry date
100 years ought to be enough for everyone.
2023-02-28 11:00:15 +01:00
Tobias WaldekranzandJoachim Wiberg d4432b72dd common: uboot: Add missing blkmap patches
The blkmap patches were not included in the original U-Boot Secure
Boot changeset.

Fixes: d243c80 ("aarch64: Convenience target to configure a QEMU compatible U-Boot")
2023-02-28 11:00:15 +01:00
Tobias WaldekranzandJoachim Wiberg 07dd863fb9 common: Remove remnants of old separate FIT-header-PoC
Now that the uncut FIT is stored in primary/secondary, we don't create
any FIT header files.

Fixes: 499a8f7 ("common: Create (e)MMC image with redundant root filesystems")
2023-02-28 11:00:15 +01:00
Joachim Wiberg c94c360d4a configs: sync aarch64 with amd64 to get Clixon, Frr, nginx, etc.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-28 10:49:27 +01:00
Joachim Wiberg 513316f19e configs: drop qemu tap settings, default should bet user
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-27 15:56:38 +01:00
Joachim Wiberg 47c39c311f Basic User Guide for the Open Source base
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-24 20:08:34 +01:00
Joachim Wiberg 48a64a39f2 amd64,aarch64: disable udev hwdb, not needed currently
Saves 18 MiB from /etc

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-23 09:41:38 +01:00
Joachim Wiberg 0c07f10062 board/amd64: minor fixups to isolinux.cfg
- Drop unused com32 modules
 - Fix duplicate prompt output (serial not needed)
 - Reduce timeout before booting default to 0.5 sec
 - UI or DEFAULT must be set, otherwise isolinux complains
   so replace ONTIMEOUT with DEFAULT
 - Increase user-walked-away timeout to 5 minutes
 - Always show the prompt

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-23 09:37:40 +01:00
Joachim Wiberg f2dd7430a7 package/finit: bump for next snapshot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-22 20:00:04 +01:00
Joachim Wiberg fc6a793269 configs/amd64_defconfig: simplify syslinux, drop graphical menu
Not required and often just looks garbled, better to drop it for now.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-22 18:56:28 +01:00
Joachim Wiberg c098629ce9 mkgns3a.sh: increase node ram even more, we need 512 MiB (!) to run
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-22 18:53:30 +01:00
Joachim Wiberg 384ef8c189 package/skeleton-init-finit: fix regression introduced in aee7fb9
On rebuild (without distclean) the getty.conf contained two tty lines
for the same TTY, causing Finit to believe the command line args had
been changed between each reload -- and thus kicking out the logged
in console user who just typed `initctl reload`.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-22 18:51:45 +01:00
Joachim Wiberg 8e7b173de3 mkgns3a.sh: increase node ram, we now provide Frr
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-22 07:32:43 +01:00
Joachim Wiberg 0a5729cbea package/skeleton-init-finit: fix ftbfs regression from aee7fb9
Need to rsync the whole skeleton since we provide more than just the
finit.d files, e.g. /etc/fstab, which we also modify in this .mk.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-22 07:31:31 +01:00
Joachim Wiberg c3d7405b8f Add support for using /usr/bin/pdmenu (setup) as a login shell
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-21 22:28:42 +01:00
Joachim Wiberg 378633fa5c setup: make this the default /etc/pdmenurc in Infix
Set COLORTERM instead of using -c flag.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-21 22:28:42 +01:00
Joachim Wiberg 6cf4a986f5 setup: add support for performing factory reset
Now that we have dialog on target we can add a user-friendly factory
reset dialog.  The new `yorn` script handles any form of yes-or-no
question, with or without dialog, to call a command.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-21 22:28:42 +01:00
Joachim Wiberg 9af4155a83 board/common: always clear the tty after the setup command
Exiting pdmenu leaves artifacts on screen.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-21 22:28:42 +01:00
Joachim Wiberg 0bd3acd361 setup: add support for easily switching system boot mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-21 22:28:42 +01:00
Joachim Wiberg 7733f18179 configs/amd64: enable squashfs images as well as kernel support
Now that we only support mmc and squash in `make run` we should make
sure the reference platform works as well as aarch64.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-21 20:12:12 +01:00
Joachim Wiberg 12b5731655 board/common: add support for overriding managed mode
This change adds support for setting the system boot mode to native /etc
style for systems where it's difficult, or close to impossible, to set
the Finit boot condition to 'etc'.

Note: this also moves the check for factory reset before we check if we
should use_etc, rather than NETCONF.  This to allow clearing out any of
the state files (.use_etc) before proceeding to boot in the default mode

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-21 20:05:31 +01:00
Joachim Wiberg 605bd7262b src/factory: use new /mnt/cfg/infix/.reset path
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-21 20:02:34 +01:00
Joachim Wiberg 357799bf47 package/skeleton-init-finit: add support for Frr
1. Use same naming standard for quagga and frr
 2. Only one of quagga and frr can be used at the same time
 3. Subdirectories in available/ only in the skeleton, not on target

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-20 14:49:37 +01:00
Joachim Wiberg aee7fb91d0 package/skeleton-init-finit: refactor, install svc files on demand
Only install the corresponding Finit svc if the package is selected in
the Buildroot menuconfig.  Some packages cannot be enabled by default
though, since they require a daemon configuration file, e.g. in the
case of ulogd it requires a valid /etc/ulogd.conf

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-20 14:49:37 +01:00
Tobias Waldekranz 499a8f718c common: Create (e)MMC image with redundant root filesystems
This image contains:

- A partition to hold bootloader config ("aux").

- Two redundant copies of the FIT framed rootfs (which will be
  upgradable by RAUC from within Infix).

- A partition to store critical configuration data ("cfg")

- A partition to store data created dynamically by Infix ("var")
2023-02-20 10:48:24 +01:00
Tobias Waldekranz ca3966db62 common: Create signature of root filesystem
mkimage will generate an FIT image containing a signature of the
rootfs, where the data is kept out of the DTB data structure, i.e.:

.---------.
|   DTB   |
:---------:
| Padding |
:---------:
|         |
|         |
| rootfs  |
|         |
|         |
'---------'

This is the on-disk format of Infix. At boot, we extract kernel and
device trees from the rootfs, and then use Linux's device mapper to
create a virtual block device that exposes the rootfs (squash).
2023-02-20 10:45:51 +01:00
Tobias Waldekranz 40f55058c6 common: Enable required U-Boot options in fragment file
This ensures that U-Boot images that we build can always:

- Rely on the environment extensions in env.dtsi being available
- Access the configured signing keys
- Use SD/eMMC cards
- Extract files from SquashFS filesystems

All of which are foundations that we intend to design our image
loading around.
2023-02-20 09:57:31 +01:00
Tobias Waldekranz b655ac778a common: Install signing key and environment in U-Boot's build tree
Ensure that whenever U-Boot is built:
- The chosen signing key and is converted to the expected format and
  installed in the build tree.
- Infix's environment extensions are installed in the build tree
2023-02-20 09:57:31 +01:00
Tobias Waldekranz 8716bea698 common: Add a development signing key
Keep a shared in-tree key that can be used to sign Infix images during
development. The idea is that this will also be included in developer
builds of U-Boot.
2023-02-20 09:57:31 +01:00
Tobias Waldekranz 98b59ac20b qemu: Optionally start from U-Boot using MMC disk
This is very useful for testing things like image signature
verification, system upgrades, etc.
2023-02-20 09:57:31 +01:00
Tobias Waldekranz d243c802b0 aarch64: Convenience target to configure a QEMU compatible U-Boot 2023-02-20 09:57:31 +01:00
Tobias Waldekranz 205d6e0187 aarch64: Enable support for PCI SDHC controllers
This let's us easily emulate SD/MMC disks from QEMU.
2023-02-20 08:56:06 +01:00
Joachim Wiberg 1cb4c9ac63 package/finit: bump for next snapshot
This is likely the last before v4.4-rc1.  Last remaining thing is a very
basic tmpfiles.so plugin that replaces a lot of what bootmisc.so hs been
(ab)used for.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 19:30:43 +01:00
Joachim Wiberg df6a19bac4 configs; enable nginx and clixon restconf over fcgi
Also add libcurl so all Clixon utility functions and apps are build with
full support for RESTCONF.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 19:15:57 +01:00
Joachim Wiberg 14dea1c6e1 src/mech: allow backend to start restconf in fcgi mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 19:15:22 +01:00
Joachim Wiberg 2875a787d4 package/clixon: add missing libfcgi dependency
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 19:14:49 +01:00
Joachim Wiberg 0162c2382a src/mech: sock and pid files should go in /run
This introduces a dependency on /run/clixon to exist when starting up.
Requires a patch to Finit panding the upcoming tempfiles.so plugin.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 19:13:08 +01:00
Joachim Wiberg c0c2ca622b board/common: add nginx.conf with /restconf fcgi reverse proxy
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 19:11:49 +01:00
Joachim Wiberg b0dfad05fb package/skeleton-init-finit: add support for monitoring nginx
Also needs /var/cache/nginx when starting up.  Requires separate patch
for now, but will be added a tmpflies.so plugn to Finit.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 19:10:20 +01:00
Joachim Wiberg efb4efc0a0 Add support for Frr and SMCRoute
Primarily for evaluating OSPF in customer's use-case.  Preparing for
some (static) multicast routing tests as well.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 19:03:05 +01:00
Joachim Wiberg 6822c92fb2 package/skeleton-init-finit: fix copy-paste error in chrony env file
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-15 11:17:41 +01:00
Tobias Waldekranz 581c0946b7 defconfig: Build mech by default
Clixon is the future :)
2023-02-10 16:11:34 +01:00
Tobias Waldekranz 00c93cd70c mech: Initial ietf-system support
Only hostname is supported for now.
2023-02-10 16:11:34 +01:00
Tobias Waldekranz 3d35194341 mech: Add infrastructure for backend plugins using Augeas 2023-02-10 16:11:34 +01:00
Tobias Waldekranz 3235f00cd1 mech: Import basic autocli support from clixon's main example
This allows use the autogenerated CLI to modify the database.
2023-02-10 16:11:34 +01:00
Tobias Waldekranz e56348a916 mech: Make startup_db persistent, prepare for factory configs
Keep the transient files in the system's /mnt/tmp, and only persist
startup_db in /cfg.

This design (with a symlink) means that /cfg/startup_db _must_ exist
in order for clixon to start properly. Therefore run
/lib/infix/prep-db to take care of this.

At the moment, this just creates an empty factory config, and copies
it to startup if it doesn't exist. In the future, prep-db could select
a factory config based on some hardware identifier, or even build one
dynamically, based on available ports etc.
2023-02-10 15:51:47 +01:00
Tobias Waldekranz 5a27b30c7c mech: Startup clixon at boot 2023-02-09 10:26:10 +01:00
Tobias Waldekranz 61213c7c3c sshd: Move hostkeys to /var/lib/ssh
This means keys are persistent even when /etc is not.
2023-02-09 10:26:10 +01:00
Tobias Waldekranz fbd68c4a65 qemu: Let user supply extra append options 2023-02-09 10:26:10 +01:00
Tobias Waldekranz 66688b4e5a board/common: mnt: Fix boot/etc detection
Previously, the absense of any finit boot conditions would be
interpreted as unmanaged mode, but managed should be the default.
2023-02-09 10:26:10 +01:00
Tobias Waldekranz d7c83cb9a7 board/common: Make it easier to access the CLI
- Create a shell alias, 'cli'
- Add an sshd subsystem, 'cli'
2023-02-09 10:26:10 +01:00
Tobias Waldekranz 3036b08945 board/common: Split out iface renaming from swup
The factory config part of swup will now only run when in unmanaged
mode.
2023-02-09 09:43:15 +01:00
Tobias Waldekranz 437961a644 board/common: Keep static /etc/iproute2/group
This way we don't have to patch it at every boot.
2023-02-09 09:43:15 +01:00
Tobias Waldekranz fa4a83e38d board/common: Keep our own dhcpcd.conf
This avoids the issue where the config file keeps growing as more
"background" lines are appended to it with each build.
2023-02-09 09:43:15 +01:00
Tobias Waldekranz 16af6f9622 board/common: Remove remnants of dropbear key generation 2023-02-09 09:43:15 +01:00
Tobias Waldekranz 7740baf796 Revert "board/common: enable NETCONF over SSH"
This reverts commit 2ddf9448fe.

Two reasons:

1. We will move to a debian-style /etc/ssh/ssh_config.d/ structure
   soon.

2. In a managed scenario, NETCONF could be disabled, so mech should be
   responsible for activating it at boot.
2023-02-09 09:43:15 +01:00
Joachim Wiberg 7bfb0a9478 Follow-up to 252feef: rename Orc to Mech everywhere
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 15:12:57 +01:00
Joachim Wiberg f75842ab8b src/mech: update socket group s/clixon/clicon/
Recommended group according to Clixon FAQ

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:55:03 +01:00
Joachim Wiberg 8f82d24724 board/common: add clicon user according to FAQ
https://github.com/clicon/clixon/blob/master/doc/FAQ.md#do-i-need-to-setup-anything

With the additional wheel group for the clicon user since our plugins
need to modify files in /etc at bootstrap and reconf.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:53:47 +01:00
Joachim Wiberg 2ddf9448fe board/common: enable NETCONF over SSH
The allows remote NETCONF access to the Clixon example (for now).  This
will be replaced later with the Clixon Infix system.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:53:03 +01:00
Joachim Wiberg 83b3a1b1cc board/common: follow-up to 91b40a1, fix bridge access ports
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:53:03 +01:00
Joachim Wiberg 6de17bb06a board/common: follow-up to 4ca58836b, let less be less
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:53:03 +01:00
Joachim Wiberg 8fe9e87550 patches/clixon: adjust paths to PID file and XML db store
- Use the more common .pid format for the PID file
 - Use an existing directory for the XML db, /var/lib/misc

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:53:03 +01:00
Joachim Wiberg 58c2ee159c package/clixon: fix misspelled BR2 variables in clixon.mk
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:53:01 +01:00
Joachim Wiberg e5545f1d27 Add licensing information, GPL like Buildroot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:52:19 +01:00
Joachim Wiberg e5032e1835 board/common: minor shellcheck fixes to mnt script
- Double quoting to prevent word splitting
 - local keyword is undefined in POSIX sh
 - `-m 0755` only applies to deepest directory (ignore)
 - Useless cat
 - Redirect to null, lilke the other mount_rw statements

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-08 14:52:19 +01:00
Tobias Waldekranz 252feef1c4 mech: Initial add
The mechanic, Infix's integration layer to Clixon
2023-02-08 14:05:47 +01:00
Tobias Waldekranz f8b32fb1be package/clixon: Fix default config file location
The comment in the makefile says it all.

With this in place, we can start clixon_{backend,cli,...} without any
arguments.
2023-02-08 14:05:47 +01:00
Joachim Wiberg 41737b2343 package/clixon: new package
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-07 19:12:40 +01:00
Joachim Wiberg aa9a986d4b package/cligen: new package
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-07 19:12:40 +01:00
Tobias Waldekranz ca1467736f common: Refactor persistent storage setup
In the new model, we have three sources of storage:

- /mnt/var: Mountpoint for a disk with the label "var"
- /mnt/cfg: Mountpoint for a disk with the label "cfg"
- /mnt/tmp: Mountpoint for a ramdisk

These sources are used for the following overlays:

- **/cfg, /home, /root**: /mnt/cfg if available, else /mnt/tmp

- **/etc**: /mnt/cfg if available and the boot/etc finit condition is
            set, else /mnt/tmp

- **/var**: /mnt/var if available, else /mnt/tmp

- **/var/lib**: /mnt/var if available, else /mnt/cfg if available,
                else /mnt/tmp

See board/common/rootfs/lib/infix/mnt for more information.
2023-02-07 15:42:35 +01:00
Joachim Wiberg 5ec019f97a Add link to GitHub Releases page
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-06 08:48:53 +01:00
Joachim Wiberg 17692eb250 package/sysrepo-plugin-system: new package
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 13:50:25 +01:00
Joachim Wiberg f4c1f48d04 package/sysrepo-plugins-common: new package
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 13:14:42 +01:00
Joachim Wiberg baa0d77598 package/umgmt: new package
Required by upcoming package sysrepo-plugin-system by Deutsche Telekom.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 12:38:50 +01:00
Joachim Wiberg ad22478866 board/common: allow full color output in setup tool
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:46:05 +01:00
Joachim Wiberg 326f2024d7 board/common: use plain view of log files in setup tool
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:46:02 +01:00
Joachim Wiberg 31d036c8c7 board/common: very basic 'setup' tool, also works as login shell
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:35:36 +01:00
Joachim Wiberg 8525f26137 board/common: fix show formatting in '-p' (plain output) mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:35:36 +01:00
Joachim Wiberg 0d9a218d95 board/common: add '-p' (plain output) to help command
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:35:36 +01:00
Joachim Wiberg 8b263f2766 board/common: add template /etc/mactab, syntax reminder only
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:35:36 +01:00
Joachim Wiberg 92ce79bc7a board/common: add simple 'hostnm' script to change system hostname
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:35:36 +01:00
Joachim Wiberg b313096745 board/common: add '-p' option to help script for plain/noansi output
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:35:36 +01:00
Joachim Wiberg 81698b17a1 board/common: update and fix show script for plain/noansi output
Also, the "show port foo" didn't work.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:35:36 +01:00
Joachim Wiberg c4f40a49c7 board/common: ensure port+iface group is assigned in factory defaults
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-02-01 08:35:33 +01:00
Joachim Wiberg 4ca58836b4 board/common: replace edit and editor with symlink to nano
The nano editor has been shown, over and over again, to be more
user-friendly to complete UNIX/Linux beginners than even Mg.

Also, change the default pager/less to be less (again), it was
very confusing to have less be most and more just be more.  We
recommend scripts to use pager and edit/editor to call system
safe defaults.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-31 21:45:32 +01:00
Joachim Wiberg 70b725baec board/common: some helpful hints on port classification and NAT
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-31 20:03:59 +01:00
Joachim Wiberg 5ab09ccad0 Demo issues fixed
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-31 12:35:39 +01:00
Joachim Wiberg 11e96318ef board/common: make rc.local executable, not called otherwise
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-31 12:35:39 +01:00
Joachim Wiberg d100f27585 board/common: import default sysctl.conf from Debian
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-31 12:35:39 +01:00
Joachim Wiberg a1c5e8b33f board/common: drop ifupdown2 defaults, not used anymore
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-31 12:25:58 +01:00
Joachim Wiberg 2e62e0d655 package/ifupdown-ng: fix overlayfs issue (DT_REG)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-31 11:35:24 +01:00
Joachim Wiberg 69e3e4672b Minor issues observed when preparing the first demo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-27 19:24:02 +01:00
Joachim Wiberg c84af105ec board/common: 192 MiB RAM is not longer enough, increase to 256 MiB
Regrettably, the latest additions of functionality to Infix have also
incresed the size of the ramdisk.  We expect it to go down slightly
before v1.0, but considering we'll add Frr before then it's better to
be realistic of our needs when run in GNS3.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-26 17:59:59 +01:00
Joachim Wiberg 4cc1a14a87 configs: fix .gns3a file generation, missing rw.ext4
Sync amd64 build with genimage support from aarch64.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-26 15:58:04 +01:00
Joachim Wiberg 193a51af86 .github: always update latest tag on builds
The previous fix, setting 'rm: false' to prevent the parallel builds
from replacing each other, caused the latest tag to not be updated.
Very confusing, not just to end-users, but also for devs.

This patch changes the workflow to use a separate release step that
runs in sequence, waiting for the build to finish, before it moves
the latest tag.

The trick to solving this is to use upload/download artifact.  It is the
recommended way of sharing files between independent jobs in a workflow.
Notice the lack of 'name:' in both and 'path:' in the latter, it means
"don't care" just upload and then download everything to the artifact/
directory.  Making the job of the releaser action quite simple.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-26 08:22:05 +01:00
Joachim Wiberg cba6926918 TODO: wizard idea, use pdmenu for initial setup
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 21:22:49 +01:00
Joachim Wiberg 2d7ca5ac88 board/common: drop bridge.template, same text now in 'help net'
Will also be part of the upcoming setup-bridge wizard built on pdmenu.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 21:20:45 +01:00
Joachim Wiberg 91b40a1385 Fix factory default, untagged access ports
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 21:16:38 +01:00
Joachim Wiberg 37ab226c9e Adjust ingress, we've moved to ifupdown-ng
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 21:00:00 +01:00
Joachim Wiberg ee926b52a2 Update 'help' with info on most, pwgen, fping, socat, etc.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:57:54 +01:00
Joachim Wiberg 2872227ec1 configs: add ttyd to all builds for sharing terminal over web
Experimental, may be reverted later after evaluation.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:50:27 +01:00
Joachim Wiberg b3c08d3503 configs: add irqbalance and the full kmod tools, for evaluation
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:49:19 +01:00
Joachim Wiberg 4aec9bf8cb configs: add pdmenu, neofetch, and pwgen to all builds
- pdmenu for the made-easy management tool for Infix
 - neofetch is just for demo purposes, we can add KernelKit logo
 - pwgen is for basic help, like netcalc

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:47:11 +01:00
Joachim Wiberg 05d86832f0 configs: enable fping and netcat for all builds
- fping is better for checking multiple hosts
 - OpenBSD netcat has more features and is generally better for multiple
   network testing scenarios

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:44:45 +01:00
Joachim Wiberg 45a03f17f8 configs: enable stress-ng, for stressing SoC, kernel, etc.
For board bringup, burn in testing, compliance testing, and general
troubleshooting.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:42:58 +01:00
Joachim Wiberg e7fad6fc7f We have terminfo for more terminals, let's default to TERM=linux
This gives us much better rendering of help system and other
console mode tools.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:41:40 +01:00
Joachim Wiberg 683e16cba2 configs: enable text-mode browser lynx
For debugging and external viewing of, e.g., man pages.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:40:18 +01:00
Joachim Wiberg df1cf36437 Change help viewer to 'most', more helpful to newbies
- Default to start pager (most), fall back to less/more/cat
 - Drop : from sub-headings
 - Repeat 'See Also' section
 - Relocate network section's Interesting Files to end
 - Add dhcpcd.conf to list of interesting files

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 20:36:55 +01:00
Joachim Wiberg 08cd175cfc package/tetris: new package
Small easter egg for presentations, demos, etc.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 19:57:32 +01:00
Joachim Wiberg 028298714a configs: add conntrack tools to default build
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 19:02:40 +01:00
Joachim Wiberg 579d0b5789 configs: add universal nework logging daemon (netfilter logging)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 19:01:52 +01:00
Joachim Wiberg fdd94a5943 configs: add nftables, with iptables compat, to default build
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 19:00:05 +01:00
Joachim Wiberg 36ccea2ab0 configs: enable a few more network debugging tools
- traceroute + mtr
 - nmap et al

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:52:06 +01:00
Joachim Wiberg 04ad1b90e3 Minor update, mention GNS3 support, initial password, and 'help'
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:41:13 +01:00
Joachim Wiberg 3e4891bcaf board/common: update gns3a template, better description and usage
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:41:13 +01:00
Joachim Wiberg e421e938ff board/common: ensure dhcpcd backgrounds immediately for quicker boot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:41:13 +01:00
Joachim Wiberg 96c8f838e3 Update online help slightly
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:41:13 +01:00
Joachim Wiberg 2730c87772 configs: udev + dbus + avahi
This patch drops our use of mdnsd and mdev in regular Infix builds, yet
keeping them in the config and repo for smaller builds, e.g. endpoints.

Also, enable dbus to increase level of integration between compoents.
The dbus-test-tool is included for debugging connections.

Since it's about the tenth time I've been missing strace on target, it
too is added in this commit.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:41:13 +01:00
Joachim Wiberg f5a95b3a91 package/finit: bump to latest snapshot (pre -rc1)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:41:13 +01:00
Joachim Wiberg 1fd929a68e buildroot: bump to latest master for upcoming 2023 LTS
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:41:13 +01:00
Joachim Wiberg 1ee3ab604d package/skeleton-init-finit: enable Avahi if selected in Buildroot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 17:41:13 +01:00
Joachim Wiberg d6e578e060 package/ifupdown-ng: change to KernelKit integration branch
- Disable IPv6 on bridge links when adding to a bridge

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-25 12:41:14 +01:00
Joachim Wiberg 7a9af5d244 package/skeleton-init-finit: let /var/lock be a symlink to /run/lock
The whole of /var may be read-only, while /run is a newstyle ramdisk.
The /run/lock directory is created by the Finit bootmisc.so plugin at
boot.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-24 14:45:52 +01:00
Joachim Wiberg 51f24b7765 board/common: initial /etc/mdev.conf from mdev-like-a-boss
- Support modprobe for hotplugged devices
 - Allow writable /dev/{null,zero,...} by all users
 - Correct TTY and console permissions
 - Adapt groups to Buildroot standard (Debian)

https://github.com/slashbeast/mdev-like-a-boss

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-24 08:06:07 +01:00
Joachim Wiberg fef42eb45b configs: switch from ifupdown2 to ifupdown-ng
- Replace ISC dhclient with dhcpcd => IPv4 link-local address
 - Enable openresolv to handle /etc/resolv.conf for us
 - iproute2 was a dependency of ifupdown2, but now we need to
   enable it explicitly
 - Ensure we have the same default system interface in infix
 - Reenable BusyBox applets disabled when enabling ifupdown2, for
   infix derivatives that may prefer a smaller base image.

Note: ifupdown-ng prefers dhcpcd over udhcpc, so no risk for conflict by
      reenabling udhcpc.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-19 18:09:26 +01:00
Joachim Wiberg 9fd0015873 package/ifupdown-ng: new package
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-19 16:13:15 +01:00
Joachim Wiberg 9018024ca9 Add support for generating GNS3 appliance file for amd64 builds
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-16 19:15:40 +01:00
Joachim Wiberg 2a89445570 board/common: default to show group 'iface' in show iface command
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-16 19:15:40 +01:00
Joachim Wiberg 59a2abb203 board/common: include a default (empty) rc.local as example
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-16 19:15:40 +01:00
Joachim Wiberg 9cda32b4f5 board/common: bridge template for ifupdown2
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-16 19:15:40 +01:00
Joachim Wiberg e514cf419d board/common: use swup to ensure port and iface groups exist
Used by the 'show' script for grouping and filtering Linux interfaces.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-16 19:15:40 +01:00
Joachim Wiberg 3283090401 .github: always replace artifacts in the latest release
With two parallel builds (amd64, aarch64) we have contention of who last
uploads their artifact, meaning aarch currently removes the amd64 build.
This change should fix that.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-12 15:21:56 +01:00
Joachim Wiberg 3160162f9c .github: debug workflow, try *.tar.gz instead of *.tgz
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-11 22:43:59 +01:00
Joachim Wiberg ebc776bbfc .github: add workflow to build and upload tarballs to latest tag
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-11 18:35:32 +01:00
Joachim Wiberg b05f51f673 Guidelines for how to contribute to the project
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-11 18:07:12 +01:00
Joachim Wiberg d625a4915d Import a general CoC for project
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-11 17:58:35 +01:00
Joachim Wiberg bc21f93ec2 Add support for returning a device to factory defaults
This change adds a `factory` tool, and login shell, that schedules a
reset of all writable (overlay) filesystems.  The tool is set up with
the suid gid flag to allow all members of the wheel group to perform
the reset.

The login method only allows reset from /dev/console, to prevent any
malicious reset over SSH.  This should be further constrained later
when PAM is introduced.

To initiate factory reset from the login prompt, use login/pass:

    factory/reset

To initiate factory reset from the shell, call

    factory

Both methods are interactive by default, but two command line options
can be used to modify the behavior:

  -r  Skip reboot, and "reboot now?" question
  -y  Assume yes to all questions, for non-interactive use

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-04 15:24:36 +01:00
Joachim Wiberg ec177085d9 Reminders for later
@wkz look here, something for your ~/.emacs:

(use-package magit-org-todos
  :after magit
  :config
  (magit-org-todos-autoinsert)
  (setq magit-org-todos-filename "TODO.org"))

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-03 20:41:15 +01:00
Joachim Wiberg c748128137 configs: enable jq regexp support with Oniguruma
Needed by, e.g., new swup script, but also everything else we might want
to do with jq in any sane way.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-03 20:37:22 +01:00
Joachim Wiberg ccba72b083 Add factory default, all switch ports in group VLAN 1 on br0
This change checks¹ if the system does not have a br0 interface, creates
a default one consisting of all switch ports in VLAN 1 of br0.

On top of br0 a vlan1 management interface is created with DHCP address.

For emulation and test purposes, a way to supply tap interfaces from
Qemu, and pass off as if they were regular switch ports, is added.
____
¹ obviously a better way to detect a factory-reset device is needed,
  not all systems running infix will need or want a br0 interface.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-03 18:25:18 +01:00
Joachim Wiberg ec3c6e245a show: drop auto-port classification
This should now be handled by the swup script at bootstrap instead.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-03 18:14:43 +01:00
Joachim Wiberg 7e56dec874 board/common: new ifduown2 dhcp policy
Do not wait for dhclient to acquire first release, this will cause
unnecessary delays when booting, and not provide any real value in our
system.  Because we will never have any service that depends on a
network address being set when starting up, this is a feature that
Finit can provide for us as a condition when starting such services.

Also, never set global "README" in multiple policy files, this will
cause ifupdown2 to crash in horrific ways.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-03 17:11:02 +01:00
Joachim Wiberg ef86cd23f4 configs: enable rngd to improve entropy with /dev/hwrng
Also, enable virtio-rng-pci in Qemu for testing.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-21 10:35:37 +01:00
Joachim Wiberg 1c5730d193 configs: enable jq for all targets
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-21 10:35:00 +01:00
Joachim Wiberg 50493740e4 board/common: new script swup
Probe for switch ports, classify, rename interfaces according to mactab

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-20 16:32:21 +01:00
Joachim Wiberg c3cf4a4d60 board/common: set local mgmt interface prefix policy for ifupdown2
The default policy for management interface prefix in ifupdown2 is
"eth", which currently clashes with Infix default switch port names.
Changing our naming policy of switch ports to "swpN", mimicing the
naming using in Cumulus Linux, would also help.  To be discussed.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-16 11:29:32 +01:00
Joachim Wiberg d9841fbf3e board/common: override ifupdown2 addons.conf
We will not use features like batman, vxrd, or openvswitch.  Also, the
clagd and vxrd addons are not in ifupdown2, so likely proprietary ext.
by Cumulus.  Dropping them makes "unknown addon" warnings go away.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-16 11:27:22 +01:00
Joachim Wiberg 26e127d495 configs: enable mdnsd for all platforms
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 23:06:16 +01:00
Joachim Wiberg e3c772e25a package/ifupdown2: bump to latest git hash
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 23:05:07 +01:00
Joachim Wiberg ab6c156c89 board/common: add compat symlinks to ip command
Various scripts and tools search for the ip command in different
places.  Most distros install it to /bin/ip and symlink to /sbin
and /usr dito, but Buildroot only installs to /sbin/ip

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg 6a5ce15fc0 package/ifupdown2: use older version of python-mako for now
This is a workaround for the following code in ifupdown/template.py:37
that throw the exception with python-mako >= 1.2.0:

    try:
        self.logger.debug('setting template lookuppath to %s'
                template_lookuppath)
        lc = utils.importName('mako.lookup', 'TemplateLookup')
        self.tclassargs['lookup'] = lc(
                    directories=template_lookuppath.split(':'))
    except Exception as e:
        self.logger.warning('unable to set template lookup path'
                            ' %s (%s): are you sure \'python3-mako\''
                            'is installed?'
                            % (template_lookuppath, str(e)))

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg af6907a380 package/python-templating: port of old python-mako
The ifupdown2 package is incompatible with python-mako >= v1.2.0.  So as
a workaround we add the old one as a local override.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg 245c298f0d configs: drop old ifupdown-scripts, not needed anymore
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg 6829e0b72d Follow-up to e7d3a42: add noauto to cfgfs, optional feature atm
Unlike debugfs, cfgfs is currently an optional feature in Infix, so
let's set it to noauto for now.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg bf37f8bbf8 package/mdnsd: new package
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg dc42c70f4e configs: enable IGMP querier daemon in default builds
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg cfb8a8aa88 package/querierd: new package
The Westermo querierd is an IGMP querier daemon for use on top of a
standard Linux VLAN-aware bridge.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg 1653980b19 configs/aarch64_defconfig: enable mdio-tools
Latest Buildroot now has mdio-tools in mainline.  This is useful when
debugging devices attaced over MDIO interfaces, eg. switches.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg 08fba1ea05 buildroot: bump to latest master, preparing for 2023.02 LTS
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim Wiberg 3c02e4b675 board/common: silence runtime warnings from ifupdown2
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-14 22:21:16 +01:00
Joachim WibergandGitHub 698420b90d Mention ifupdown2, another load bearing component 2022-12-13 17:36:15 +01:00
Joachim Wiberg 63b0849ca7 qemu: prefer squashfs as initrd if enabled in .config
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-13 17:34:19 +01:00
Joachim Wiberg 66f605681d configs: enable socat, for testing and scripting
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-13 17:34:19 +01:00
Joachim Wiberg 989a81fdc9 Enable ifupdown2 for all platforms, replacing BusyBox ifup/ifdown
This change replaces the BusyBox ifup/ifdown applets with the full-blown
ifupdown2 package.  To get it fully working we also need to enable a few
missing kernel features: ipv4 + ipv6, multiple routing tables, and some
netfilter features.  We take the opportunity to sync kernel features in
between the two archs as well.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-13 17:34:19 +01:00
Joachim Wiberg cd5282c636 package/ifupdown2: new package
This is the next generation ifupdown from Cumulus Networks (now NVIDIA).
The idea is to use this to set up everything port/lag/vlan/interface
related in the system.

This first import uses the kkit branch from the KernelKit fork, becuase
of, amongst other things, integration problems with upstream packages.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-13 17:34:19 +01:00
Tobias Waldekranz e7d3a42eec common: Mount configfs, if available 2022-12-12 16:07:25 +01:00
Tobias Waldekranz d56937f9dc qemu: Support passing custom options to setup user mode networking
This can be used to specify things like port forwards, TFTP server,
etc.
2022-12-12 16:07:25 +01:00
Joachim Wiberg c2c45026d0 show: add support for port classification and "show port NAME"
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-08 11:29:58 +01:00
Joachim Wiberg e2f3e43461 Update .PHONY rule, missing argument
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-08 11:29:58 +01:00
Joachim WibergandGitHub e14eccbbc0 Revert, project front page is not as wide
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-05 21:18:28 +01:00
Joachim WibergandGitHub ed341df849 Force line break in project description for effect
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-05 21:16:42 +01:00
Joachim WibergandGitHub d9fc2c68d2 Update README.md
Drop Introduction heading, redundant.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-05 21:15:18 +01:00
Joachim Wiberg 073f2fb043 qemu: move quick-help text to right before starting qemu
The qemu.sh script can fail, due to misconfiguration or other problems,
before it actually starts qemu.  Therefore, move the help text to right
before starting the emulator.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-05 21:12:04 +01:00
Joachim Wiberg 8d9bd8ec09 Roll out final product branding
Change all inf/IX or Inf/IX to plain Infix after steering group meeting.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-05 21:09:05 +01:00
Joachim Wiberg 333f972d12 board/marvell: drop linux-extras, merged in aarch6/linux_defconfig
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-12-05 20:39:03 +01:00
Joachim Wiberg 5446978a5a Minor, spellcheck and mention new EspressoBIN support
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-26 17:59:41 +01:00
Joachim Wiberg 179024b091 doc: add raw svg logos made using Inkscape
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-26 17:09:43 +01:00
Joachim Wiberg a83542df8d Change to logo variant more suitable for dark mode
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-26 17:09:15 +01:00
Joachim Wiberg 1b426edc2a New logo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-26 17:08:59 +01:00
Joachim Wiberg 6530bcaacb Drop ASCII logo and convert to an introduction
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-26 17:08:46 +01:00
Joachim Wiberg 5adb612dda board/aarch64: initial support for EspressoBIN
- Drop Cortex A72 in favor of more general A53 images
 - Enable device trees for all supported EspressoBIN models
 - Bump kernel to latest 6.0
 - Currently only starts from SD card, so add genimage to post-build
 - Create Ext2/4 disk image for SD card
 - Add infix-rw partition to sd-card image
 - The genimage tool needs genext2fs to create rw.ext4

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-26 17:05:26 +01:00
Joachim Wiberg 0bbb908114 patches/mstdp: drop, already in Buildroot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-26 17:05:14 +01:00
Tobias Waldekranz 9358a0f277 aarch64: Enable SMP support for SparX-5i
Upstream device trees specify regular PSCI support for SparX-5i, but
the U-Boot that Microchip ships does not actually support it.
Therefore, wrap the upstream version to disable PSCI and revert to
spin tables for SMP bringup.
2022-11-24 22:55:11 +01:00
Tobias Waldekranz a3ed770e1e aarch64: Add make target to flash U-Boot to the SparX-5i eval board 2022-11-24 22:55:11 +01:00
Joachim Wiberg 0a5870aa64 package/skeleton-init-finit: sync OpenSSH support from myLinux
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-23 18:03:28 +01:00
Joachim Wiberg 766e07e9c3 amd64,aarch64: change from Dropbear SSH -> OpenSSH
OpenSSH also enable OpenSSL and ZLIB, both of which we'll need later.
This in turn means Net-SNMP no longer needs its built-in OpenSSL stub.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-23 18:02:22 +01:00
Joachim Wiberg 6e2438da6e patches/tcpdump: backport DSA fix for extracting VID
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-23 14:41:23 +01:00
Joachim Wiberg 23ce9485ea packages/skeleton-init-finit: sync Finit start scripts with myLinux
This adds Finit support for starting chronydy and mstpd, as well as
an update to inadyn supporting env file for custom args.

Also included is a patch to the start script of mstpd for BusyBox pidof,
which don't have the '-c' option.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-23 14:41:23 +01:00
Joachim Wiberg 9f9581ae83 amd64,aarch64: drop Finit watchdog in favor of watchdogd
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-23 14:41:23 +01:00
Joachim Wiberg c5ffeb2d06 qemu: add default options to enable i6300 WDT and host RTC
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-23 14:41:23 +01:00
Joachim Wiberg 2a06a50687 amd64,aarch64: enable kernel watchdog driver support
- At least softdog should always be there
 - Add i6300esb driver for Qemu

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-23 14:41:23 +01:00
Joachim Wiberg 49b0e81571 aarch64,amd64: add chrony, dnsmasq, mstpd, net-snmp, ssdpd, watchdogd
- chrony will be used as NTP v3/v4 server
 - dnsmasq will serve as a DNS forwarder and DHCP server when the
   very basic BusyBox DHCP server is insufficient
 - mstpd provides RSTP support
 - ssdp-responder provides device discovery in Windows
 - watchdogd provides basic system supervision and reset cause logging

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-23 14:41:23 +01:00
Tobias Waldekranz feb73e84ef doc: Unbricking instruction for SparX-5i eval board
For...you know...other people.
2022-11-22 15:33:25 +01:00
Tobias Waldekranz 4d41f16a7e common: Add ethtool to defconfigs 2022-11-21 20:46:23 +01:00
Joachim Wiberg 41eaae2369 Follow-up to a399bc1, re-add Finit to project identity
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-20 11:36:36 +01:00
Joachim Wiberg 25205f0957 common: follow-up to 3cb7606, prevent host key regen on boot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-20 11:33:44 +01:00
Joachim Wiberg 0bdacbf59b common: add default /etc/issue
Preparing for the upcoming Finit v4.4 which takes system information
from /etc/os-release -- reduces branding efforts.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-20 11:33:44 +01:00
Joachim Wiberg a399bc1f88 motd logo too big, move to README for now
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-20 11:33:44 +01:00
Joachim Wiberg 03023c23af aarch64,amd64: enable tcpdump support
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-19 15:50:00 +01:00
Joachim Wiberg ceacc5a3dc common: add support for 'factory' to reset /rw/infix to defaults
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-19 12:36:43 +01:00
Joachim Wiberg 1d89526fac common: resize serial terminal on login
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-19 12:18:38 +01:00
Joachim Wiberg 8d0653b5e9 common: default Inf/IX message of the day
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-19 12:18:08 +01:00
Joachim Wiberg f5f4af380e common: colorize fdb/mdb and route show commands
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:54:37 +01:00
Joachim Wiberg 9ef2078758 common: standardize on 8 char (tab) indent for shell scripts
Like Buildroot

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:49:15 +01:00
Joachim Wiberg 138a4261a3 common: add 'show fdb' and 'show mdb' commands
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:48:20 +01:00
Joachim Wiberg 5355876821 common: source /etc/bash.bashrc to disable built-in help command
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:44:22 +01:00
Joachim Wiberg 4e8e5bc228 aarch64,amd64: enable netcalc command line tool
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:44:22 +01:00
Joachim Wiberg 82bd7ea032 mkfit.sh: silent by default
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:44:22 +01:00
Joachim Wiberg 8388c647bf common: add 'help' and 'show' commands
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:44:22 +01:00
Joachim Wiberg e8c2f11821 aarch64,amd64: enable LLDP support
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:08:59 +01:00
Joachim Wiberg 3cb760626e aarch64,amd64: enable SSH servver support using Dropbear daemon
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:08:59 +01:00
Joachim Wiberg 71948c6c9b aarch64,amd64: enable IEC 62439-2 MRP bridge and userspace support
Set up bridge first:

    root@infix:~# ip link set dev eth0 up
    root@infix:~# ip link set dev eth1 up
    root@infix:~# ip link set dev eth2 up
    root@infix:~# ip link set dev eth3 up
    root@infix:~# ip link add name br0 type bridge
    root@infix:~# ip link set dev eth0 master br0
    root@infix:~# ip link set dev eth1 master br0
    root@infix:~# ip link set dev eth2 master br0
    root@infix:~# ip link set dev eth3 master br0

Start MRP server and add a configuration:

    root@infix:~# mrp_server &
    root@infix:~# mrp addmrp bridge br0 ring_nr 1 pport eth0 sport eth1 ring_role mrm
    root@infix:~# mrp addmrp bridge br0 ring_nr 2 pport eth2 sport eth3 ring_role mrm
    root@infix:~# mrp getmrp
    bridge: br0 ring_nr: 1 pport: eth0 sport: eth1 ring_role: MRM ring_state: CHK_RO
    bridge: br0 ring_nr: 2 pport: eth2 sport: eth3 ring_role: MRM ring_state: CHK_RC

Once all rings are set up:

    root@infix:~# ip link set dev br0 up

For more information, see:

 - https://github.com/microchip-ung/mrp
 - https://lwn.net/Articles/809089/

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:08:59 +01:00
Joachim Wiberg 8fe0ac2901 Follow-up to 0332cfe: fix aarch64 toolchain regression
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 17:08:59 +01:00
Tobias Waldekranz dc9de06317 README: Add some basic documentation 2022-11-18 16:24:32 +01:00
Tobias Waldekranz 4948cfebff aarch64/sparx5: Add support for PCB135 (eMMC) board 2022-11-18 16:24:32 +01:00
Tobias Waldekranz cef9cd9e44 aarch64/kernel: Support SparX-5i 2022-11-18 16:24:32 +01:00
Joachim WibergandTobias Waldekranz 15572e9ec6 aarch64: enable bash, en_CA locale, tzdata, and tmux
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim WibergandTobias Waldekranz e641ca947e aarch64: replace package override with local.mk rule in external.mk
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim WibergandTobias Waldekranz 0332cfe483 configs: bump kernel to last 5.19
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim WibergandTobias Waldekranz 0d31903736 amd64: enable common rootfs overlay import Buildroot linux_defconfig
The Buildroot linux_defconfig doesn't have CONFIG_OVERLAY_FS, which we
need for our shared rootfs overlay.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim WibergandTobias Waldekranz 92dde2ea20 amd64: enable bash, en_CA locale, tzdata, and tmux
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim WibergandTobias Waldekranz d322a7153c configs: sync aarch64 and amd64 defconfigs, same kernel + packages
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim WibergandTobias Waldekranz 9e3a9e12d1 amd64: update defconfig and change from uclibc to glibc
Also, like the other defconfigs, ensure we have gdb-server on target.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim WibergandTobias Waldekranz d8d05b5278 qemu: silence dd and mkfs outputs, otherwise used by qemu
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim WibergandTobias Waldekranz 7badb97d06 qemu: add support for x86_64 with ext2 rootfs
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 12:05:51 +01:00
Joachim Wiberg e3c4bffb99 qemu: drop debug message from stdout
Fixes first-start error: "Qemu: cannot find 'Creating'"

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-11-18 07:59:54 +01:00
Tobias Waldekranz b2befc4566 build: Optionally build an FIT image with all enabled DTBs 2022-11-17 20:26:53 +01:00
Tobias Waldekranz aba3d1c5ce aarch64: Add post-build script to defconfig 2022-11-17 20:24:53 +01:00
Tobias Waldekranz 7477f81d71 post-image: Remove old QEMU remnants
TODO: Restore x86_64 support
2022-11-17 20:16:38 +01:00
Tobias Waldekranz 5ec3817bf3 aarch64/sparx5: Add defconfig to build U-Boot for devboard 2022-11-17 16:05:20 +01:00
Tobias Waldekranz 4232b22b76 qemu: Add virtualization support
The virtualized system is configured through kconfig under "External
Options"->"QEMU Virtualization".

To launch the system, simply run "make run". This works both from
output directories, and from the infix root with O= set.
2022-11-17 00:19:23 +01:00
Tobias Waldekranz e2fbd55970 aarch64: Add kernel defconfig
Default to build CN9130 for now.
2022-11-16 20:29:48 +01:00
Tobias Waldekranz e8943b77cf rootfs: Disable mg backups by default 2022-11-16 20:28:41 +01:00
Tobias Waldekranz 1e326a1ce2 rootfs: Add ipaddr/iplink aliases to the default profile 2022-11-16 20:27:42 +01:00
Tobias Waldekranz 45d07372d8 rootfs: Pluggable ifup scripts
Allow networking config to be supplied from multiple fragmens in
/etc/network/interfaces.d. This way, a user can customize their setup
without having to override /etc/network/interfaces.
2022-10-06 10:50:32 +02:00
Tobias Waldekranz d3e32f3286 rootfs: Add support for persistent system configuration 2022-10-06 10:46:13 +02:00
Tobias Waldekranz c4e6a24a47 rootfs: Add common overlay
Start out with some convenience macros and a proper PS1.
2022-10-06 10:46:02 +02:00
Tobias Waldekranz ef8f975b58 aarch64: Add mg and iproute2 to defconfig 2022-10-06 10:41:51 +02:00
Tobias Waldekranz 8b4c2615b2 aarch64: Initial support
Start with a basic config for the CN9130-CRB board.
2022-09-27 16:02:20 +02:00
Tobias Waldekranz 2bffa52be3 common/post-build: Use infix's version, not buildroot's, in os-release
This way we can more easily know exactly from which commit an image
was built.
2022-09-27 16:02:20 +02:00
Tobias Waldekranz 878e46c3f9 common/post-build: Make architecture independent
Until there's a real need to specify a variant, let's just not.
2022-09-27 16:02:20 +02:00
Tobias Waldekranz 9f31622e77 Add defconfig to build U-Boot for CN9130 CRB
NOTE: We globally disable stack protection, as the ATF specific
setting for disabling it does not seem to be respected by all rules in
the repo.
2022-09-27 13:26:23 +02:00
Tobias Waldekranz 3d9ad3b65b boot/arm-trusted-firmware: Workaround for non-GIT source builds
For some reason, the ATF build system does not deem an mv-ddr-marvell
archive to be valid unless it versioned using GIT. This is obviously
not the case when building from a tarball downloaded from GitHub.

Therefore, remove the check.

Despite the ominous warning above the removed line, the lack of a .git
directory does not seem to have any detrimental effect on the
generated artifact - at least not on a Marvell CN9130 build.
2022-09-27 13:20:06 +02:00
Tobias Waldekranz f6348db852 buildroot: Bump to 2022.08 2022-09-13 13:28:46 +02:00
Joachim Wiberg 2181bda965 package/finit: wrap custom fstab setting in an advanced sub-menu
Turns out its real easy to get this wrong, ending up with a "" as your
default fstab.  Since this is an advanced option let's mark it as such.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-06-13 05:43:05 +02:00
Joachim Wiberg 22de57e0dc configs: enable Buildroot host env. setup for SDK relocation
Note: update-defconfig moved sysklogd config and dropped custom headers.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-06-13 05:42:08 +02:00
Joachim Wiberg 38b5c16dc1 board/common: generate /etc/os-release in new post-build.sh
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-18 08:33:23 +02:00
Joachim Wiberg 06c1306dc5 board/common: enable kernel quiet mode by default
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-17 08:49:31 +02:00
Joachim Wiberg 976c45b2b1 configs/amd64: add e2fsprogs for fsck.auto
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-17 08:49:13 +02:00
Joachim Wiberg 123937ea5f configs/amd64: enable sysklogd as system logger
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-17 08:45:50 +02:00
Joachim Wiberg 48195a1894 configs/amd64: enable finit by default
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-17 08:44:44 +02:00
Joachim Wiberg 2dd603113b package/finit: new init package, with skeleton
This patch imports Finit v4.3 from myLinux to infIX along with a
rudimentary rootfs skeleton.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-17 08:43:08 +02:00
Joachim Wiberg 1b492c905a configs: add custom BusyBox defconfig for amd64_defconfig
- Disable default init
 - Disable syslogd/klogd

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-17 08:41:11 +02:00
Joachim Wiberg fb018ece43 Minor fixups, make buildroot/Makefile and order-only dep
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-16 08:23:10 +02:00
Joachim Wiberg a441f9a988 Create basic BR2_EXTERNAL, with a twist
Initial defconfig is based on Buildroot qemu_x86_64_defconfig, with a
Bootlin pre-built toolchain and a very basic qemu.sh script, generated
by a local post-image.sh, for `make run`.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-05-09 19:52:45 +02:00
2080 changed files with 40561 additions and 1540674 deletions
+45
View File
@@ -0,0 +1,45 @@
Contributor Code of Conduct
===========================
As contributors and maintainers of this project, and in the interest of
fostering an open and welcoming community, we pledge to respect all
people who contribute through reporting issues, posting feature
requests, updating documentation, submitting pull requests or patches,
and other activities.
We are committed to making participation in this project a
harassment-free experience for everyone, regardless of level of
experience, gender, gender identity and expression, sexual orientation,
disability, personal appearance, body size, race, ethnicity, age,
religion, or nationality.
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery
* Personal attacks
* Trolling or insulting/derogatory comments
* Public or private harassment
* Publishing other's private information, such as physical or electronic
addresses, without explicit permission
* Other unethical or unprofessional conduct.
Project maintainers have the right and responsibility to remove, edit,
or reject comments, commits, code, wiki edits, issues, and other
contributions that are not aligned to this Code of Conduct. By adopting
this Code of Conduct, project maintainers commit themselves to fairly
and consistently applying these principles to every aspect of managing
this project. Project maintainers who do not follow or enforce the Code
of Conduct may be permanently removed from the project team.
This code of conduct applies both within project spaces and in public
spaces when an individual is representing the project or its community.
Instances of abusive, harassing, or otherwise unacceptable behavior may
be reported by opening an issue or contacting one or more of the project
maintainers.
This Code of Conduct is adapted from the [Contributor Covenant][1],
[version 1.2.0][2].
[1]: http://contributor-covenant.org
[2]: http://contributor-covenant.org/version/1/2/0/
+76
View File
@@ -0,0 +1,76 @@
Contributing to Infix
=====================
We welcome any and all help in the form of bug reports, fixes, patches
to add new features -- *preferably as GitHub pull requests*.
If you are unsure of what to do, or how to implement an idea or bug fix,
open an issue with `"[RFC]: Unsure if this is a bug ... ?"`, or use the
[GitHub discussions forum](https://github.com/orgs/kernelkit/discussions).
Talking about code and problems first is often the best way to get started
before submitting a pull request.
When submitting a bug report, patch, or pull request, please start by
stating the version the change is made against, what it does, and why.
Please take care to ensure you follow the project coding style and the
commit message format. If you follow these recommendations you help
the maintainer(s) and make it easier for them to include your code.
Coding Style
------------
> **Tip:** Always submit code that follows the style of surrounding code!
First of all, lines are allowed to be longer than 72 characters these
days. In fact, there exist no enforced maximum, but keeping it around
100 chars is OK.
The coding style itself is otherwise strictly Linux [KNF][].
Commit Messages
---------------
Commit messages exist to track *why* a change was made. Try to be as
clear and concise as possible in your commit messages, and always, be
proud of your work and set up a proper GIT identity for your commits:
git config --global user.name "Jane Doe"
git config --global user.email jane.doe@example.com
Example commit message from the [Pro Git][gitbook] online book, notice
how `git commit -s` is used to automatically add a `Signed-off-by`:
Brief, but clear and concise summary of changes
More detailed explanatory text, if necessary. Wrap it to about 72
characters or so. In some contexts, the first line is treated as
the subject of an email and the rest of the text as the body. The
blank line separating the ummary from the body is critical (unless
you omit the body entirely); tools like rebase can get confused if
you run the two together.
Further paragraphs come after blank lines.
- Bullet points are okay, too
- Typically a hyphen or asterisk is used for the bullet, preceded
by a single space, with blank lines in between, but conventions
vary here
Signed-off-by: Jane Doe <jane.doe@example.com>
Code of Conduct
---------------
It is expected of everyone to respect the [Code of Conduct][conduct].
The *"maintainers have the right and responsibility to remove, edit,
or reject comments, commits, code, wiki edits, issues, and other
contributions that are not aligned to this Code of Conduct."*
[KNF]: https://en.wikipedia.org/wiki/Kernel_Normal_Form
[gitbook]: https://git-scm.com/book/ch5-2.html
[conduct]: CODE-OF-CONDUCT.md
+1
View File
@@ -0,0 +1 @@
Paid support and development provided by Addiva Elektronik <https://addiva.se>
+94
View File
@@ -0,0 +1,94 @@
name: Bob the Builder
on:
pull_request:
branches:
- main
types:
- closed
workflow_dispatch:
jobs:
build:
if: ${{github.ref_name == 'main' && github.event_name == 'push'}} || github.event_name == 'workflow_dispatch'
name: Build ${{ matrix.platform }} ${{ matrix.variant }}
runs-on: ubuntu-latest
strategy:
matrix:
platform: [aarch64, x86_64]
variant: [netconf, classic]
fail-fast: false
steps:
- uses: actions/checkout@v3
- name: Set Build Variables
id: vars
run: |
if [ "${{ matrix.variant }}" = "netconf" ]; then
target=${{ matrix.platform }}
else
target=${{ matrix.platform }}-${{ matrix.variant }}
fi
echo "dir=infix-$target" >> $GITHUB_OUTPUT
echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT
- name: Restore Cache of dl/
uses: actions/cache@v3
with:
path: dl/
key: dl-${{ matrix.platform }}-${{ matrix.variant }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
restore-keys: |
dl-${{ matrix.platform }}-${{ matrix.variant }}-
dl-${{ matrix.platform }}-
dl-
- name: Restore Cache of .ccache/
uses: actions/cache@v3
with:
path: .ccache/
key: ccache-${{ matrix.platform }}-${{ matrix.variant }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
restore-keys: |
ccache-${{ matrix.platform }}-${{ matrix.variant }}-
ccache-${{ matrix.platform }}-
ccache-
- name: Configure & Build
run: |
if [ "${{ matrix.variant }}" = "netconf" ]; then
target=${{ matrix.platform }}_defconfig
else
target=${{ matrix.platform }}_${{ matrix.variant }}_defconfig
fi
echo "Buildring $target ..."
make $target
make
- name: Prepare Artifact
run: |
cd output
mv images ${{ steps.vars.outputs.dir }}
ln -s ${{ steps.vars.outputs.dir }} images
tar chfz ${{ steps.vars.outputs.tgz }} ${{ steps.vars.outputs.dir }}
- name: Test
if: matrix.platform == 'x86_64' && matrix.variant == 'netconf'
run: |
make test-qeneth
- uses: actions/upload-artifact@v3
with:
path: output/${{ steps.vars.outputs.tgz }}
release:
if: ${{github.repository_owner == 'kernelkit' && github.ref_name == 'main'}}
name: Upload Latest Build
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
- uses: pyTooling/Actions/releaser@main
with:
tag: latest
rm: true
token: ${{ secrets.GITHUB_TOKEN }}
files: artifact/*
- name: Summary
run: |
cat <<EOF >> $GITHUB_STEP_SUMMARY
# Latest Build Complete! :rocket:
For the public download links of these build artifacts, please see:
<https://github.com/kernelkit/infix/releases/tag/latest>
EOF
+64
View File
@@ -0,0 +1,64 @@
name: Reggie Regression
on:
push:
branches:
- '*'
pull_request:
branches:
- '*'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
build:
name: Regression Testing
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set Build Variables
id: vars
run: |
target=x86_64-minimal
echo "dir=infix-$target" >> $GITHUB_OUTPUT
echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT
- name: Restore Cache of dl/
uses: actions/cache@v3
with:
path: dl/
key: dl-x86_64-netconf-${{ hashFiles('.git/modules/buildroot/refs/heads/master', 'package/*/*.hash') }}
restore-keys: |
dl-x86_64-netconf-
dl-x86_64-
dl-
- name: Restore Cache of .ccache/
uses: actions/cache@v3
with:
path: .ccache/
key: ccache-x86_64-netconf-${{ hashFiles('.git/modules/buildroot/refs/head/master', 'package/*/*.hash') }}
restore-keys: |
ccache-x86_64-netconf-
ccache-x86_64-
ccache-
- name: Configure Minimal NETCONF
run: |
make x86_64_minimal_defconfig
- name: Build
run: |
make
- name: Prepare Artifact
run: |
cd output
mv images ${{ steps.vars.outputs.dir }}
ln -s ${{ steps.vars.outputs.dir }} images
tar cfz ${{ steps.vars.outputs.tgz }} ${{ steps.vars.outputs.dir }}
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
path: output/${{ steps.vars.outputs.tgz }}
- name: Regression Test
run: |
make test-qeneth
+100
View File
@@ -0,0 +1,100 @@
name: Release General
on:
push:
tags:
- 'v[0-9]*.*'
jobs:
build:
if: github.repository == 'kernelkit/infix' && startsWith(github.ref, 'refs/tags/')
name: Build Infix ${{ github.ref_name }} [${{ matrix.platform }}-${{ matrix.variant }}]
runs-on: ubuntu-latest
strategy:
matrix:
platform: [aarch64, x86_64]
variant: [netconf, classic]
fail-fast: false
steps:
- uses: actions/checkout@v3
- name: Set Release Variables
id: build
run: |
ver=${GITHUB_REF#refs/tags/v}
echo "ver=${ver}" >> $GITHUB_OUTPUT
if echo $ver | grep -qE '[0-9.]+(-alpha|-beta|-rc)[0-9]*'; then
echo "pre=true" >> $GITHUB_OUTPUT
else
echo "pre=false" >> $GITHUB_OUTPUT
fi
if [ "${{ matrix.variant }}" = "netconf" ]; then
target=${{ matrix.platform }}-${ver}
else
target=${{ matrix.platform }}-${{ matrix.variant }}-${ver}
fi
echo "dir=infix-$target" >> $GITHUB_OUTPUT
echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT
- name: Restore Cache of dl/
uses: actions/cache@v3
with:
path: dl/
key: dl-${{ matrix.platform }}-${{ matrix.variant }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
restore-keys: |
dl-${{ matrix.platform }}-${{ matrix.variant }}-
dl-${{ matrix.platform }}-
dl-
- name: Restore Cache of .ccache/
uses: actions/cache@v3
with:
path: .ccache/
key: ccache-${{ matrix.platform }}-${{ matrix.variant }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
restore-keys: |
ccache-${{ matrix.platform }}-${{ matrix.variant }}-
ccache-${{ matrix.platform }}-
ccache-
- name: Configure & Build
env:
INFIX_RELEASE: ${{ steps.build.outputs.ver }}
run: |
if [ "${{ matrix.variant }}" = "netconf" ]; then
target=${{ matrix.platform }}_defconfig
else
target=${{ matrix.platform }}_${{ matrix.variant }}_defconfig
fi
echo "Buildring $target ..."
make $target
make
- name: Prepare Artifact
run: |
cd output
mv images ${{ steps.build.outputs.dir }}
ln -s ${{ steps.build.outputs.dir }} images
tar chfz ${{ steps.build.outputs.tgz }} ${{ steps.build.outputs.dir }}
- uses: actions/upload-artifact@v3
with:
path: output/${{ steps.build.outputs.tgz }}
release:
name: Release Infix ${{ github.ref_name }}
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
- name: Extract ChangeLog entry ...
run: |
awk '/-----*/{if (x == 1) exit; x=1;next}x' doc/ChangeLog.md \
|head -n -1 > release.md
cat release.md
- uses: ncipollo/release-action@v1
with:
name: Infix ${{ github.ref_name }}
prerelease: ${{ needs.build.outputs.pre }}
bodyFile: release.md
artifacts: artifact/*
- name: Summary
run: |
cat <<EOF >> $GITHUB_STEP_SUMMARY
# Infix ${{ github.ref_name }} Released! :rocket:
For the public download links of this release, please see:
<https://github.com/kernelkit/infix/releases/tag/${{ github.ref_name }}>
EOF
+26
View File
@@ -0,0 +1,26 @@
# To enable automatic sync of your Infix fork every day, or on dispatch,
# set the repoistory or organisation variable (not secret):
#
# SYNC_FORK = 'true'
#
# See https://docs.github.com/en/actions/learn-github-actions/variables
name: Synchronize your fork of Infix with upstream
on:
schedule:
- cron: 42 2 * * *
workflow_dispatch:
jobs:
sync_fork:
if: ${{github.repository_owner != 'kernelkit' && vars.SYNC_FORK == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: TobKed/github-forks-sync-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
upstream_repository: KernelKit/infix
upstream_branch: main
target_branch: main
force: true
tags: true
+9
View File
@@ -0,0 +1,9 @@
*~
.gdb_history
/.backup
/.ccache
/dl
/output*
/x-*
/test/.venv
/local.mk
+9
View File
@@ -0,0 +1,9 @@
[submodule "buildroot"]
path = buildroot
url = ../buildroot.git
[submodule "9pm"]
path = 9pm
url = ../9pm
[submodule "qeneth"]
path = qeneth
url = ../qeneth.git
-1744
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-18
View File
@@ -1,18 +0,0 @@
/*!
* Lunr languages, `Danish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Z-zA-0-9-",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}});
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z԰-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}});
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Z-zA-0-9-",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});
-1
View File
@@ -1 +0,0 @@
module.exports=require("./lunr.ja");
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.kn=function(){this.pipeline.reset(),this.pipeline.add(e.kn.trimmer,e.kn.stopWordFilter,e.kn.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.kn.stemmer))},e.kn.wordCharacters="ಀ-಄ಅ-ಔಕ-ಹಾ-ೌ಼-ಽೕ-ೖೝ-ೞೠ-ೡೢ-ೣ೤೥೦-೯ೱ-ೳ",e.kn.trimmer=e.trimmerSupport.generateTrimmer(e.kn.wordCharacters),e.Pipeline.registerFunction(e.kn.trimmer,"trimmer-kn"),e.kn.stopWordFilter=e.generateStopWordFilter("ಮತ್ತು ಈ ಒಂದು ರಲ್ಲಿ ಹಾಗೂ ಎಂದು ಅಥವಾ ಇದು ರ ಅವರು ಎಂಬ ಮೇಲೆ ಅವರ ತನ್ನ ಆದರೆ ತಮ್ಮ ನಂತರ ಮೂಲಕ ಹೆಚ್ಚು ನ ಆ ಕೆಲವು ಅನೇಕ ಎರಡು ಹಾಗು ಪ್ರಮುಖ ಇದನ್ನು ಇದರ ಸುಮಾರು ಅದರ ಅದು ಮೊದಲ ಬಗ್ಗೆ ನಲ್ಲಿ ರಂದು ಇತರ ಅತ್ಯಂತ ಹೆಚ್ಚಿನ ಸಹ ಸಾಮಾನ್ಯವಾಗಿ ನೇ ಹಲವಾರು ಹೊಸ ದಿ ಕಡಿಮೆ ಯಾವುದೇ ಹೊಂದಿದೆ ದೊಡ್ಡ ಅನ್ನು ಇವರು ಪ್ರಕಾರ ಇದೆ ಮಾತ್ರ ಕೂಡ ಇಲ್ಲಿ ಎಲ್ಲಾ ವಿವಿಧ ಅದನ್ನು ಹಲವು ರಿಂದ ಕೇವಲ ದ ದಕ್ಷಿಣ ಗೆ ಅವನ ಅತಿ ನೆಯ ಬಹಳ ಕೆಲಸ ಎಲ್ಲ ಪ್ರತಿ ಇತ್ಯಾದಿ ಇವು ಬೇರೆ ಹೀಗೆ ನಡುವೆ ಇದಕ್ಕೆ ಎಸ್ ಇವರ ಮೊದಲು ಶ್ರೀ ಮಾಡುವ ಇದರಲ್ಲಿ ರೀತಿಯ ಮಾಡಿದ ಕಾಲ ಅಲ್ಲಿ ಮಾಡಲು ಅದೇ ಈಗ ಅವು ಗಳು ಎ ಎಂಬುದು ಅವನು ಅಂದರೆ ಅವರಿಗೆ ಇರುವ ವಿಶೇಷ ಮುಂದೆ ಅವುಗಳ ಮುಂತಾದ ಮೂಲ ಬಿ ಮೀ ಒಂದೇ ಇನ್ನೂ ಹೆಚ್ಚಾಗಿ ಮಾಡಿ ಅವರನ್ನು ಇದೇ ಯ ರೀತಿಯಲ್ಲಿ ಜೊತೆ ಅದರಲ್ಲಿ ಮಾಡಿದರು ನಡೆದ ಆಗ ಮತ್ತೆ ಪೂರ್ವ ಆತ ಬಂದ ಯಾವ ಒಟ್ಟು ಇತರೆ ಹಿಂದೆ ಪ್ರಮಾಣದ ಗಳನ್ನು ಕುರಿತು ಯು ಆದ್ದರಿಂದ ಅಲ್ಲದೆ ನಗರದ ಮೇಲಿನ ಏಕೆಂದರೆ ರಷ್ಟು ಎಂಬುದನ್ನು ಬಾರಿ ಎಂದರೆ ಹಿಂದಿನ ಆದರೂ ಆದ ಸಂಬಂಧಿಸಿದ ಮತ್ತೊಂದು ಸಿ ಆತನ ".split(" ")),e.kn.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.kn.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var n=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(n).split("|")},e.Pipeline.registerFunction(e.kn.stemmer,"stemmer-kn"),e.Pipeline.registerFunction(e.kn.stopWordFilter,"stopWordFilter-kn")}});
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});
File diff suppressed because one or more lines are too long
-18
View File
@@ -1,18 +0,0 @@
/*!
* Lunr languages, `Norwegian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sa=function(){this.pipeline.reset(),this.pipeline.add(e.sa.trimmer,e.sa.stopWordFilter,e.sa.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sa.stemmer))},e.sa.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿ꣠-꣱ꣲ-ꣷ꣸-ꣻ꣼-ꣽꣾ-ꣿᆰ0-ᆰ9",e.sa.trimmer=e.trimmerSupport.generateTrimmer(e.sa.wordCharacters),e.Pipeline.registerFunction(e.sa.trimmer,"trimmer-sa"),e.sa.stopWordFilter=e.generateStopWordFilter('तथा अयम्‌ एकम्‌ इत्यस्मिन्‌ तथा तत्‌ वा अयम्‌ इत्यस्य ते आहूत उपरि तेषाम्‌ किन्तु तेषाम्‌ तदा इत्यनेन अधिकः इत्यस्य तत्‌ केचन बहवः द्वि तथा महत्वपूर्णः अयम्‌ अस्य विषये अयं अस्ति तत्‌ प्रथमः विषये इत्युपरि इत्युपरि इतर अधिकतमः अधिकः अपि सामान्यतया ठ इतरेतर नूतनम्‌ द न्यूनम्‌ कश्चित्‌ वा विशालः द सः अस्ति तदनुसारम् तत्र अस्ति केवलम्‌ अपि अत्र सर्वे विविधाः तत्‌ बहवः यतः इदानीम्‌ द दक्षिण इत्यस्मै तस्य उपरि नथ अतीव कार्यम्‌ सर्वे एकैकम्‌ इत्यादि। एते सन्ति उत इत्थम्‌ मध्ये एतदर्थं . स कस्य प्रथमः श्री. करोति अस्मिन् प्रकारः निर्मिता कालः तत्र कर्तुं समान अधुना ते सन्ति स एकः अस्ति सः अर्थात् तेषां कृते . स्थितम् विशेषः अग्रिम तेषाम्‌ समान स्रोतः ख म समान इदानीमपि अधिकतया करोतु ते समान इत्यस्य वीथी सह यस्मिन् कृतवान्‌ धृतः तदा पुनः पूर्वं सः आगतः किम्‌ कुल इतर पुरा मात्रा स विषये उ अतएव अपि नगरस्य उपरि यतः प्रतिशतं कतरः कालः साधनानि भूत तथापि जात सम्बन्धि अन्यत्‌ ग अतः अस्माकं स्वकीयाः अस्माकं इदानीं अन्तः इत्यादयः भवन्तः इत्यादयः एते एताः तस्य अस्य इदम् एते तेषां तेषां तेषां तान् तेषां तेषां तेषां समानः सः एकः च तादृशाः बहवः अन्ये च वदन्ति यत् कियत् कस्मै कस्मै यस्मै यस्मै यस्मै यस्मै न अतिनीचः किन्तु प्रथमं सम्पूर्णतया ततः चिरकालानन्तरं पुस्तकं सम्पूर्णतया अन्तः किन्तु अत्र वा इह इव श्रद्धाय अवशिष्यते परन्तु अन्ये वर्गाः सन्ति ते सन्ति शक्नुवन्ति सर्वे मिलित्वा सर्वे एकत्र"'.split(" ")),e.sa.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.sa.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var i=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(i).split("|")},e.Pipeline.registerFunction(e.sa.stemmer,"stemmer-sa"),e.Pipeline.registerFunction(e.sa.stopWordFilter,"stopWordFilter-sa")}});
@@ -1 +0,0 @@
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});
-18
View File
@@ -1,18 +0,0 @@
/*!
* Lunr languages, `Swedish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});
-1
View File
@@ -1 +0,0 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="஀-உஊ-ஏஐ-ஙச-ட஠-னப-யர-ஹ஺-ிீ-௉ொ-௏ௐ-௙௚-௟௠-௩௪-௯௰-௹௺-௿a-zA-Z-zA-0-9-",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}});
-1
View File
@@ -1 +0,0 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷౤౥",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}});
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}});
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}});
-206
View File
@@ -1,206 +0,0 @@
/**
* export the module via AMD, CommonJS or as a browser global
* Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
*/
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory)
} else if (typeof exports === 'object') {
/**
* Node. Does not work with strict CommonJS, but
* only CommonJS-like environments that support module.exports,
* like Node.
*/
module.exports = factory()
} else {
// Browser globals (root is window)
factory()(root.lunr);
}
}(this, function () {
/**
* Just return a value to define the module export.
* This example returns an object, but the module
* can return a function as the exported value.
*/
return function(lunr) {
// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
// (c) 2008 Taku Kudo <taku@chasen.org>
// TinySegmenter is freely distributable under the terms of a new BSD licence.
// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
function TinySegmenter() {
var patterns = {
"[一二三四五六七八九十百千万億兆]":"M",
"[一-龠々〆ヵヶ]":"H",
"[ぁ-ん]":"I",
"[ァ-ヴーア-ン゙ー]":"K",
"[a-zA-Z-zA-]":"A",
"[0-9-]":"N"
}
this.chartype_ = [];
for (var i in patterns) {
var regexp = new RegExp(i);
this.chartype_.push([regexp, patterns[i]]);
}
this.BIAS__ = -332
this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378};
this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920};
this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266};
this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352};
this.BP2__ = {"BO":60,"OO":-1762};
this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965};
this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146};
this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699};
this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973};
this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682};
this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669};
this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990};
this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832};
this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649};
this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393};
this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841};
this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68};
this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591};
this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685};
this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156};
this.TW1__ = {"につい":-4681,"東京都":2026};
this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216};
this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287};
this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865};
this.UC1__ = {"A":484,"K":93,"M":645,"O":-505};
this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646};
this.UC3__ = {"A":-1370,"I":2311};
this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646};
this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831};
this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387};
this.UP1__ = {"O":-214};
this.UP2__ = {"B":69,"O":935};
this.UP3__ = {"B":189};
this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422};
this.UQ2__ = {"BH":216,"BI":113,"OK":1759};
this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212};
this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135};
this.UW2__ = {",":-829,"、":-829,"":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568};
this.UW3__ = {",":4889,"1":-800,"":-1723,"、":4889,"々":-2311,"":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278};
this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637};
this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343};
this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"":-270,"E1":306,"ル":-673,"ン":-496};
return this;
}
TinySegmenter.prototype.ctype_ = function(str) {
for (var i in this.chartype_) {
if (str.match(this.chartype_[i][0])) {
return this.chartype_[i][1];
}
}
return "O";
}
TinySegmenter.prototype.ts_ = function(v) {
if (v) { return v; }
return 0;
}
TinySegmenter.prototype.segment = function(input) {
if (input == null || input == undefined || input == "") {
return [];
}
var result = [];
var seg = ["B3","B2","B1"];
var ctype = ["O","O","O"];
var o = input.split("");
for (i = 0; i < o.length; ++i) {
seg.push(o[i]);
ctype.push(this.ctype_(o[i]))
}
seg.push("E1");
seg.push("E2");
seg.push("E3");
ctype.push("O");
ctype.push("O");
ctype.push("O");
var word = seg[3];
var p1 = "U";
var p2 = "U";
var p3 = "U";
for (var i = 4; i < seg.length - 3; ++i) {
var score = this.BIAS__;
var w1 = seg[i-3];
var w2 = seg[i-2];
var w3 = seg[i-1];
var w4 = seg[i];
var w5 = seg[i+1];
var w6 = seg[i+2];
var c1 = ctype[i-3];
var c2 = ctype[i-2];
var c3 = ctype[i-1];
var c4 = ctype[i];
var c5 = ctype[i+1];
var c6 = ctype[i+2];
score += this.ts_(this.UP1__[p1]);
score += this.ts_(this.UP2__[p2]);
score += this.ts_(this.UP3__[p3]);
score += this.ts_(this.BP1__[p1 + p2]);
score += this.ts_(this.BP2__[p2 + p3]);
score += this.ts_(this.UW1__[w1]);
score += this.ts_(this.UW2__[w2]);
score += this.ts_(this.UW3__[w3]);
score += this.ts_(this.UW4__[w4]);
score += this.ts_(this.UW5__[w5]);
score += this.ts_(this.UW6__[w6]);
score += this.ts_(this.BW1__[w2 + w3]);
score += this.ts_(this.BW2__[w3 + w4]);
score += this.ts_(this.BW3__[w4 + w5]);
score += this.ts_(this.TW1__[w1 + w2 + w3]);
score += this.ts_(this.TW2__[w2 + w3 + w4]);
score += this.ts_(this.TW3__[w3 + w4 + w5]);
score += this.ts_(this.TW4__[w4 + w5 + w6]);
score += this.ts_(this.UC1__[c1]);
score += this.ts_(this.UC2__[c2]);
score += this.ts_(this.UC3__[c3]);
score += this.ts_(this.UC4__[c4]);
score += this.ts_(this.UC5__[c5]);
score += this.ts_(this.UC6__[c6]);
score += this.ts_(this.BC1__[c2 + c3]);
score += this.ts_(this.BC2__[c3 + c4]);
score += this.ts_(this.BC3__[c4 + c5]);
score += this.ts_(this.TC1__[c1 + c2 + c3]);
score += this.ts_(this.TC2__[c2 + c3 + c4]);
score += this.ts_(this.TC3__[c3 + c4 + c5]);
score += this.ts_(this.TC4__[c4 + c5 + c6]);
// score += this.ts_(this.TC5__[c4 + c5 + c6]);
score += this.ts_(this.UQ1__[p1 + c1]);
score += this.ts_(this.UQ2__[p2 + c2]);
score += this.ts_(this.UQ3__[p3 + c3]);
score += this.ts_(this.BQ1__[p2 + c2 + c3]);
score += this.ts_(this.BQ2__[p2 + c3 + c4]);
score += this.ts_(this.BQ3__[p3 + c2 + c3]);
score += this.ts_(this.BQ4__[p3 + c3 + c4]);
score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
var p = "O";
if (score > 0) {
result.push(word);
word = "";
p = "B";
}
p1 = p2;
p2 = p3;
p3 = p;
word += seg[i];
}
result.push(word);
return result;
}
lunr.TinySegmenter = TinySegmenter;
};
}));
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"version":3,"sources":["src/templates/assets/stylesheets/palette/_scheme.scss","../../../../src/templates/assets/stylesheets/palette.scss","src/templates/assets/stylesheets/palette/_accent.scss","src/templates/assets/stylesheets/palette/_primary.scss","src/templates/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAME,sDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,mDAAA,CACA,gDAAA,CACA,yDAAA,CACA,4DAAA,CAGA,0BAAA,CACA,mCAAA,CAGA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,iCAAA,CAGA,yDAAA,CACA,iEAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,uDAAA,CAGA,8DAAA,CAKA,8DAAA,CAKA,0DAAA,CAzEA,iBCiBF,CD6DE,kHAEE,YC3DJ,CDkFE,yDACE,4BChFJ,CD+EE,2DACE,4BC7EJ,CD4EE,gEACE,4BC1EJ,CDyEE,2DACE,4BCvEJ,CDsEE,yDACE,4BCpEJ,CDmEE,0DACE,4BCjEJ,CDgEE,gEACE,4BC9DJ,CD6DE,0DACE,4BC3DJ,CD0DE,2OACE,4BC/CJ,CDsDA,+FAGE,iCCpDF,CACF,CCjDE,2BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD6CN,CCvDE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDoDN,CC9DE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD2DN,CCrEE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDkEN,CC5EE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDyEN,CCnFE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDgFN,CC1FE,kCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDuFN,CCjGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD8FN,CCxGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDqGN,CC/GE,6BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD4GN,CCtHE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDmHN,CC7HE,4BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD6HN,CCpIE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDoIN,CC3IE,6BACE,yBAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD2IN,CClJE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDkJN,CCzJE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDsJN,CE3JE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwJN,CEnKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgKN,CE3KE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwKN,CEnLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgLN,CE3LE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwLN,CEnME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgMN,CE3ME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwMN,CEnNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgNN,CE3NE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwNN,CEnOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgON,CE3OE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwON,CEnPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFmPN,CE3PE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCF2PN,CEnQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFmQN,CE3QE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCF2QN,CEnRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFgRN,CE3RE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFwRN,CEnSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BF4RN,CE5SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BFqSN,CEtRE,sEACE,4BFyRJ,CE1RE,+DACE,4BF6RJ,CE9RE,iEACE,4BFiSJ,CElSE,gEACE,4BFqSJ,CEtSE,iEACE,4BFySJ,CEhSA,8BACE,mDAAA,CACA,4DAAA,CACA,0DAAA,CACA,oDAAA,CACA,2DAAA,CAGA,4BFiSF,CE9RE,yCACE,+BFgSJ,CE7RI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCFiSN,CG7MI,mCD1EA,+CACE,8CF0RJ,CEvRI,qDACE,8CFyRN,CEpRE,iEACE,mCFsRJ,CACF,CGxNI,sCDvDA,uCACE,oCFkRJ,CACF,CEzQA,8BACE,kDAAA,CACA,4DAAA,CACA,wDAAA,CACA,oDAAA,CACA,6DAAA,CAGA,4BF0QF,CEvQE,yCACE,+BFyQJ,CEtQI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCF0QN,CEnQE,yCACE,6CFqQJ,CG9NI,0CDhCA,8CACE,gDFiQJ,CACF,CGnOI,0CDvBA,iFACE,6CF6PJ,CACF,CG3PI,sCDKA,uCACE,6CFyPJ,CACF","file":"palette.css"}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-12
View File
@@ -1,12 +0,0 @@
.md-header__title {
font-size: 1.1rem;
line-height: 2.6rem;
}
[data-md-color-primary="orange"] {
--md-primary-fg-color: #ff7f2a;
--md-primary-bg-color: #5c5f5c;
}
[data-md-color-primary="black"] {
--md-primary-bg-color: #5c5f5c;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 317 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 340 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 269 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 368 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 302 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.1 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 335 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 250 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 227 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 237 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 230 KiB

-478
View File
@@ -1,478 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="234pt"
height="155.039993pt"
viewBox="0 0 234 155.039993"
version="1.1"
id="svg141"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs53">
<g
id="g48">
<g
id="glyph-0-0" />
<g
id="glyph-0-1">
<path
d="M 4.078125 0.15625 C 3.578125 0.15625 3.117188 0.078125 2.703125 -0.078125 C 2.296875 -0.234375 1.945313 -0.460938 1.65625 -0.765625 C 1.363281 -1.066406 1.132813 -1.4375 0.96875 -1.875 C 0.8125 -2.320313 0.734375 -2.832031 0.734375 -3.40625 C 0.734375 -3.988281 0.816406 -4.503906 0.984375 -4.953125 C 1.148438 -5.398438 1.375 -5.773438 1.65625 -6.078125 C 1.9375 -6.390625 2.269531 -6.625 2.65625 -6.78125 C 3.039063 -6.9375 3.453125 -7.015625 3.890625 -7.015625 C 4.273438 -7.015625 4.632813 -6.945313 4.96875 -6.8125 C 5.3125 -6.6875 5.609375 -6.488281 5.859375 -6.21875 C 6.109375 -5.957031 6.304688 -5.625 6.453125 -5.21875 C 6.597656 -4.8125 6.671875 -4.328125 6.671875 -3.765625 C 6.671875 -3.679688 6.664063 -3.597656 6.65625 -3.515625 C 6.65625 -3.429688 6.648438 -3.347656 6.640625 -3.265625 L 1.765625 -3.265625 C 1.785156 -2.828125 1.859375 -2.445313 1.984375 -2.125 C 2.117188 -1.800781 2.289063 -1.535156 2.5 -1.328125 C 2.707031 -1.117188 2.945313 -0.960938 3.21875 -0.859375 C 3.5 -0.765625 3.796875 -0.71875 4.109375 -0.71875 C 4.347656 -0.71875 4.570313 -0.742188 4.78125 -0.796875 C 4.988281 -0.859375 5.1875 -0.945313 5.375 -1.0625 C 5.5625 -1.175781 5.726563 -1.316406 5.875 -1.484375 L 6.484375 -0.90625 C 6.285156 -0.675781 6.0625 -0.476563 5.8125 -0.3125 C 5.570313 -0.15625 5.304688 -0.0390625 5.015625 0.03125 C 4.734375 0.113281 4.421875 0.15625 4.078125 0.15625 Z M 1.8125 -4.109375 L 5.578125 -4.109375 C 5.578125 -4.429688 5.535156 -4.71875 5.453125 -4.96875 C 5.367188 -5.226563 5.25 -5.445313 5.09375 -5.625 C 4.9375 -5.8125 4.75 -5.953125 4.53125 -6.046875 C 4.320313 -6.140625 4.082031 -6.1875 3.8125 -6.1875 C 3.570313 -6.1875 3.34375 -6.144531 3.125 -6.0625 C 2.914063 -5.988281 2.71875 -5.863281 2.53125 -5.6875 C 2.351563 -5.519531 2.203125 -5.304688 2.078125 -5.046875 C 1.953125 -4.785156 1.863281 -4.472656 1.8125 -4.109375 Z M 1.8125 -4.109375 "
id="path3" />
</g>
<g
id="glyph-0-2">
<path
d="M 4.484375 0.109375 C 4.046875 0.109375 3.6875 0.0351563 3.40625 -0.109375 C 3.125 -0.265625 2.90625 -0.5 2.75 -0.8125 C 2.601563 -1.132813 2.507813 -1.535156 2.46875 -2.015625 C 2.425781 -2.492188 2.414063 -3.0625 2.4375 -3.71875 L 2.609375 -8.609375 L 3.734375 -8.75 L 3.890625 -8.765625 L 3.90625 -8.65625 C 3.851563 -8.582031 3.804688 -8.507813 3.765625 -8.4375 C 3.734375 -8.375 3.707031 -8.253906 3.6875 -8.078125 L 3.5625 -6.390625 L 3.59375 -6.125 L 3.5 -3.640625 C 3.46875 -2.878906 3.484375 -2.289063 3.546875 -1.875 C 3.617188 -1.46875 3.742188 -1.1875 3.921875 -1.03125 C 4.109375 -0.875 4.351563 -0.796875 4.65625 -0.796875 C 4.976563 -0.796875 5.265625 -0.859375 5.515625 -0.984375 C 5.773438 -1.117188 6.046875 -1.285156 6.328125 -1.484375 L 6.65625 -0.625 C 6.320313 -0.375 5.972656 -0.1875 5.609375 -0.0625 C 5.242188 0.0507813 4.867188 0.109375 4.484375 0.109375 Z M 1.046875 -6.859375 L 5.984375 -6.859375 L 5.984375 -5.96875 L 1.046875 -5.96875 Z M 1.046875 -6.859375 "
id="path6" />
</g>
<g
id="glyph-0-3">
<path
d="M 1.09375 -9.96875 L 2.28125 -9.96875 L 2.28125 -9.875 C 2.21875 -9.8125 2.175781 -9.742188 2.15625 -9.671875 C 2.144531 -9.597656 2.140625 -9.476563 2.140625 -9.3125 L 2.140625 -5.640625 C 2.328125 -5.921875 2.539063 -6.160156 2.78125 -6.359375 C 3.03125 -6.566406 3.289063 -6.726563 3.5625 -6.84375 C 3.832031 -6.957031 4.109375 -7.015625 4.390625 -7.015625 C 4.804688 -7.015625 5.171875 -6.921875 5.484375 -6.734375 C 5.796875 -6.546875 6.039063 -6.238281 6.21875 -5.8125 C 6.394531 -5.394531 6.484375 -4.84375 6.484375 -4.15625 L 6.484375 0 L 5.4375 0 L 5.4375 -4.125 C 5.4375 -4.601563 5.378906 -4.984375 5.265625 -5.265625 C 5.148438 -5.554688 5 -5.765625 4.8125 -5.890625 C 4.625 -6.015625 4.410156 -6.078125 4.171875 -6.078125 C 3.992188 -6.078125 3.804688 -6.046875 3.609375 -5.984375 C 3.421875 -5.921875 3.238281 -5.828125 3.0625 -5.703125 C 2.894531 -5.585938 2.738281 -5.441406 2.59375 -5.265625 C 2.457031 -5.097656 2.347656 -4.898438 2.265625 -4.671875 C 2.179688 -4.453125 2.140625 -4.207031 2.140625 -3.9375 L 2.140625 0 L 1.09375 0 Z M 1.09375 -9.96875 "
id="path9" />
</g>
<g
id="glyph-0-4">
<path
d="M 1.609375 -2.3125 L 5.609375 -7.453125 L 5.953125 -6.75 L 1.953125 -1.671875 Z M 3.75 0.171875 C 3.125 0.171875 2.597656 -0.0078125 2.171875 -0.375 C 1.742188 -0.75 1.414063 -1.296875 1.1875 -2.015625 C 0.96875 -2.734375 0.859375 -3.601563 0.859375 -4.625 C 0.859375 -5.613281 0.96875 -6.460938 1.1875 -7.171875 C 1.414063 -7.890625 1.742188 -8.441406 2.171875 -8.828125 C 2.597656 -9.210938 3.125 -9.40625 3.75 -9.40625 C 4.375 -9.40625 4.898438 -9.210938 5.328125 -8.828125 C 5.753906 -8.441406 6.078125 -7.890625 6.296875 -7.171875 C 6.523438 -6.460938 6.640625 -5.613281 6.640625 -4.625 C 6.640625 -3.601563 6.523438 -2.734375 6.296875 -2.015625 C 6.078125 -1.296875 5.753906 -0.75 5.328125 -0.375 C 4.898438 -0.0078125 4.375 0.171875 3.75 0.171875 Z M 3.75 -0.75 C 4.125 -0.75 4.445313 -0.898438 4.71875 -1.203125 C 4.988281 -1.503906 5.195313 -1.941406 5.34375 -2.515625 C 5.488281 -3.085938 5.5625 -3.789063 5.5625 -4.625 C 5.5625 -5.414063 5.488281 -6.097656 5.34375 -6.671875 C 5.195313 -7.242188 4.988281 -7.6875 4.71875 -8 C 4.445313 -8.320313 4.125 -8.484375 3.75 -8.484375 C 3.375 -8.484375 3.050781 -8.320313 2.78125 -8 C 2.507813 -7.6875 2.300781 -7.242188 2.15625 -6.671875 C 2.007813 -6.097656 1.9375 -5.414063 1.9375 -4.625 C 1.9375 -3.789063 2.007813 -3.085938 2.15625 -2.515625 C 2.300781 -1.941406 2.507813 -1.503906 2.78125 -1.203125 C 3.050781 -0.898438 3.375 -0.75 3.75 -0.75 Z M 3.75 -0.75 "
id="path12" />
</g>
<g
id="glyph-0-5">
<path
d="M 1.5 0 L 1.5 -0.875 L 3.25 -0.875 L 3.25 -5.984375 L 1.59375 -5.984375 L 1.59375 -6.859375 L 4.328125 -6.859375 L 4.328125 -0.875 L 5.9375 -0.875 L 5.9375 0 Z M 3.734375 -8.296875 C 3.523438 -8.296875 3.34375 -8.367188 3.1875 -8.515625 C 3.039063 -8.671875 2.96875 -8.851563 2.96875 -9.0625 C 2.96875 -9.28125 3.039063 -9.460938 3.1875 -9.609375 C 3.332031 -9.765625 3.515625 -9.84375 3.734375 -9.84375 C 3.941406 -9.84375 4.125 -9.765625 4.28125 -9.609375 C 4.4375 -9.453125 4.515625 -9.269531 4.515625 -9.0625 C 4.515625 -8.851563 4.4375 -8.671875 4.28125 -8.515625 C 4.125 -8.367188 3.941406 -8.296875 3.734375 -8.296875 Z M 3.734375 -8.296875 "
id="path15" />
</g>
<g
id="glyph-0-6">
<path
d="M 0.90625 2.5 L 0.90625 -6.859375 L 2 -6.859375 L 2 -5.5 C 2.101563 -5.851563 2.257813 -6.140625 2.46875 -6.359375 C 2.675781 -6.578125 2.914063 -6.738281 3.1875 -6.84375 C 3.457031 -6.945313 3.753906 -7 4.078125 -7 C 4.460938 -7 4.828125 -6.925781 5.171875 -6.78125 C 5.515625 -6.632813 5.816406 -6.414063 6.078125 -6.125 C 6.347656 -5.84375 6.554688 -5.476563 6.703125 -5.03125 C 6.859375 -4.59375 6.9375 -4.078125 6.9375 -3.484375 C 6.9375 -2.878906 6.851563 -2.347656 6.6875 -1.890625 C 6.53125 -1.429688 6.3125 -1.046875 6.03125 -0.734375 C 5.757813 -0.429688 5.453125 -0.203125 5.109375 -0.046875 C 4.765625 0.109375 4.410156 0.1875 4.046875 0.1875 C 3.773438 0.1875 3.507813 0.140625 3.25 0.046875 C 3 -0.0351563 2.769531 -0.15625 2.5625 -0.3125 C 2.351563 -0.476563 2.171875 -0.675781 2.015625 -0.90625 L 2.015625 2.5 Z M 3.875 -0.78125 C 4.113281 -0.78125 4.347656 -0.820313 4.578125 -0.90625 C 4.804688 -0.988281 5.015625 -1.128906 5.203125 -1.328125 C 5.390625 -1.535156 5.535156 -1.8125 5.640625 -2.15625 C 5.753906 -2.5 5.8125 -2.925781 5.8125 -3.4375 C 5.8125 -3.988281 5.742188 -4.457031 5.609375 -4.84375 C 5.472656 -5.226563 5.269531 -5.523438 5 -5.734375 C 4.738281 -5.941406 4.414063 -6.054688 4.03125 -6.078125 C 3.75 -6.097656 3.484375 -6.054688 3.234375 -5.953125 C 2.992188 -5.859375 2.78125 -5.691406 2.59375 -5.453125 C 2.40625 -5.222656 2.257813 -4.921875 2.15625 -4.546875 C 2.050781 -4.171875 2 -3.71875 2 -3.1875 C 2.007813 -2.875 2.039063 -2.585938 2.09375 -2.328125 C 2.15625 -2.066406 2.238281 -1.835938 2.34375 -1.640625 C 2.457031 -1.441406 2.585938 -1.28125 2.734375 -1.15625 C 2.890625 -1.03125 3.0625 -0.9375 3.25 -0.875 C 3.445313 -0.8125 3.65625 -0.78125 3.875 -0.78125 Z M 3.875 -0.78125 "
id="path18" />
</g>
<g
id="glyph-0-7">
<path
d="M 1.1875 0 L 1.1875 -0.875 L 3.203125 -0.875 L 3.203125 -9.109375 L 1.28125 -9.109375 L 1.28125 -9.96875 L 4.3125 -9.96875 L 4.3125 -0.875 L 6.3125 -0.875 L 6.3125 0 Z M 1.1875 0 "
id="path21" />
</g>
<g
id="glyph-0-8">
<path
d="M 3.75 0.125 C 3.125 0.125 2.570313 -0.0234375 2.09375 -0.328125 C 1.625 -0.640625 1.253906 -1.0625 0.984375 -1.59375 C 0.710938 -2.132813 0.578125 -2.75 0.578125 -3.4375 C 0.578125 -4.132813 0.710938 -4.75 0.984375 -5.28125 C 1.253906 -5.820313 1.625 -6.242188 2.09375 -6.546875 C 2.570313 -6.847656 3.125 -7 3.75 -7 C 4.375 -7 4.921875 -6.847656 5.390625 -6.546875 C 5.867188 -6.242188 6.242188 -5.820313 6.515625 -5.28125 C 6.785156 -4.75 6.921875 -4.132813 6.921875 -3.4375 C 6.921875 -2.75 6.785156 -2.132813 6.515625 -1.59375 C 6.242188 -1.0625 5.867188 -0.640625 5.390625 -0.328125 C 4.921875 -0.0234375 4.375 0.125 3.75 0.125 Z M 3.75 -0.78125 C 4.144531 -0.78125 4.492188 -0.894531 4.796875 -1.125 C 5.097656 -1.351563 5.335938 -1.664063 5.515625 -2.0625 C 5.691406 -2.46875 5.78125 -2.929688 5.78125 -3.453125 C 5.78125 -3.972656 5.691406 -4.429688 5.515625 -4.828125 C 5.335938 -5.234375 5.097656 -5.546875 4.796875 -5.765625 C 4.492188 -5.992188 4.144531 -6.109375 3.75 -6.109375 C 3.363281 -6.109375 3.015625 -5.992188 2.703125 -5.765625 C 2.398438 -5.546875 2.160156 -5.234375 1.984375 -4.828125 C 1.804688 -4.429688 1.71875 -3.972656 1.71875 -3.453125 C 1.71875 -2.929688 1.804688 -2.46875 1.984375 -2.0625 C 2.160156 -1.664063 2.398438 -1.351563 2.703125 -1.125 C 3.015625 -0.894531 3.363281 -0.78125 3.75 -0.78125 Z M 3.75 -0.78125 "
id="path24" />
</g>
<g
id="glyph-1-0">
<path
d="M 1.6875 0 L 1.6875 -8.4375 L 8.4375 -8.4375 L 8.4375 0 Z M 1.90625 -0.21875 L 8.234375 -0.21875 L 8.234375 -8.234375 L 1.90625 -8.234375 Z M 1.90625 -0.21875 "
id="path27" />
</g>
<g
id="glyph-1-1">
<path
d="M 5.015625 -2.234375 L 6.875 -1.921875 C 6.632813 -1.242188 6.257813 -0.726563 5.75 -0.375 C 5.238281 -0.0195313 4.597656 0.15625 3.828125 0.15625 C 2.609375 0.15625 1.707031 -0.238281 1.125 -1.03125 C 0.65625 -1.664063 0.421875 -2.472656 0.421875 -3.453125 C 0.421875 -4.609375 0.722656 -5.515625 1.328125 -6.171875 C 1.941406 -6.828125 2.710938 -7.15625 3.640625 -7.15625 C 4.679688 -7.15625 5.5 -6.8125 6.09375 -6.125 C 6.695313 -5.4375 6.988281 -4.382813 6.96875 -2.96875 L 2.328125 -2.96875 C 2.335938 -2.414063 2.484375 -1.984375 2.765625 -1.671875 C 3.054688 -1.367188 3.414063 -1.21875 3.84375 -1.21875 C 4.132813 -1.21875 4.378906 -1.296875 4.578125 -1.453125 C 4.773438 -1.617188 4.921875 -1.878906 5.015625 -2.234375 Z M 5.125 -4.09375 C 5.113281 -4.632813 4.972656 -5.039063 4.703125 -5.3125 C 4.441406 -5.59375 4.125 -5.734375 3.75 -5.734375 C 3.34375 -5.734375 3.007813 -5.585938 2.75 -5.296875 C 2.488281 -5.003906 2.359375 -4.601563 2.359375 -4.09375 Z M 5.125 -4.09375 "
id="path30" />
</g>
<g
id="glyph-1-2">
<path
d="M 0.078125 0 L 2.609375 -3.609375 L 0.1875 -7 L 2.453125 -7 L 3.6875 -5.078125 L 4.984375 -7 L 7.171875 -7 L 4.796875 -3.6875 L 7.390625 0 L 5.109375 0 L 3.6875 -2.171875 L 2.25 0 Z M 0.078125 0 "
id="path33" />
</g>
<g
id="glyph-1-3">
<path
d="M 2.359375 -4.859375 L 0.671875 -5.171875 C 0.859375 -5.847656 1.179688 -6.347656 1.640625 -6.671875 C 2.109375 -6.992188 2.796875 -7.15625 3.703125 -7.15625 C 4.523438 -7.15625 5.140625 -7.054688 5.546875 -6.859375 C 5.953125 -6.671875 6.238281 -6.425781 6.40625 -6.125 C 6.570313 -5.820313 6.65625 -5.269531 6.65625 -4.46875 L 6.625 -2.296875 C 6.625 -1.679688 6.65625 -1.226563 6.71875 -0.9375 C 6.78125 -0.644531 6.890625 -0.332031 7.046875 0 L 5.21875 0 C 5.164063 -0.125 5.109375 -0.304688 5.046875 -0.546875 C 5.015625 -0.660156 4.992188 -0.734375 4.984375 -0.765625 C 4.660156 -0.453125 4.316406 -0.21875 3.953125 -0.0625 C 3.597656 0.0820313 3.21875 0.15625 2.8125 0.15625 C 2.09375 0.15625 1.523438 -0.0351563 1.109375 -0.421875 C 0.691406 -0.816406 0.484375 -1.3125 0.484375 -1.90625 C 0.484375 -2.300781 0.578125 -2.65625 0.765625 -2.96875 C 0.953125 -3.28125 1.210938 -3.515625 1.546875 -3.671875 C 1.890625 -3.835938 2.382813 -3.984375 3.03125 -4.109375 C 3.894531 -4.273438 4.492188 -4.425781 4.828125 -4.5625 L 4.828125 -4.75 C 4.828125 -5.101563 4.738281 -5.351563 4.5625 -5.5 C 4.382813 -5.65625 4.054688 -5.734375 3.578125 -5.734375 C 3.242188 -5.734375 2.984375 -5.671875 2.796875 -5.546875 C 2.617188 -5.421875 2.472656 -5.191406 2.359375 -4.859375 Z M 4.828125 -3.359375 C 4.585938 -3.285156 4.210938 -3.191406 3.703125 -3.078125 C 3.191406 -2.960938 2.859375 -2.851563 2.703125 -2.75 C 2.453125 -2.582031 2.328125 -2.367188 2.328125 -2.109375 C 2.328125 -1.847656 2.421875 -1.617188 2.609375 -1.421875 C 2.804688 -1.234375 3.054688 -1.140625 3.359375 -1.140625 C 3.691406 -1.140625 4.007813 -1.253906 4.3125 -1.484375 C 4.539063 -1.648438 4.691406 -1.851563 4.765625 -2.09375 C 4.804688 -2.25 4.828125 -2.550781 4.828125 -3 Z M 4.828125 -3.359375 "
id="path36" />
</g>
<g
id="glyph-1-4">
<path
d="M 0.828125 -7 L 2.53125 -7 L 2.53125 -6.046875 C 3.144531 -6.785156 3.875 -7.15625 4.71875 -7.15625 C 5.164063 -7.15625 5.550781 -7.0625 5.875 -6.875 C 6.207031 -6.695313 6.484375 -6.421875 6.703125 -6.046875 C 7.003906 -6.421875 7.332031 -6.695313 7.6875 -6.875 C 8.050781 -7.0625 8.429688 -7.15625 8.828125 -7.15625 C 9.347656 -7.15625 9.785156 -7.050781 10.140625 -6.84375 C 10.492188 -6.632813 10.757813 -6.328125 10.9375 -5.921875 C 11.0625 -5.628906 11.125 -5.144531 11.125 -4.46875 L 11.125 0 L 9.28125 0 L 9.28125 -4 C 9.28125 -4.695313 9.210938 -5.144531 9.078125 -5.34375 C 8.910156 -5.601563 8.648438 -5.734375 8.296875 -5.734375 C 8.035156 -5.734375 7.789063 -5.65625 7.5625 -5.5 C 7.332031 -5.34375 7.164063 -5.109375 7.0625 -4.796875 C 6.96875 -4.492188 6.921875 -4.015625 6.921875 -3.359375 L 6.921875 0 L 5.0625 0 L 5.0625 -3.84375 C 5.0625 -4.519531 5.023438 -4.957031 4.953125 -5.15625 C 4.890625 -5.351563 4.789063 -5.5 4.65625 -5.59375 C 4.519531 -5.6875 4.332031 -5.734375 4.09375 -5.734375 C 3.8125 -5.734375 3.554688 -5.65625 3.328125 -5.5 C 3.097656 -5.351563 2.929688 -5.132813 2.828125 -4.84375 C 2.734375 -4.550781 2.6875 -4.070313 2.6875 -3.40625 L 2.6875 0 L 0.828125 0 Z M 0.828125 -7 "
id="path39" />
</g>
<g
id="glyph-1-5">
<path
d="M 0.921875 -7 L 2.640625 -7 L 2.640625 -5.96875 C 2.867188 -6.320313 3.171875 -6.609375 3.546875 -6.828125 C 3.929688 -7.046875 4.359375 -7.15625 4.828125 -7.15625 C 5.640625 -7.15625 6.328125 -6.835938 6.890625 -6.203125 C 7.460938 -5.566406 7.75 -4.679688 7.75 -3.546875 C 7.75 -2.367188 7.460938 -1.457031 6.890625 -0.8125 C 6.316406 -0.164063 5.625 0.15625 4.8125 0.15625 C 4.425781 0.15625 4.078125 0.0820313 3.765625 -0.0625 C 3.453125 -0.21875 3.117188 -0.484375 2.765625 -0.859375 L 2.765625 2.65625 L 0.921875 2.65625 Z M 2.75 -3.625 C 2.75 -2.832031 2.90625 -2.25 3.21875 -1.875 C 3.53125 -1.5 3.910156 -1.3125 4.359375 -1.3125 C 4.785156 -1.3125 5.140625 -1.484375 5.421875 -1.828125 C 5.710938 -2.171875 5.859375 -2.738281 5.859375 -3.53125 C 5.859375 -4.257813 5.710938 -4.800781 5.421875 -5.15625 C 5.128906 -5.519531 4.765625 -5.703125 4.328125 -5.703125 C 3.867188 -5.703125 3.488281 -5.523438 3.1875 -5.171875 C 2.894531 -4.816406 2.75 -4.300781 2.75 -3.625 Z M 2.75 -3.625 "
id="path42" />
</g>
<g
id="glyph-1-6">
<path
d="M 0.96875 0 L 0.96875 -9.65625 L 2.828125 -9.65625 L 2.828125 0 Z M 0.96875 0 "
id="path45" />
</g>
</g>
<clipPath
id="clip-0">
<path
clip-rule="nonzero"
d="M 72 118 L 94 118 L 94 153 L 72 153 Z M 72 118 "
id="path50" />
</clipPath>
</defs>
<path
fill-rule="nonzero"
fill="rgb(100%, 94.898987%, 79.998779%)"
fill-opacity="1"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(83.918762%, 71.369934%, 33.729553%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 40.000002 1 L 310.000013 1 L 310.000013 201.000008 L 40.000002 201.000008 Z M 40.000002 1 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path55" />
<path
fill-rule="nonzero"
fill="rgb(97.24884%, 80.778503%, 79.998779%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 70.000003 122.000005 L 150.000006 122.000005 L 150.000006 162.000007 L 70.000003 162.000007 Z M 70.000003 122.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path57" />
<g
fill="#000000"
fill-opacity="1"
id="g67">
<use
xlink:href="#glyph-0-1"
x="67.5"
y="111.74999"
id="use59" />
<use
xlink:href="#glyph-0-2"
x="75"
y="111.74999"
id="use61" />
<use
xlink:href="#glyph-0-3"
x="82.5"
y="111.74999"
id="use63" />
<use
xlink:href="#glyph-0-4"
x="89.999992"
y="111.74999"
id="use65" />
</g>
<path
fill-rule="nonzero"
fill="rgb(97.24884%, 80.778503%, 79.998779%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 120.000005 112.000005 L 140.000006 112.000005 L 140.000006 122.000005 L 120.000005 122.000005 Z M 120.000005 112.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path69" />
<path
fill-rule="nonzero"
fill="rgb(97.24884%, 80.778503%, 79.998779%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 85.000005 116.999996 C 91.666672 116.999996 95.000006 120.333329 95.000006 126.999996 C 95.000006 133.666663 91.666672 136.999997 85.000005 136.999997 Z M 85.000005 116.999996 "
transform="matrix(0, 0.75, -0.75, 0, 162.749993, 27.749999)"
id="path71" />
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 80.000003 167.000007 L 140.000006 167.000007 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path73" />
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 110.000005 76.000003 C 110.000005 77.312503 109.869796 78.614587 109.614588 79.901045 C 109.35938 81.187503 108.979171 82.442712 108.479171 83.656253 C 107.973963 84.864587 107.359379 86.020837 106.630213 87.109379 C 105.901046 88.203129 105.072921 89.213545 104.140629 90.140629 C 103.213546 91.07292 102.203129 91.901045 101.109379 92.630212 C 100.020838 93.359379 98.864587 93.973962 97.656254 94.479171 C 96.442712 94.979171 95.187504 95.359379 93.901046 95.614587 C 92.614587 95.869796 91.312504 96.000004 90.000004 96.000004 C 88.687504 96.000004 87.38542 95.869796 86.098962 95.614587 C 84.812504 95.359379 83.557295 94.979171 82.343753 94.479171 C 81.13542 93.973962 79.97917 93.359379 78.890628 92.630212 C 77.796878 91.901045 76.786462 91.07292 75.859378 90.140629 C 74.927086 89.213545 74.098961 88.203129 73.369795 87.109379 C 72.640628 86.020837 72.026045 84.864587 71.520836 83.656253 C 71.020836 82.442712 70.640628 81.187503 70.38542 79.901045 C 70.130211 78.614587 70.000003 77.312503 70.000003 76.000003 C 70.000003 74.687503 70.130211 73.38542 70.38542 72.098961 C 70.640628 70.812503 71.020836 69.557295 71.520836 68.343753 C 72.026045 67.135419 72.640628 65.979169 73.369795 64.890628 C 74.098961 63.796878 74.927086 62.786461 75.859378 61.859378 C 76.786462 60.927086 77.796878 60.098961 78.890628 59.369794 C 79.97917 58.640627 81.13542 58.026044 82.343753 57.520836 C 83.557295 57.020836 84.812504 56.640627 86.098962 56.385419 C 87.38542 56.130211 88.687504 56.000002 90.000004 56.000002 C 91.312504 56.000002 92.614587 56.130211 93.901046 56.385419 C 95.187504 56.640627 96.442712 57.020836 97.656254 57.520836 C 98.864587 58.026044 100.020838 58.640627 101.109379 59.369794 C 102.203129 60.098961 103.213546 60.927086 104.140629 61.859378 C 105.072921 62.786461 105.901046 63.796878 106.630213 64.890628 C 107.359379 65.979169 107.973963 67.135419 108.479171 68.343753 C 108.979171 69.557295 109.35938 70.812503 109.614588 72.098961 C 109.869796 73.38542 110.000005 74.687503 110.000005 76.000003 Z M 110.000005 76.000003 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path75" />
<g
fill="#333333"
fill-opacity="1"
id="g81">
<use
xlink:href="#glyph-0-5"
x="59.999996"
y="62.249996"
id="use77" />
<use
xlink:href="#glyph-0-6"
x="67.5"
y="62.249996"
id="use79" />
</g>
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 85.000004 87.999996 C 91.666671 87.999996 95.000004 91.333329 95.000004 97.999996 C 95.000004 104.666663 91.666671 107.999997 85.000004 107.999997 Z M 85.000004 87.999996 "
transform="matrix(0, 0.75, -0.75, 0, 140.999994, 6)"
id="path83" />
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 90.000004 103.000004 L 89.828129 119.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path85" />
<path
fill-rule="nonzero"
fill="rgb(39.99939%, 39.99939%, 39.99939%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 92.802087 122.000005 C 92.802087 122.395838 92.723962 122.781255 92.572921 123.145838 C 92.421879 123.51563 92.203129 123.838547 91.921879 124.119797 C 91.640629 124.401047 91.317712 124.619797 90.94792 124.770839 C 90.578129 124.92188 90.19792 125.000005 89.802087 125.000005 C 89.401045 125.000005 89.020837 124.92188 88.651045 124.770839 C 88.286462 124.619797 87.958337 124.401047 87.677087 124.119797 C 87.395837 123.838547 87.182295 123.51563 87.026045 123.145838 C 86.875004 122.781255 86.802087 122.395838 86.802087 122.000005 C 86.802087 121.604172 86.875004 121.218755 87.026045 120.854172 C 87.182295 120.48438 87.395837 120.161463 87.677087 119.880213 C 87.958337 119.598963 88.286462 119.380213 88.651045 119.229172 C 89.020837 119.07813 89.401045 119.000005 89.802087 119.000005 C 90.19792 119.000005 90.578129 119.07813 90.94792 119.229172 C 91.317712 119.380213 91.640629 119.598963 91.921879 119.880213 C 92.203129 120.161463 92.421879 120.48438 92.572921 120.854172 C 92.723962 121.218755 92.802087 121.604172 92.802087 122.000005 Z M 92.802087 122.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path87" />
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 190.000008 122.000005 L 270.000011 122.000005 L 270.000011 162.000007 L 190.000008 162.000007 Z M 190.000008 122.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path89" />
<g
fill="#333333"
fill-opacity="1"
id="g95">
<use
xlink:href="#glyph-0-7"
x="165"
y="111.74999"
id="use91" />
<use
xlink:href="#glyph-0-8"
x="172.5"
y="111.74999"
id="use93" />
</g>
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 240.00001 112.000005 L 260.000011 112.000005 L 260.000011 122.000005 L 240.00001 122.000005 Z M 240.00001 112.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path97" />
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 205.000005 116.999991 C 211.666672 116.999991 215.000006 120.333324 215.000006 126.999991 C 215.000006 133.666658 211.666672 136.999992 205.000005 136.999992 Z M 205.000005 116.999991 "
transform="matrix(0, 0.75, -0.75, 0, 252.749989, -62.249997)"
id="path99" />
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 210.000009 162.000007 L 210.000009 182.000008 L 250.00001 182.000008 L 250.00001 170.23959 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path101" />
<path
fill-rule="nonzero"
fill="rgb(39.99939%, 39.99939%, 39.99939%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 250.00001 164.23959 L 254.000011 172.239591 L 250.00001 170.23959 L 246.00001 172.239591 Z M 250.00001 164.23959 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path103" />
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 230.00001 76.000003 C 230.00001 77.312503 229.869801 78.614587 229.614593 79.901045 C 229.359385 81.187503 228.979176 82.442712 228.479176 83.656253 C 227.973968 84.864587 227.359384 86.020837 226.630218 87.109379 C 225.901051 88.203129 225.072926 89.213545 224.140634 90.140629 C 223.213551 91.07292 222.203134 91.901045 221.109384 92.630212 C 220.020843 93.359379 218.864592 93.973962 217.656259 94.479171 C 216.442717 94.979171 215.187509 95.359379 213.901051 95.614587 C 212.614592 95.869796 211.312509 96.000004 210.000009 96.000004 C 208.687509 96.000004 207.385425 95.869796 206.098967 95.614587 C 204.812509 95.359379 203.5573 94.979171 202.343758 94.479171 C 201.135425 93.973962 199.979175 93.359379 198.890633 92.630212 C 197.796883 91.901045 196.786467 91.07292 195.859383 90.140629 C 194.927091 89.213545 194.098966 88.203129 193.3698 87.109379 C 192.640633 86.020837 192.02605 84.864587 191.520841 83.656253 C 191.020841 82.442712 190.640633 81.187503 190.385425 79.901045 C 190.130216 78.614587 190.000008 77.312503 190.000008 76.000003 C 190.000008 74.687503 190.130216 73.38542 190.385425 72.098961 C 190.640633 70.812503 191.020841 69.557295 191.520841 68.343753 C 192.02605 67.135419 192.640633 65.979169 193.3698 64.890628 C 194.098966 63.796878 194.927091 62.786461 195.859383 61.859378 C 196.786467 60.927086 197.796883 60.098961 198.890633 59.369794 C 199.979175 58.640627 201.135425 58.026044 202.343758 57.520836 C 203.5573 57.020836 204.812509 56.640627 206.098967 56.385419 C 207.385425 56.130211 208.687509 56.000002 210.000009 56.000002 C 211.312509 56.000002 212.614592 56.130211 213.901051 56.385419 C 215.187509 56.640627 216.442717 57.020836 217.656259 57.520836 C 218.864592 58.026044 220.020843 58.640627 221.109384 59.369794 C 222.203134 60.098961 223.213551 60.927086 224.140634 61.859378 C 225.072926 62.786461 225.901051 63.796878 226.630218 64.890628 C 227.359384 65.979169 227.973968 67.135419 228.479176 68.343753 C 228.979176 69.557295 229.359385 70.812503 229.614593 72.098961 C 229.869801 73.38542 230.00001 74.687503 230.00001 76.000003 Z M 230.00001 76.000003 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path105" />
<g
fill="#333333"
fill-opacity="1"
id="g111">
<use
xlink:href="#glyph-0-5"
x="150"
y="62.249996"
id="use107" />
<use
xlink:href="#glyph-0-6"
x="157.5"
y="62.249996"
id="use109" />
</g>
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 205.000004 87.999991 C 211.666671 87.999991 215.000004 91.333324 215.000004 97.999991 C 215.000004 104.666658 211.666671 107.999992 205.000004 107.999992 Z M 205.000004 87.999991 "
transform="matrix(0, 0.75, -0.75, 0, 230.99999, -83.999997)"
id="path113" />
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 210.000009 103.000004 L 209.828134 119.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path115" />
<path
fill-rule="nonzero"
fill="rgb(39.99939%, 39.99939%, 39.99939%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 212.802092 122.000005 C 212.802092 122.395838 212.723967 122.781255 212.572926 123.145838 C 212.421884 123.51563 212.203134 123.838547 211.921884 124.119797 C 211.640634 124.401047 211.317717 124.619797 210.947925 124.770839 C 210.578134 124.92188 210.197925 125.000005 209.802092 125.000005 C 209.40105 125.000005 209.020842 124.92188 208.65105 124.770839 C 208.286467 124.619797 207.958342 124.401047 207.677092 124.119797 C 207.395842 123.838547 207.1823 123.51563 207.02605 123.145838 C 206.875009 122.781255 206.802092 122.395838 206.802092 122.000005 C 206.802092 121.604172 206.875009 121.218755 207.02605 120.854172 C 207.1823 120.48438 207.395842 120.161463 207.677092 119.880213 C 207.958342 119.598963 208.286467 119.380213 208.65105 119.229172 C 209.020842 119.07813 209.40105 119.000005 209.802092 119.000005 C 210.197925 119.000005 210.578134 119.07813 210.947925 119.229172 C 211.317717 119.380213 211.640634 119.598963 211.921884 119.880213 C 212.203134 120.161463 212.421884 120.48438 212.572926 120.854172 C 212.723967 121.218755 212.802092 121.604172 212.802092 122.000005 Z M 212.802092 122.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path117" />
<g
fill="#000000"
fill-opacity="1"
id="g133">
<use
xlink:href="#glyph-1-1"
x="44.226562"
y="23.999998"
id="use119" />
<use
xlink:href="#glyph-1-2"
x="51.734615"
y="23.999998"
id="use121" />
<use
xlink:href="#glyph-1-3"
x="59.242672"
y="23.999998"
id="use123" />
<use
xlink:href="#glyph-1-4"
x="66.750732"
y="23.999998"
id="use125" />
<use
xlink:href="#glyph-1-5"
x="78.754395"
y="23.999998"
id="use127" />
<use
xlink:href="#glyph-1-6"
x="87.000732"
y="23.999998"
id="use129" />
<use
xlink:href="#glyph-1-1"
x="90.751457"
y="23.999998"
id="use131" />
</g>
<g
clip-path="url(#clip-0)"
id="g137">
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="#000000"
stroke-opacity="1"
stroke-miterlimit="10"
d="m 110.00001,201.00001 -0.23959,-29"
transform="matrix(0.75,0,0,0.75,0.375,0.375)"
id="path135" />
</g>
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 90.000004 172.000007 L 130.000005 172.000007 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path139" />
</svg>

Before

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 342 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 339 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 280 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 464 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 388 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 343 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 224 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 269 KiB

-1973
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

-338
View File
@@ -1,338 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="81.545341mm"
height="26.582481mm"
viewBox="0 0 81.545341 26.582481"
version="1.1"
id="svg5"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="datadatafinal2.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="4.1146545"
inkscape:cx="339.51818"
inkscape:cy="495.54586"
inkscape:window-width="2560"
inkscape:window-height="1385"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer5" />
<defs
id="defs2" />
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="bg"
style="display:none;fill:#ff0000;fill-opacity:1"
transform="matrix(1.2831201,0,0,3.2117929,-85.704829,-329.92383)">
<rect
style="fill:#22272e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1"
id="rect10264"
width="163.66356"
height="92.471725"
x="20.800945"
y="69.866936"
inkscape:label="bg" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="tagline"
style="display:inline"
transform="translate(-59.014718,-105.5257)">
<g
aria-label="Immutable . Friendly . Secure"
transform="scale(0.95128779,1.0512066)"
id="text9503"
style="font-size:6.44339px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';stroke:#5c5f5c;stroke-width:0;stroke-miterlimit:0"
inkscape:label="linux-netconf"
inkscape:export-filename="minidata3.png"
inkscape:export-xdpi="191.95932"
inkscape:export-ydpi="191.95932">
<path
d="m 62.472956,124.15871 h -0.386604 v -4.61347 h 0.386604 z"
id="path2380" />
<path
d="m 67.144418,120.79526 q 0.573462,0 0.869857,0.4317 0.296396,0.43171 0.296396,1.10182 v 1.82993 h -0.386603 v -1.82348 q 0,-0.54125 -0.219075,-0.8763 -0.212632,-0.3415 -0.663669,-0.3415 -0.367274,0 -0.657226,0.28995 -0.289953,0.28995 -0.289953,0.65722 v 2.09411 h -0.386603 v -1.99745 q 0,-1.04383 -0.831197,-1.04383 -0.38016,0 -0.689443,0.32861 -0.309283,0.32861 -0.309283,0.71522 v 1.99745 H 63.491016 V 121.678 q 0,-0.28995 -0.06443,-0.81187 h 0.354386 q 0.06443,0.19975 0.07732,0.58635 0.373717,-0.65722 1.108263,-0.65722 0.670113,0 0.998725,0.73454 0.386604,-0.73454 1.179141,-0.73454 z"
id="path2382" />
<path
d="m 72.969238,120.79526 q 0.573462,0 0.869858,0.4317 0.296396,0.43171 0.296396,1.10182 v 1.82993 h -0.386604 v -1.82348 q 0,-0.54125 -0.219075,-0.8763 -0.212632,-0.3415 -0.663669,-0.3415 -0.367273,0 -0.657226,0.28995 -0.289953,0.28995 -0.289953,0.65722 v 2.09411 h -0.386603 v -1.99745 q 0,-1.04383 -0.831197,-1.04383 -0.38016,0 -0.689443,0.32861 -0.309283,0.32861 -0.309283,0.71522 v 1.99745 H 69.315836 V 121.678 q 0,-0.28995 -0.06443,-0.81187 h 0.354386 q 0.06443,0.19975 0.07732,0.58635 0.373717,-0.65722 1.108263,-0.65722 0.670113,0 0.998726,0.73454 0.386603,-0.73454 1.17914,-0.73454 z"
id="path2384" />
<path
d="m 78.078841,124.14582 -0.36083,0.0838 q -0.115981,-0.32861 -0.154641,-0.64434 -0.431707,0.66367 -1.237131,0.66367 -1.185584,0 -1.185584,-1.53352 v -1.84926 h 0.386604 v 1.77838 q 0,1.28223 0.882744,1.28223 0.457481,0 0.786094,-0.30928 0.328613,-0.31572 0.328613,-0.76032 v -1.99101 h 0.386603 v 2.48715 q 0,0.34795 0.167528,0.79254 z"
id="path2386" />
<path
d="m 79.973201,124.24891 q -0.39949,0 -0.625009,-0.29639 -0.219075,-0.30284 -0.219075,-0.76032 v -2.03611 h -0.657226 v -0.28996 h 0.657226 v -0.97939 l 0.386603,-0.17397 v 1.15336 h 1.050273 v 0.28996 H 79.51572 v 2.03611 q 0,0.73454 0.489698,0.73454 0.302839,0 0.444594,-0.058 l 0.03866,0.28996 q -0.199745,0.0902 -0.515471,0.0902 z"
id="path2388" />
<path
d="m 82.015758,124.24891 q -0.43815,0 -0.747433,-0.25129 -0.302839,-0.25773 -0.302839,-0.66367 0,-1.23068 2.190752,-1.23068 0,-0.47037 -0.225519,-0.72811 -0.225518,-0.25773 -0.663669,-0.25773 -0.354386,0 -1.050272,0.21907 l -0.0451,-0.36727 q 0.541245,-0.17397 1.12115,-0.17397 1.250018,0 1.250018,1.37888 v 1.17914 q 0,0.40594 0.115981,0.80543 l -0.335057,0.0709 -0.135311,-0.5348 q -0.444594,0.55413 -1.172697,0.55413 z m -0.663669,-0.97939 q 0,0.30284 0.186858,0.48325 0.186859,0.17397 0.489698,0.17397 0.386603,0 0.753876,-0.2384 0.373717,-0.24485 0.373717,-0.59279 v -0.67012 q -1.804149,0 -1.804149,0.84409 z"
id="path2390" />
<path
d="m 86.178189,120.79526 q 0.683,0 1.08249,0.47681 0.39949,0.47037 0.39949,1.19847 0,0.77965 -0.412377,1.28223 -0.412377,0.49614 -1.127593,0.49614 -0.766764,0 -1.224244,-0.67011 0,0.32861 -0.01933,0.57991 h -0.354387 q 0.02577,-0.22552 0.02577,-0.80543 v -4.09155 h 0.386603 v 2.22941 q 0.425264,-0.69588 1.243574,-0.69588 z m -1.243574,2.04255 q 0,0.46393 0.328613,0.77965 0.328613,0.30928 0.805424,0.30928 1.204914,0 1.204914,-1.44331 0,-0.61213 -0.30284,-0.98584 -0.302839,-0.38016 -0.863414,-0.38016 -0.489698,0 -0.831197,0.3415 -0.3415,0.3415 -0.3415,0.83119 z"
id="path2392" />
<path
d="m 89.696285,123.92674 -0.03866,0.32217 q -1.224244,-0.058 -1.224244,-1.74615 v -3.24103 h 0.386603 v 3.10571 q 0,0.36728 0.03222,0.61857 0.03222,0.25129 0.115981,0.48325 0.09021,0.23197 0.270623,0.34795 0.180415,0.10953 0.457481,0.10953 z"
id="path2394" />
<path
d="m 90.51459,122.54142 q 0.01933,0.625 0.373717,1.00516 0.36083,0.38016 0.960065,0.38016 0.560575,0 1.153367,-0.23196 l 0.03222,0.31573 q -0.573462,0.2384 -1.224245,0.2384 -0.740989,0 -1.211357,-0.45748 -0.470367,-0.46392 -0.470367,-1.19202 0,-0.77965 0.451037,-1.28868 0.457481,-0.51547 1.192027,-0.51547 1.385329,0 1.417546,1.74616 z m 2.287403,-0.32217 q -0.01289,-0.50259 -0.309282,-0.79898 -0.289953,-0.30284 -0.766764,-0.30284 -0.47681,0 -0.79898,0.31572 -0.322169,0.30929 -0.393047,0.7861 z"
id="path2396" />
<path
d="m 96.345854,123.54658 q 0.135311,0 0.238405,0.1031 0.103095,0.10309 0.103095,0.2384 0,0.13532 -0.103095,0.23197 -0.103094,0.0966 -0.238405,0.0966 -0.135311,0 -0.231962,-0.0966 -0.09665,-0.0967 -0.09665,-0.23197 0,-0.13531 0.09665,-0.2384 0.09665,-0.1031 0.231962,-0.1031 z"
id="path2398" />
<path
d="m 102.20934,121.94218 h -2.07477 v 2.21653 h -0.386608 v -4.61347 h 2.609578 v 0.32217 h -2.22297 v 1.7526 h 2.07477 z"
id="path2400" />
<path
d="m 104.6385,121.13031 q -0.0387,-0.0129 -0.11598,-0.0129 -0.42527,0 -0.72166,0.34794 -0.28996,0.3415 -0.28996,0.9214 v 1.77194 h -0.3866 v -2.21653 q 0,-0.7281 -0.0967,-1.07605 h 0.32861 q 0.1031,0.20619 0.1031,0.65723 0.30928,-0.7281 0.99228,-0.7281 0.0902,0 0.18686,0.0193 z"
id="path2402" />
<path
d="m 105.60501,124.15871 h -0.38661 v -3.29258 h 0.38661 z m -0.20619,-4.60058 q 0.13531,0 0.21907,0.0902 0.0902,0.0838 0.0902,0.21908 0,0.13531 -0.0902,0.21907 -0.0838,0.0773 -0.21907,0.0773 -0.13531,0 -0.21908,-0.0773 -0.0773,-0.0838 -0.0773,-0.21907 0,-0.13531 0.0773,-0.21908 0.0838,-0.0902 0.21908,-0.0902 z"
id="path2404" />
<path
d="m 106.75838,122.54142 q 0.0193,0.625 0.37371,1.00516 0.36083,0.38016 0.96007,0.38016 0.56057,0 1.15336,-0.23196 l 0.0322,0.31573 q -0.57346,0.2384 -1.22424,0.2384 -0.74099,0 -1.21136,-0.45748 -0.47037,-0.46392 -0.47037,-1.19202 0,-0.77965 0.45104,-1.28868 0.45748,-0.51547 1.19203,-0.51547 1.38533,0 1.41754,1.74616 z m 2.2874,-0.32217 q -0.0129,-0.50259 -0.30928,-0.79898 -0.28996,-0.30284 -0.76677,-0.30284 -0.47681,0 -0.79898,0.31572 -0.32217,0.30929 -0.39304,0.7861 z"
id="path2406" />
<path
d="m 113.00202,124.15871 h -0.3866 v -1.86859 q 0,-1.17269 -0.9794,-1.17269 -0.3866,0 -0.70233,0.32861 -0.31572,0.32861 -0.31572,0.71522 v 1.99745 h -0.38661 V 121.678 q 0,-0.28995 -0.0644,-0.81187 h 0.36083 q 0.0644,0.19975 0.0773,0.58635 0.37372,-0.65722 1.10826,-0.65722 1.28868,0 1.28868,1.49486 z"
id="path2408" />
<path
d="m 113.77523,122.47054 q 0,-0.72166 0.39949,-1.19847 0.40593,-0.47681 1.08249,-0.47681 0.81831,0 1.24357,0.69588 v -2.22941 h 0.38661 v 4.09155 q 0,0.57991 0.0258,0.80543 h -0.35439 q -0.0193,-0.2513 -0.0193,-0.57991 -0.45748,0.67011 -1.22424,0.67011 -0.72166,0 -1.13404,-0.49614 -0.40593,-0.50258 -0.40593,-1.28223 z m 1.59152,1.4562 q 0.47681,0 0.80542,-0.30928 0.32861,-0.31572 0.32861,-0.77965 v -0.54769 q 0,-0.49614 -0.3415,-0.83119 -0.33505,-0.3415 -0.83119,-0.3415 -0.56058,0 -0.86342,0.38016 -0.30284,0.38016 -0.30284,0.98584 0,1.44331 1.20492,1.44331 z"
id="path2410" />
<path
d="m 119.15547,123.92674 -0.0387,0.32217 q -1.22424,-0.058 -1.22424,-1.74615 v -3.24103 h 0.3866 v 3.10571 q 0,0.36728 0.0322,0.61857 0.0322,0.25129 0.11598,0.48325 0.0902,0.23197 0.27062,0.34795 0.18042,0.10953 0.45749,0.10953 z"
id="path2412" />
<path
d="m 121.10781,124.15871 q -0.57346,1.28867 -1.52064,1.51419 l -0.0902,-0.30284 q 0.82476,-0.18685 1.25002,-1.32089 0,-0.058 -0.0258,-0.11598 l -1.366,-3.06706 h 0.40593 l 1.23069,2.78999 1.15337,-2.78999 h 0.41237 z"
id="path2414" />
<path
d="m 125.44421,123.54658 q 0.13531,0 0.2384,0.1031 0.1031,0.10309 0.1031,0.2384 0,0.13532 -0.1031,0.23197 -0.10309,0.0966 -0.2384,0.0966 -0.13531,0 -0.23196,-0.0966 -0.0966,-0.0967 -0.0966,-0.23197 0,-0.13531 0.0966,-0.2384 0.0966,-0.1031 0.23196,-0.1031 z"
id="path2416" />
<path
d="m 131.42367,122.95379 q 0,0.59924 -0.45103,0.94718 -0.4446,0.34794 -1.11471,0.34794 -0.76032,0 -1.26935,-0.35438 l 0.15464,-0.32862 q 0.47681,0.36083 1.15337,0.36083 0.50903,0 0.82475,-0.24484 0.31573,-0.24485 0.31573,-0.69589 0,-0.43815 -0.25129,-0.65723 -0.2513,-0.22551 -0.75388,-0.38016 -1.28868,-0.41882 -1.28868,-1.30156 0,-0.54125 0.41238,-0.85697 0.41238,-0.32217 1.01805,-0.32217 0.64434,0 1.05672,0.24485 -0.0129,0.0258 -0.0773,0.14175 -0.058,0.10954 -0.0838,0.16109 -0.41882,-0.22552 -0.90208,-0.22552 -0.45104,0 -0.74743,0.21263 -0.28995,0.21263 -0.28995,0.59924 0,0.63789 0.99872,0.98583 0.32217,0.11599 0.51547,0.21264 0.19975,0.0902 0.39949,0.24484 0.19975,0.15465 0.28995,0.38016 0.0902,0.22552 0.0902,0.52836 z"
id="path2418" />
<path
d="m 132.38373,122.54142 q 0.0193,0.625 0.37372,1.00516 0.36083,0.38016 0.96006,0.38016 0.56058,0 1.15337,-0.23196 l 0.0322,0.31573 q -0.57347,0.2384 -1.22425,0.2384 -0.74099,0 -1.21136,-0.45748 -0.47036,-0.46392 -0.47036,-1.19202 0,-0.77965 0.45103,-1.28868 0.45749,-0.51547 1.19203,-0.51547 1.38533,0 1.41755,1.74616 z m 2.2874,-0.32217 q -0.0129,-0.50259 -0.30928,-0.79898 -0.28995,-0.30284 -0.76676,-0.30284 -0.47681,0 -0.79898,0.31572 -0.32217,0.30929 -0.39305,0.7861 z"
id="path2420" />
<path
d="m 137.3387,121.11743 q -0.61212,0 -0.97295,0.3866 -0.36083,0.3866 -0.36083,1.01806 0,0.625 0.36727,1.01805 0.36727,0.3866 0.96651,0.3866 0.54124,0 0.90207,-0.23196 l 0.13531,0.31573 q -0.42526,0.2384 -1.01805,0.2384 -0.79898,0 -1.26935,-0.46392 -0.47037,-0.47037 -0.47037,-1.2629 0,-0.79254 0.47037,-1.25647 0.47037,-0.47036 1.26935,-0.47036 0.59923,0 1.01805,0.23196 l -0.13531,0.32217 q -0.36083,-0.23196 -0.90207,-0.23196 z"
id="path2422" />
<path
d="m 141.99727,124.14582 -0.36083,0.0838 q -0.11598,-0.32861 -0.15464,-0.64434 -0.4317,0.66367 -1.23713,0.66367 -1.18558,0 -1.18558,-1.53352 v -1.84926 h 0.3866 v 1.77838 q 0,1.28223 0.88275,1.28223 0.45748,0 0.78609,-0.30928 0.32861,-0.31572 0.32861,-0.76032 v -1.99101 h 0.38661 v 2.48715 q 0,0.34795 0.16752,0.79254 z"
id="path2424" />
<path
d="m 144.34911,121.13031 q -0.0387,-0.0129 -0.11598,-0.0129 -0.42526,0 -0.72166,0.34794 -0.28995,0.3415 -0.28995,0.9214 v 1.77194 h -0.38661 v -2.21653 q 0,-0.7281 -0.0967,-1.07605 h 0.32862 q 0.10309,0.20619 0.10309,0.65723 0.30928,-0.7281 0.99228,-0.7281 0.0902,0 0.18686,0.0193 z"
id="path2426" />
<path
d="m 145.08366,122.54142 q 0.0193,0.625 0.37372,1.00516 0.36083,0.38016 0.96006,0.38016 0.56058,0 1.15337,-0.23196 l 0.0322,0.31573 q -0.57346,0.2384 -1.22424,0.2384 -0.74099,0 -1.21136,-0.45748 -0.47036,-0.46392 -0.47036,-1.19202 0,-0.77965 0.45103,-1.28868 0.45748,-0.51547 1.19203,-0.51547 1.38533,0 1.41755,1.74616 z m 2.2874,-0.32217 q -0.0129,-0.50259 -0.30928,-0.79898 -0.28995,-0.30284 -0.76676,-0.30284 -0.47681,0 -0.79898,0.31572 -0.32217,0.30929 -0.39305,0.7861 z"
id="path2428" />
</g>
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.194246;stroke-linejoin:bevel"
d="m 223.38329,484.15901 v -9.03246 h 0.58274 0.58274 v 9.03246 9.03245 h -0.58274 -0.58274 z"
id="path1834"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.194246;stroke-linejoin:bevel"
d="m 228.43253,488.38386 c -6.4e-4,-2.64417 -0.0579,-5.53584 -0.12713,-6.42592 l -0.12597,-1.61833 0.56419,0.0644 c 0.53405,0.0609 0.56732,0.11883 0.6229,1.08415 0.0323,0.56089 0.12967,1.01979 0.21639,1.01979 0.0867,0 0.38929,-0.33422 0.67238,-0.74271 0.91393,-1.3188 2.66926,-2.00044 4.13506,-1.60574 0.86092,0.23182 2.04111,1.29757 2.40217,2.16924 0.12933,0.31224 0.2901,0.56535 0.35727,0.56248 0.0672,-0.003 0.34006,-0.35837 0.60644,-0.78999 1.62805,-2.638 5.25262,-2.76519 6.73464,-0.23631 0.85471,1.45845 1.03015,2.6805 1.03347,7.19885 l 0.003,4.12773 h -0.58274 -0.58274 v -3.85841 c 0,-4.04906 -0.16272,-5.48953 -0.74837,-6.62489 -0.97524,-1.89066 -3.35323,-2.11305 -4.92303,-0.4604 -1.03875,1.09356 -1.12722,1.60138 -1.12722,6.4698 v 4.4739 h -0.56535 -0.56534 l -0.0723,-4.8076 c -0.0781,-5.19309 -0.16625,-5.68505 -1.188,-6.62687 -0.5343,-0.49249 -1.87288,-0.75083 -2.74992,-0.53071 -0.72522,0.18202 -2.04937,1.44652 -2.46084,2.34999 -0.30871,0.67784 -0.35441,1.34084 -0.35813,5.19609 l -0.004,4.4191 h -0.58274 -0.58274 z"
id="path1836"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.194246;stroke-linejoin:bevel"
d="m 249.39406,488.57811 c -0.01,-2.53734 -0.0756,-5.42192 -0.14569,-6.41017 l -0.12744,-1.79683 0.53048,5e-5 c 0.57465,5e-5 0.68172,0.2256 0.77747,1.63776 l 0.0518,0.76361 0.5691,-0.82445 c 1.00313,-1.45322 2.80602,-2.19608 4.33232,-1.78509 0.80947,0.21797 1.99805,1.32577 2.42291,2.25823 0.11908,0.26135 0.26804,0.47242 0.33102,0.46905 0.063,-0.003 0.34597,-0.38783 0.62888,-0.85432 0.7501,-1.23686 2.06363,-1.95451 3.57903,-1.95541 1.33872,-8e-4 2.22364,0.46503 2.97983,1.56862 0.89814,1.31075 1.04718,2.23303 1.13543,7.02607 l 0.0831,4.51623 h -0.60091 -0.60092 l -0.006,-3.44787 c -0.007,-4.03899 -0.2174,-5.95631 -0.77305,-7.04547 -1.0695,-2.09639 -3.90894,-2.05963 -5.38561,0.0697 l -0.53685,0.77414 -0.0581,4.82474 -0.0581,4.82474 h -0.54937 -0.54937 l -0.0848,-4.71047 c -0.0769,-4.27252 -0.12307,-4.79578 -0.49627,-5.62796 -1.17692,-2.62436 -4.42294,-2.20832 -5.94644,0.76215 -0.26842,0.52335 -0.31884,1.32971 -0.31884,5.09897 v 4.47731 h -0.58274 -0.58274 z"
id="path1838"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.194246;stroke-linejoin:bevel"
d="m 273.01323,493.28817 c -0.42734,-0.15111 -1.05549,-0.57696 -1.3959,-0.94634 -1.08415,-1.17645 -1.27314,-2.18958 -1.37243,-7.35728 l -0.0886,-4.61335 h 0.60294 0.60294 l 0.003,3.15651 c 0.004,3.91414 0.25019,6.36807 0.73168,7.3013 1.13174,2.19355 4.30257,2.12242 5.93754,-0.1332 l 0.61157,-0.84373 0.0582,-4.74044 0.0582,-4.74044 h 0.67021 0.67021 l 0.005,5.48746 c 0.003,3.0181 0.0937,5.87338 0.20243,6.34505 0.15249,0.66158 0.14031,0.89461 -0.0533,1.01955 -0.55281,0.35673 -0.83165,0.0557 -1.09962,-1.18733 -0.24582,-1.14025 -0.29208,-1.21548 -0.53608,-0.87175 -1.45497,2.04964 -3.5618,2.84756 -5.60816,2.12399 z"
id="path1840"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 287.30474,493.62291 c -0.5234,-0.0325 -0.99929,-0.2067 -1.39355,-0.51007 -0.0711,-0.0547 -0.21266,-0.18756 -0.31455,-0.2952 -0.51237,-0.54129 -0.84906,-1.32221 -1.01656,-2.35786 l -0.0518,-0.32009 -0.007,-4.39554 -0.007,-4.39554 h -1.17681 -1.17681 v -0.56016 -0.56016 h 1.17748 1.17748 v -1.94931 -1.9493 l 0.67458,-0.33706 c 0.37102,-0.18538 0.67968,-0.33706 0.68591,-0.33706 0.006,0 0.0113,1.02886 0.0113,2.28637 v 2.28636 h 1.88625 1.88625 v 0.56016 0.56016 h -1.88681 -1.8868 l 0.007,4.42983 c 0.008,4.76198 0.003,4.54099 0.11952,5.05219 0.16032,0.70049 0.47404,1.17713 0.91502,1.3902 0.25035,0.12096 0.40253,0.14734 0.85223,0.14773 0.56364,4.8e-4 1.01334,-0.0544 1.32518,-0.16168 0.0702,-0.0241 0.13023,-0.0412 0.13351,-0.0379 0.003,0.003 0.0357,0.2528 0.072,0.5545 l 0.066,0.54854 -0.0472,0.0278 c -0.0785,0.0463 -0.33404,0.13919 -0.51588,0.18759 -0.42382,0.11279 -1.01712,0.16607 -1.509,0.13551 z"
id="path1842"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 294.5861,493.62213 c -1.33382,-0.0703 -2.53644,-0.82061 -3.09275,-1.92964 -0.24094,-0.48033 -0.34819,-0.94143 -0.36461,-1.5675 -0.0163,-0.62035 0.0506,-1.12228 0.21568,-1.62005 0.34649,-1.04458 1.07298,-1.83524 2.204,-2.3987 1.19263,-0.59414 2.78564,-0.91132 4.79719,-0.95516 l 0.64935,-0.0142 -0.0145,-0.368 c -0.0763,-1.94209 -0.90557,-3.17288 -2.34847,-3.4855 -0.11953,-0.0259 -0.35827,-0.0588 -0.53054,-0.0732 -0.83261,-0.0693 -2.06866,0.17313 -3.73081,0.73187 -0.18772,0.0631 -0.34391,0.11214 -0.34708,0.10897 -0.003,-0.003 -0.0374,-0.29372 -0.0761,-0.64564 -0.0386,-0.35192 -0.0755,-0.67149 -0.0819,-0.71015 l -0.0116,-0.0703 0.37182,-0.11744 c 1.20391,-0.38027 2.32736,-0.55784 3.54986,-0.5611 0.7727,-0.002 1.23902,0.0602 1.77856,0.23734 1.46594,0.48137 2.35205,1.64256 2.66841,3.49679 0.12045,0.70598 0.11904,0.66437 0.1383,4.08126 0.01,1.7605 0.0238,3.23692 0.0308,3.28093 0.007,0.044 0.0291,0.23435 0.0491,0.42298 0.0465,0.43878 0.14592,1.02673 0.2474,1.4631 0.0438,0.18852 0.0764,0.34605 0.0724,0.35005 -0.01,0.01 -1.16361,0.2786 -1.16815,0.2723 -0.002,-0.003 -0.10844,-0.46785 -0.23669,-1.03372 -0.12825,-0.56588 -0.23848,-1.0443 -0.24496,-1.06316 -0.009,-0.0258 -0.0241,-0.0174 -0.0616,0.0341 -0.24974,0.34282 -0.61859,0.73947 -0.92993,1.00003 -0.98835,0.82713 -2.1679,1.2056 -3.53328,1.13367 z m 0.93086,-1.28687 c 0.65714,-0.0991 1.29513,-0.35128 1.90495,-0.7531 0.81304,-0.53573 1.28846,-1.12731 1.48996,-1.85402 l 0.0634,-0.22864 0.008,-1.55251 0.008,-1.55252 -0.63565,0.0142 c -3.56014,0.0798 -5.51289,1.02626 -5.8264,2.82409 -0.0446,0.25589 -0.0441,0.85092 10e-4,1.11538 0.18522,1.08602 0.8607,1.80366 1.87004,1.98675 0.22689,0.0412 0.84543,0.0413 1.1175,3.3e-4 z"
id="path1844"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 309.32244,493.62288 c -0.96944,-0.0469 -1.85038,-0.37861 -2.65218,-0.99851 -0.41295,-0.31926 -0.94289,-0.9117 -1.28908,-1.44113 l -0.1399,-0.21394 -0.005,0.14535 c -0.003,0.0799 -0.0158,0.50031 -0.0286,0.93415 -0.0128,0.43384 -0.03,0.88911 -0.0382,1.01172 l -0.0148,0.22292 h -0.62644 -0.62644 l 0.0136,-0.13147 c 0.0609,-0.58676 0.0652,-1.17336 0.0733,-10.07144 l 0.008,-9.2312 h 0.68506 0.68507 l 7.2e-4,4.42983 c 5.8e-4,3.48836 0.007,4.42158 0.0286,4.39101 0.0153,-0.0214 0.0947,-0.14835 0.17647,-0.28221 0.23909,-0.39153 0.48968,-0.7084 0.83324,-1.05364 0.79409,-0.79798 1.61045,-1.19749 2.77922,-1.36008 0.2959,-0.0412 1.07923,-0.0347 1.40611,0.0117 1.32147,0.18728 2.34057,0.79358 3.15682,1.87808 0.76131,1.0115 1.19388,2.16861 1.36296,3.64582 0.0403,0.35233 0.0407,1.83298 6e-4,2.20634 -0.11974,1.1141 -0.37776,2.05613 -0.79532,2.90368 -1.03324,2.09723 -2.72255,3.11307 -4.99399,3.00306 z m 0.86193,-1.2892 c 1.76169,-0.22995 2.85867,-1.28108 3.34269,-3.20299 0.30067,-1.19391 0.35369,-2.89198 0.12825,-4.108 -0.29692,-1.60162 -1.09958,-2.84593 -2.19579,-3.40403 -0.57991,-0.29523 -1.09671,-0.4111 -1.83985,-0.41248 -0.63377,-0.001 -1.01616,0.0697 -1.55843,0.28899 -0.58207,0.23535 -1.2143,0.72589 -1.6676,1.29385 -0.44764,0.56087 -0.77863,1.27537 -0.92145,1.98914 -0.0992,0.49576 -0.10972,0.74403 -0.0998,2.35496 0.0101,1.63879 0.0104,1.64172 0.15709,2.19491 0.35782,1.34881 1.39583,2.46469 2.66595,2.86592 0.16235,0.0513 0.55199,0.13409 0.74972,0.15934 0.19748,0.0252 0.99214,0.0126 1.23918,-0.0196 z"
id="path1846"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 321.87459,493.58992 c -0.8696,-0.12637 -1.59301,-0.47045 -2.17909,-1.03646 -1.03984,-1.00425 -1.58419,-2.59401 -1.70723,-4.98593 -0.0142,-0.27698 -0.023,-2.95931 -0.0231,-7.08202 l -2.2e-4,-6.63618 h 0.68513 0.68513 l 0.009,6.87625 c 0.009,7.02584 0.008,7.00928 0.0967,7.81365 0.10578,0.96416 0.35005,1.9335 0.62093,2.46402 0.44664,0.87476 1.13121,1.30724 2.15714,1.36279 l 0.26385,0.0143 -0.0674,0.62303 -0.0674,0.62304 -0.12782,-0.002 c -0.0703,-0.001 -0.22557,-0.0167 -0.34503,-0.034 z"
id="path1848"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 329.71682,493.62332 c -0.82899,-0.0372 -1.61396,-0.23055 -2.30398,-0.56754 -0.37825,-0.18472 -0.54944,-0.28931 -0.89693,-0.54795 -1.01662,-0.7567 -1.78269,-1.89329 -2.17055,-3.22039 -0.0777,-0.26591 -0.16487,-0.69455 -0.21981,-1.08101 -0.0576,-0.40513 -0.0709,-1.55129 -0.0238,-2.04475 0.11581,-1.21225 0.35793,-2.09011 0.8324,-3.01808 0.61749,-1.20767 1.53413,-2.14784 2.59917,-2.66589 0.77538,-0.37715 1.4905,-0.53207 2.44641,-0.52996 0.56508,0.001 0.9552,0.047 1.4181,0.16637 1.6679,0.43005 2.77783,1.70533 3.2916,3.78196 0.19164,0.7746 0.29118,1.5435 0.34432,2.65973 l 0.0144,0.30294 h -4.81566 -4.81566 l 0.0115,0.1086 c 0.006,0.0597 0.0176,0.21149 0.025,0.33724 0.0636,1.07931 0.381,2.14843 0.87454,2.9463 0.31378,0.50727 0.79874,1.03354 1.23804,1.3435 0.55763,0.39346 1.23414,0.64767 1.97432,0.74188 0.37368,0.0476 1.35758,0.0353 1.79434,-0.0224 0.9694,-0.12807 2.04082,-0.42013 2.89393,-0.78886 0.0608,-0.0263 0.11819,-0.0478 0.1276,-0.0478 0.0179,0 0.13106,1.20581 0.11442,1.21964 -0.005,0.004 -0.11245,0.0518 -0.2382,0.10527 -1.16468,0.49571 -2.41589,0.77766 -3.61246,0.81404 -0.21378,0.007 -0.42469,0.0143 -0.46871,0.0174 -0.044,0.003 -0.23949,-0.002 -0.43441,-0.0103 z m 3.95534,-8.11924 c -2.5e-4,-0.30965 -0.0819,-0.91311 -0.17265,-1.27644 -0.21244,-0.85027 -0.58191,-1.49481 -1.19286,-2.08098 -0.59602,-0.57184 -1.29064,-0.86751 -2.19852,-0.93583 -1.41629,-0.10657 -2.61061,0.44344 -3.51878,1.62047 -0.52227,0.67689 -0.89262,1.54618 -1.04384,2.45013 -0.02,0.11931 -0.0415,0.24008 -0.0478,0.26838 l -0.0115,0.0514 h 4.09303 4.09303 l -7e-5,-0.0972 z"
id="path1850"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 358.63935,484.12654 v -9.15689 h 4.68705 4.68705 v 0.62875 0.62875 h -4.00114 -4.00114 v 3.49814 3.49814 h 3.72678 3.72678 v 0.62875 0.62875 h -3.72678 -3.72678 v 4.40126 4.40125 h -0.68591 -0.68591 z"
id="path1852"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 370.77972,488.3849 c -2.5e-4,-5.30842 -0.0101,-5.84482 -0.12715,-6.89911 -0.0383,-0.34527 -0.13012,-0.92558 -0.17819,-1.12641 l -0.0315,-0.13185 0.58559,0.006 0.58559,0.006 0.0735,0.21721 c 0.15373,0.45451 0.2441,1.0906 0.27609,1.94333 l 0.0167,0.44577 0.11057,-0.26286 c 0.36692,-0.87227 0.86854,-1.56026 1.46921,-2.01506 0.22423,-0.16978 0.70767,-0.41064 0.98068,-0.48859 0.44934,-0.1283 1.03347,-0.17067 1.45783,-0.10575 l 0.20005,0.0306 v 0.61599 0.61599 l -0.0857,-0.0182 c -0.13914,-0.0295 -0.64614,-0.0138 -0.8626,0.0268 -0.61492,0.11523 -1.11795,0.37837 -1.59623,0.83501 -0.69911,0.66749 -1.13847,1.50376 -1.35187,2.57318 -0.14099,0.70651 -0.13497,0.50782 -0.144,4.74916 l -0.008,3.88111 h -0.68498 -0.68498 z"
id="path1854"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 378.32496,486.75587 v -6.52758 h 0.67448 0.67448 v 6.52758 6.52757 h -0.67448 -0.67448 z"
id="path1856"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 388.12204,493.62228 c -1.25745,-0.0534 -2.37679,-0.45935 -3.33031,-1.20766 -0.24611,-0.19314 -0.70076,-0.64519 -0.89683,-0.89168 -1.00908,-1.26862 -1.47423,-2.80387 -1.42354,-4.69848 0.0143,-0.53323 0.0346,-0.79039 0.0969,-1.22321 0.23095,-1.60525 0.88593,-2.99875 1.90618,-4.05551 0.84662,-0.87693 1.87353,-1.39202 3.11031,-1.5601 0.38666,-0.0525 1.16134,-0.0519 1.56251,0.001 2.18606,0.29027 3.51464,1.7209 4.04732,4.35822 0.13263,0.65663 0.24325,1.71374 0.24325,2.32446 v 0.18901 h -4.80137 -4.80136 l 4.6e-4,0.1429 c 6.4e-4,0.19414 0.0574,0.76627 0.10322,1.03965 0.36981,2.20844 1.63422,3.74849 3.43951,4.18933 0.48183,0.11766 0.80028,0.14581 1.48681,0.13141 1.20975,-0.0254 2.2518,-0.2443 3.51863,-0.73929 0.20618,-0.0806 0.37851,-0.14284 0.38295,-0.1384 0.0189,0.0189 0.11827,1.19481 0.10234,1.21087 -0.0372,0.0375 -0.75552,0.31882 -1.09377,0.42834 -1.19108,0.38565 -2.40723,0.55167 -3.65322,0.49872 z m 3.93653,-8.32397 c -0.0603,-1.26072 -0.4967,-2.31101 -1.28476,-3.09231 -0.61702,-0.61174 -1.3169,-0.92024 -2.25737,-0.99504 -0.82674,-0.0657 -1.6698,0.12102 -2.31532,0.51292 -0.68961,0.41867 -1.32032,1.12589 -1.72724,1.93675 -0.26734,0.53273 -0.48183,1.23016 -0.56034,1.82199 l -0.0157,0.11863 h 4.08763 4.08763 z"
id="path1858"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 396.33573,487.92763 c -0.007,-4.85115 -0.0113,-5.40106 -0.0474,-5.83595 -0.0419,-0.50482 -0.14345,-1.56986 -0.16734,-1.75479 l -0.014,-0.1086 h 0.64122 0.64123 l 0.0468,0.20006 c 0.0992,0.42383 0.17468,1.04371 0.20039,1.64553 0.0218,0.50978 0.0231,0.51241 0.14388,0.29078 0.59123,-1.08475 1.43569,-1.84809 2.4257,-2.19269 1.10461,-0.38449 2.66603,-0.27883 3.70071,0.25042 0.8891,0.45479 1.5357,1.23968 1.9221,2.3332 0.1634,0.46242 0.3086,1.13494 0.37746,1.74821 0.0675,0.60122 0.0799,1.38673 0.0803,5.07001 l 3.9e-4,3.70963 h -0.68487 -0.68486 l -0.009,-4.08688 c -0.009,-4.35633 -0.007,-4.24692 -0.11966,-4.90345 -0.28126,-1.6339 -1.06832,-2.63359 -2.33622,-2.96739 -0.50206,-0.13217 -1.2151,-0.16247 -1.65293,-0.0702 -0.60486,0.12742 -1.12382,0.4215 -1.65451,0.9376 -0.72158,0.70173 -1.17829,1.50047 -1.36742,2.39144 l -0.0532,0.25081 -0.006,4.22406 -0.006,4.22406 h -0.68464 -0.68464 z"
id="path1860"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 414.26664,493.62294 c -1.83788,-0.0825 -3.26746,-1.00338 -4.2008,-2.70589 -0.3807,-0.69442 -0.68091,-1.57878 -0.82789,-2.43875 -0.32417,-1.89678 -0.14434,-3.83422 0.49126,-5.29275 0.72289,-1.65881 1.92778,-2.75033 3.42854,-3.10596 0.98187,-0.23267 2.13233,-0.17008 3.02943,0.16481 0.9147,0.34146 1.69547,0.97787 2.32066,1.89159 0.088,0.12864 0.2012,0.30739 0.2515,0.39721 0.0503,0.0898 0.0992,0.16355 0.10861,0.16384 0.009,2.9e-4 0.0171,-1.99033 0.0171,-4.42359 v -4.42412 h 0.68591 0.68591 l 5e-5,8.92254 c 5e-5,8.49944 0.007,9.65931 0.0654,10.32295 l 0.0165,0.18862 h -0.62082 -0.62083 l -0.014,-0.12003 c -0.0166,-0.14264 -0.0605,-1.34328 -0.0674,-1.84624 l -0.005,-0.35439 -0.11162,0.17148 c -0.3375,0.51847 -0.89762,1.15186 -1.29751,1.46724 -0.83405,0.65779 -1.75585,0.99446 -2.82064,1.03019 -0.1006,0.003 -0.3321,-5.6e-4 -0.51443,-0.009 z m 1.3558,-1.32012 c 0.35926,-0.0732 0.62876,-0.16658 0.96486,-0.33421 0.37422,-0.18665 0.66148,-0.3911 0.97956,-0.69717 0.53286,-0.51277 0.9243,-1.15698 1.12209,-1.84669 0.17991,-0.62736 0.20239,-0.94624 0.18986,-2.69281 -0.0111,-1.54266 -0.0188,-1.64719 -0.16426,-2.21467 -0.22385,-0.8734 -0.6468,-1.57951 -1.34393,-2.24368 -0.60411,-0.57555 -1.26473,-0.90366 -2.07518,-1.0307 -0.31902,-0.05 -0.99883,-0.0499 -1.32396,3e-4 -0.46296,0.0714 -0.93142,0.22332 -1.26637,0.41064 -1.12396,0.62855 -1.91578,1.9733 -2.16607,3.67865 -0.15488,1.05527 -0.10279,2.50934 0.12831,3.58196 0.36088,1.67489 1.20542,2.76253 2.49248,3.20992 0.54115,0.18811 0.93885,0.24428 1.66696,0.23545 0.45707,-0.006 0.58998,-0.0151 0.79565,-0.057 z"
id="path1862"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 427.79049,493.5892 c -1.40617,-0.21864 -2.4022,-0.95029 -3.05109,-2.24123 -0.40773,-0.81115 -0.64172,-1.72903 -0.79471,-3.1174 -0.0358,-0.3249 -0.0396,-0.93786 -0.0463,-7.36781 l -0.007,-7.01343 h 0.67359 0.6736 l 0.009,6.70477 c 0.01,6.82326 0.0118,7.00237 0.0974,7.84795 0.12779,1.26122 0.41372,2.29884 0.79658,2.89067 0.13134,0.20304 0.44038,0.52728 0.61719,0.64753 0.38213,0.25992 0.95533,0.42813 1.46027,0.42851 0.12463,9e-5 0.1772,0.008 0.1772,0.0282 0,0.0501 -0.11612,1.12498 -0.12726,1.17801 -0.01,0.0465 -0.0234,0.0512 -0.14183,0.0489 -0.0721,-0.001 -0.22363,-0.017 -0.3368,-0.0346 z"
id="path1864"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 429.95866,499.23186 c -0.008,-0.0336 -0.0795,-0.29767 -0.15796,-0.58689 -0.0785,-0.28923 -0.14107,-0.52669 -0.13906,-0.52769 0.002,-10e-4 0.1333,-0.0436 0.29174,-0.0947 1.13222,-0.36509 2.10503,-1.1714 2.90787,-2.41017 0.43294,-0.66802 0.86412,-1.56618 1.19488,-2.489 0.0949,-0.26487 0.10313,-0.37893 0.0425,-0.59175 -0.0193,-0.0677 -1.09304,-2.74786 -2.38612,-5.95598 -1.29307,-3.20811 -2.39757,-5.94868 -2.45443,-6.09015 l -0.10338,-0.25722 h 0.71428 0.71428 l 1.18482,2.96656 c 0.65166,1.63161 1.64529,4.11889 2.20807,5.52729 0.56279,1.4084 1.032,2.55843 1.0427,2.55562 0.0107,-0.003 0.94775,-2.4864 2.08233,-5.5191 1.13458,-3.0327 2.06671,-5.51783 2.07139,-5.52251 0.005,-0.005 0.33206,-0.006 0.72749,-0.002 l 0.71899,0.006 -1.49381,3.74964 c -3.35876,8.43093 -3.81479,9.57116 -3.95489,9.88854 -1.3015,2.94837 -2.97284,4.73642 -5.00775,5.35742 l -0.18866,0.0576 z"
id="path1866"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 466.4758,493.62314 c -1.45181,-0.0518 -2.74209,-0.444 -3.79537,-1.15362 -0.13832,-0.0932 -0.27004,-0.18378 -0.29271,-0.20131 -0.0388,-0.03 -0.0255,-0.0688 0.22467,-0.65706 0.14623,-0.34386 0.26967,-0.62899 0.27431,-0.63362 0.005,-0.005 0.10416,0.0634 0.22117,0.1512 0.67232,0.50442 1.34476,0.82699 2.15829,1.03532 0.54738,0.14018 0.89369,0.18432 1.55671,0.19842 0.63362,0.0135 0.92514,-0.007 1.3677,-0.0968 1.32858,-0.26911 2.35262,-1.09378 2.72806,-2.19693 0.18459,-0.54239 0.26064,-1.19762 0.2121,-1.82751 -0.0878,-1.1388 -0.41159,-1.84567 -1.11432,-2.4323 -0.61331,-0.51197 -1.2819,-0.86992 -2.3653,-1.26634 -1.26557,-0.46308 -2.05129,-0.86777 -2.82085,-1.4529 -0.28325,-0.21536 -0.82457,-0.75065 -1.01574,-1.00442 -0.65231,-0.86591 -0.952,-1.83625 -0.90894,-2.94301 0.0533,-1.37071 0.52091,-2.37763 1.48963,-3.20783 0.644,-0.55192 1.4352,-0.94552 2.25611,-1.12235 0.46021,-0.0991 0.66417,-0.12051 1.26489,-0.13258 1.07258,-0.0215 1.99133,0.11405 2.81436,0.41535 0.24038,0.088 0.79477,0.35451 0.974,0.46822 l 0.1073,0.0681 -0.2759,0.56664 c -0.15175,0.31165 -0.28315,0.57464 -0.292,0.58442 -0.009,0.01 -0.10274,-0.0303 -0.20865,-0.089 -0.72347,-0.40119 -1.56973,-0.65953 -2.43295,-0.74271 -0.35408,-0.0341 -1.16128,-0.0144 -1.45209,0.0356 -0.86066,0.14772 -1.5369,0.47184 -2.04917,0.98215 -0.42088,0.41927 -0.65249,0.86296 -0.77831,1.491 -0.0586,0.2927 -0.0587,1.06224 -1.6e-4,1.33409 0.19406,0.90065 0.66802,1.58854 1.54586,2.24356 0.50705,0.37834 1.11699,0.69785 2.07057,1.08465 1.7404,0.70595 2.67043,1.24813 3.40775,1.98661 0.43957,0.44027 0.68634,0.84041 0.87774,1.42329 0.21093,0.64235 0.28583,1.22039 0.26905,2.07638 -0.0123,0.62679 -0.0378,0.85377 -0.1452,1.2918 -0.28152,1.14819 -0.97439,2.0959 -2.04295,2.79439 -1.06152,0.69388 -2.2618,0.98509 -3.82966,0.92913 z"
id="path1868"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 480.25115,493.62391 c -1.76943,-0.0824 -3.28993,-0.87015 -4.32828,-2.24257 -0.2674,-0.35344 -0.42444,-0.60902 -0.62244,-1.01302 -0.33343,-0.68033 -0.52948,-1.35217 -0.64384,-2.20634 -0.0591,-0.44104 -0.0584,-1.736 0.001,-2.22921 0.1851,-1.53321 0.63888,-2.7246 1.44812,-3.802 0.22897,-0.30485 0.71268,-0.81249 0.97864,-1.02706 0.75983,-0.61301 1.63095,-0.98187 2.64075,-1.11816 0.34389,-0.0464 1.1342,-0.0519 1.47471,-0.0103 1.60517,0.19621 2.76041,0.99424 3.47192,2.39837 0.53771,1.06112 0.81782,2.35304 0.89687,4.13649 l 0.0155,0.34867 h -4.81007 -4.81008 l 0.0166,0.31284 c 0.1063,2.00432 0.90234,3.6062 2.23549,4.49853 0.52294,0.35002 1.20005,0.58817 1.92006,0.67532 0.251,0.0304 1.0811,0.03 1.41814,-6e-4 1.00947,-0.0917 2.10982,-0.3665 3.10524,-0.77539 0.12971,-0.0533 0.23905,-0.0933 0.24296,-0.0888 0.004,0.004 0.0321,0.27911 0.0627,0.61042 l 0.0556,0.60239 -0.1271,0.0563 c -1.16017,0.51427 -2.50008,0.82649 -3.7167,0.86607 -0.2012,0.007 -0.41211,0.0147 -0.4687,0.0182 -0.0566,0.003 -0.26236,-10e-4 -0.45728,-0.0102 z m 3.95517,-8.15413 c -3.8e-4,-0.20384 -0.0628,-0.7459 -0.11648,-1.01171 -0.19744,-0.97746 -0.63711,-1.77073 -1.32584,-2.39213 -0.6974,-0.62923 -1.67691,-0.93541 -2.73725,-0.85562 -0.56747,0.0427 -0.96231,0.14731 -1.43321,0.37975 -0.40065,0.19776 -0.67408,0.39776 -1.02924,0.75282 -0.60261,0.60243 -0.9847,1.22701 -1.25817,2.05663 -0.11691,0.35465 -0.26189,0.97972 -0.26189,1.12908 v 0.0727 h 4.08116 4.08117 l -2.5e-4,-0.13147 z"
id="path1870"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 493.46635,493.62321 c -2.04371,-0.0792 -3.6873,-0.97429 -4.73803,-2.58041 -0.19454,-0.29736 -0.48014,-0.86462 -0.60714,-1.20589 -0.36186,-0.97241 -0.53611,-2.1313 -0.49935,-3.32111 0.0624,-2.02032 0.59394,-3.50094 1.69299,-4.71605 0.80338,-0.88822 1.84034,-1.47099 3.05407,-1.71638 1.36434,-0.27584 3.03495,-0.14656 4.22978,0.32732 0.23352,0.0926 0.69485,0.31495 0.8358,0.4028 l 0.0699,0.0435 -0.23456,0.61435 c -0.12902,0.33789 -0.23782,0.6176 -0.24179,0.62157 -0.004,0.004 -0.079,-0.0396 -0.16683,-0.0969 -0.23026,-0.15027 -0.71251,-0.37932 -1.01699,-0.48303 -1.18521,-0.40372 -2.66961,-0.4219 -3.74881,-0.0459 -1.39343,0.48545 -2.47138,1.75971 -2.89099,3.41748 -0.15698,0.62019 -0.2079,1.09369 -0.20616,1.91704 0.002,0.71863 0.0298,1.03925 0.13792,1.56474 0.41693,2.02586 1.72207,3.48002 3.48881,3.88718 0.68218,0.15721 1.7335,0.15662 2.52189,-10e-4 0.63562,-0.12742 1.28939,-0.38719 1.73463,-0.68923 0.10289,-0.0698 0.13852,-0.084 0.15283,-0.0608 0.0491,0.0794 0.45768,1.17263 0.44786,1.19824 -0.019,0.0494 -0.83248,0.43882 -1.12355,0.53787 -0.91263,0.31054 -1.79248,0.42769 -2.89225,0.38508 z"
id="path1872"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 503.93791,493.62356 c -2.07746,-0.096 -3.36279,-1.42647 -3.78398,-3.91681 -0.16081,-0.95079 -0.17097,-1.28755 -0.17122,-5.67738 l -2.2e-4,-3.80108 h 0.6849 0.6849 l 0.009,3.99543 c 0.01,4.29399 0.006,4.17411 0.12928,4.93283 0.20902,1.29048 0.65545,2.18782 1.34885,2.71126 0.22059,0.16652 0.57424,0.33239 0.88637,0.41571 0.26636,0.0711 0.27564,0.0719 0.81814,0.0723 0.60452,3.7e-4 0.79632,-0.0264 1.23464,-0.17254 0.98027,-0.32675 1.85898,-1.11843 2.34438,-2.11214 0.22207,-0.45462 0.35237,-0.91771 0.40987,-1.45666 0.0154,-0.14456 0.0237,-1.64625 0.0237,-4.30408 v -4.08207 h 0.68539 0.68539 l 0.007,5.25293 c 0.007,4.8294 0.0106,5.27483 0.0469,5.52463 0.09,0.61989 0.24915,1.3115 0.43807,1.90345 0.0554,0.17357 0.0987,0.31745 0.0962,0.31975 -0.002,0.002 -0.27202,0.0726 -0.59897,0.15629 -0.32695,0.0837 -0.61099,0.15692 -0.63119,0.16279 -0.0837,0.0243 -0.40863,-1.27913 -0.53383,-2.14145 -0.0314,-0.2163 -0.0614,-0.39756 -0.0666,-0.4028 -0.005,-0.005 -0.0427,0.0484 -0.0832,0.11926 -0.19471,0.34032 -0.67239,0.94143 -0.95894,1.20673 -0.73586,0.68127 -1.55316,1.08244 -2.52759,1.24065 -0.29945,0.0486 -0.79251,0.0708 -1.17747,0.053 z"
id="path1874"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 513.56348,488.56781 c -3e-5,-5.43156 -0.016,-6.15699 -0.16068,-7.29922 -0.0428,-0.33756 -0.14488,-0.93016 -0.17285,-1.00305 -0.013,-0.0338 0.0394,-0.0372 0.56954,-0.0372 h 0.58382 l 0.0498,0.13147 c 0.0757,0.19985 0.17257,0.60415 0.21498,0.8974 0.0351,0.24236 0.0545,0.49597 0.0991,1.29179 l 0.0167,0.29723 0.0661,-0.17148 c 0.10456,-0.27115 0.39165,-0.82502 0.56014,-1.08066 0.60146,-0.91256 1.36468,-1.43844 2.33457,-1.60862 0.26524,-0.0465 0.87847,-0.0489 1.09746,-0.004 l 0.14861,0.0303 0.006,0.61334 0.006,0.61333 -0.0633,-0.0124 c -0.26434,-0.0519 -0.73294,-0.0272 -1.07303,0.0566 -0.79128,0.19479 -1.48057,0.7114 -2.0224,1.51578 -0.37454,0.556 -0.62369,1.1928 -0.76406,1.95278 -0.12391,0.67092 -0.12487,0.70772 -0.12487,4.77523 v 3.7574 h -0.68591 -0.68591 l -3e-5,-4.71563 z"
id="path1876"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0228637;stroke-linejoin:bevel"
d="m 525.93275,493.62391 c -1.65452,-0.0715 -3.07447,-0.7456 -4.11474,-1.9535 -0.83427,-0.9687 -1.30115,-2.06319 -1.50149,-3.51986 -0.0581,-0.42251 -0.0589,-1.70686 -10e-4,-2.18348 0.0779,-0.64501 0.16884,-1.09602 0.32509,-1.61225 0.51873,-1.71385 1.6463,-3.14863 3.02432,-3.84831 0.84066,-0.42683 1.82792,-0.61855 2.85487,-0.55438 1.07584,0.0672 1.89386,0.35168 2.60276,0.90508 0.20635,0.16109 0.56637,0.52552 0.72259,0.73147 0.72056,0.94989 1.15786,2.26485 1.32302,3.97828 0.0318,0.32999 0.0691,0.94289 0.0692,1.13746 l 8e-5,0.15433 h -4.80491 -4.80491 l 0.0146,0.30473 c 0.0472,0.98364 0.27777,1.91316 0.66744,2.69041 0.2357,0.47015 0.50073,0.85081 0.83361,1.19731 0.63858,0.66471 1.37965,1.06361 2.30458,1.24049 0.26668,0.051 0.39656,0.0617 0.86587,0.0714 0.33057,0.007 0.67463,7.4e-4 0.85739,-0.0151 1.01661,-0.0883 1.99119,-0.32316 3.01133,-0.72583 0.20569,-0.0812 0.37732,-0.14428 0.3814,-0.1402 0.004,0.004 0.0286,0.2439 0.0545,0.53294 0.0259,0.28904 0.0517,0.55935 0.0574,0.60069 0.01,0.0723 0.005,0.0774 -0.11982,0.13367 -1.12856,0.5072 -2.5105,0.82826 -3.73119,0.86686 -0.20749,0.007 -0.41326,0.0145 -0.45728,0.0175 -0.044,0.003 -0.23949,-0.001 -0.4344,-0.01 z m 3.92525,-8.30586 c -0.0373,-0.73639 -0.22124,-1.47872 -0.50762,-2.04889 -0.28846,-0.57429 -0.77842,-1.14091 -1.28138,-1.48185 -0.64227,-0.43537 -1.49807,-0.64373 -2.37308,-0.57777 -0.56959,0.0429 -0.99582,0.15659 -1.46652,0.39103 -0.3711,0.18484 -0.65462,0.39226 -0.98382,0.71975 -0.65559,0.65217 -1.08507,1.38337 -1.34693,2.29315 -0.0801,0.27833 -0.19568,0.82804 -0.19568,0.93077 v 0.057 h 4.08469 4.08469 z"
id="path1878"
transform="scale(0.26458333)" />
<path
style="fill:#ff7f2a;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.00390625;stroke-linejoin:bevel"
d="m 346.33008,493.51692 c -0.19105,-0.0158 -0.34947,-0.0666 -0.4961,-0.15884 -0.0726,-0.0457 -0.13623,-0.0975 -0.20933,-0.17041 -0.1413,-0.14094 -0.23085,-0.27268 -0.30043,-0.44196 -0.11571,-0.28148 -0.132,-0.6355 -0.0434,-0.94224 0.0788,-0.27256 0.25714,-0.54021 0.47695,-0.71562 0.25991,-0.20741 0.58983,-0.27683 0.91602,-0.19276 0.13845,0.0357 0.27496,0.10481 0.40429,0.20471 0.0575,0.0444 0.19,0.1766 0.24059,0.24004 0.1757,0.22033 0.27037,0.44545 0.30308,0.72071 0.007,0.0569 0.007,0.25165 0,0.30859 -0.0388,0.32638 -0.16923,0.58254 -0.41682,0.81856 -0.20563,0.19601 -0.44692,0.30676 -0.71433,0.32786 -0.0469,0.004 -0.12443,0.004 -0.16056,0.001 z"
id="path2003"
transform="scale(0.26458333)" />
<path
style="fill:#ff7f2a;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.00692709;stroke-linejoin:bevel"
d="m 450.94689,493.51322 c -0.32583,-0.0199 -0.61424,-0.18585 -0.83574,-0.48077 -0.15606,-0.2078 -0.23824,-0.43252 -0.26022,-0.71159 -0.0326,-0.41326 0.11286,-0.81204 0.4093,-1.12247 0.16176,-0.16939 0.36357,-0.28049 0.58322,-0.32108 0.0889,-0.0164 0.2697,-0.0166 0.35975,-3.6e-4 0.24158,0.0436 0.45295,0.16241 0.64304,0.3615 0.25309,0.26509 0.38491,0.56712 0.40054,0.91773 0.0166,0.37248 -0.10928,0.7059 -0.36849,0.97597 -0.26495,0.27604 -0.57497,0.40288 -0.9314,0.38107 z"
id="path2005"
transform="scale(0.26458333)" />
<path
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0142009;stroke-linejoin:bevel"
d="m 378.70973,477.38924 c -0.30862,-0.0605 -0.54776,-0.23712 -0.67364,-0.49739 -0.10967,-0.22674 -0.12982,-0.3282 -0.12944,-0.65164 2.8e-4,-0.24333 0.004,-0.29156 0.0328,-0.39763 0.10884,-0.40416 0.38122,-0.69509 0.74078,-0.79124 0.11521,-0.0308 0.41144,-0.0341 0.52544,-0.006 0.11426,0.0283 0.29411,0.1165 0.38193,0.18723 0.19583,0.15773 0.3649,0.41716 0.42983,0.65955 0.0444,0.16582 0.0446,0.53239 3.3e-4,0.69584 -0.11118,0.41058 -0.39121,0.69673 -0.7709,0.78775 -0.128,0.0307 -0.41275,0.0378 -0.53716,0.0134 z"
id="path2161"
transform="scale(0.26458333)" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="heading"
transform="translate(-59.014718,-105.5257)">
<g
aria-label="Infix"
id="text1160"
style="font-size:25.4px;font-family:'URW Bookman';-inkscape-font-specification:'URW Bookman, Normal';fill:#5c5f5c;stroke-width:1.029"
inkscape:label="infix">
<path
d="m 85.532731,107.6593 0.508,0.0762 c 1.3462,0.1778 1.6256,0.635 1.651,2.794 v 9.9822 c -0.0254,2.159 -0.3048,2.6162 -1.651,2.794 l -0.508,0.0762 v 0.7874 h 6.858 v -0.7874 l -0.508,-0.0762 c -1.3462,-0.1778 -1.6256,-0.635 -1.651,-2.794 v -9.9822 c 0.0254,-2.159 0.3048,-2.6162 1.651,-2.794 l 0.508,-0.0762 v -0.7874 h -6.858 z"
id="path2431" />
<path
d="m 98.588334,111.8503 h -0.8636 c -1.5748,0.3048 -2.413,0.4064 -3.8354,0.508 v 0.762 l 0.6096,0.0508 c 1.3462,0.1524 1.6764,0.5588 1.6764,2.1082 v 5.969 c 0,1.397 -0.4572,2.0066 -1.5748,2.1082 l -0.635,0.0508 v 0.762 h 6.832596 v -0.762 l -0.635,-0.0508 c -1.117596,-0.1016 -1.574796,-0.7112 -1.574796,-2.1082 v -6.2738 c 1.574796,-1.4224 3.073396,-2.1336 4.495796,-2.1336 1.397,0 2.159,0.889 2.159,2.54 v 5.8674 c 0,1.397 -0.4826,2.0066 -1.5748,2.1082 l -0.635,0.0508 v 0.762 h 6.8326 v -0.762 l -0.635,-0.0508 c -1.1176,-0.1016 -1.5748,-0.7112 -1.5748,-2.1082 v -6.2738 c 0,-2.1082 -1.4224,-3.3528 -3.8354,-3.3528 -1.9558,0 -3.429,0.635 -5.232396,2.2352 z"
id="path2433" />
<path
d="m 115.27613,111.8503 v -1.5748 c 0,-1.651 0.0508,-1.9812 0.4064,-2.5908 0.4826,-0.8382 1.4986,-1.3462 2.6416,-1.3462 1.27,0 2.4638,0.762 2.4638,1.6256 0.0254,1.0414 0.0254,1.0414 0.2286,1.397 0.2286,0.4064 0.635,0.635 1.143,0.635 0.762,0 1.27,-0.5334 1.27,-1.27 0,-0.5842 -0.2286,-1.0668 -0.762,-1.6256 -1.016,-1.0414 -2.413,-1.5748 -4.191,-1.5748 -1.9558,0 -3.7338,0.6604 -4.6482,1.7272 -0.6858,0.8128 -0.9652,1.8542 -0.9652,3.6322 v 0.9652 h -2.159 v 0.8382 h 2.159 v 8.5598 c 0,1.397 -0.4572,2.0066 -1.5748,2.1082 l -0.635,0.0508 v 0.762 h 6.8326 v -0.762 l -0.635,-0.0508 c -1.1176,-0.1016 -1.5748,-0.7112 -1.5748,-2.1082 v -8.5598 h 3.3782 c 1.8288,0 2.3368,0.5842 2.3114,2.667 v 5.8928 c 0,1.397 -0.4572,2.0066 -1.5748,2.1082 l -0.635,0.0508 v 0.762 h 6.8326 v -0.762 l -0.635,-0.0508 c -1.1176,-0.1016 -1.5748,-0.7112 -1.5748,-2.1082 v -9.398 z"
id="path2435" />
<path
d="m 134.09755,117.0827 2.2098,-2.3622 c 1.397,-1.3716 2.1082,-1.778 3.81,-2.1082 v -0.762 h -5.3594 v 0.762 c 0.9144,0.1016 1.143,0.2286 1.143,0.6604 0,0.2032 -0.0762,0.4064 -0.254,0.6096 l -2.159,2.4384 -2.0066,-2.4384 c -0.1778,-0.254 -0.3048,-0.4826 -0.3048,-0.635 0,-0.3556 0.3048,-0.5334 1.0414,-0.6096 l 0.254,-0.0254 v -0.762 h -6.2992 v 0.762 c 1.2192,0.1778 1.7018,0.4826 2.5908,1.5494 l 2.9718,3.7338 -3.2258,3.6322 c -1.143,1.2954 -1.8034,1.7018 -3.0226,1.8796 v 0.762 h 5.6896 v -0.762 c -0.889,-0.1524 -1.0922,-0.2032 -1.27,-0.3048 -0.254,-0.1524 -0.4318,-0.4064 -0.4318,-0.6604 0,-0.254 0.1778,-0.5842 0.4572,-0.9144 l 2.54,-2.8448 2.286,3.2004 c 0.1524,0.2286 0.254,0.4826 0.254,0.6858 0,0.4826 -0.3048,0.6604 -1.524,0.8382 v 0.762 h 7.0358 v -0.762 c -1.3716,-0.2286 -1.8288,-0.5334 -2.9464,-1.8796 z"
id="path2437" />
</g>
</g>
<g
inkscape:label="tux"
inkscape:groupmode="layer"
id="layer1"
style="display:inline"
transform="translate(-59.014718,-105.5257)">
<path
id="rect1698"
style="fill:#f9f9f9;stroke:#5c5f5c;stroke-width:1.029;stroke-linejoin:round"
inkscape:label="body"
d="M 59.529221,107.02922 H 82 V 124 H 59.529221 Z" />
<path
id="rect184-3"
style="fill:#ff7f2a;stroke:#5c5f5c;stroke-linejoin:round"
inkscape:label="foot-r"
d="m 76,120 h 6 v 4 h -6 z" />
<path
id="rect184"
style="fill:#ff7f2a;stroke:#5c5f5c;stroke-linejoin:round"
inkscape:label="foot-l"
d="m 59.529221,120 h 6 v 4 h -6 z" />
<path
id="path11801"
style="fill:#ff7f2a"
inkscape:label="nose"
inkscape:transform-center-y="0.49151511"
transform="translate(28.350554,16.321792)"
d="m 42.414055,100.66737 -1.702663,-2.949101 h 3.405325 z" />
<path
id="path6519-5"
style="display:inline;fill:#5c5f5c;stroke-width:4.99999"
inkscape:label="eye-r"
d="m 73.711082,111.02191 a 0.5,0.5 0 0 1 -0.5,0.5 0.5,0.5 0 0 1 -0.5,-0.5 0.5,0.5 0 0 1 0.5,-0.5 0.5,0.5 0 0 1 0.5,0.5 z" />
<path
id="path6519"
style="fill:#5c5f5c;stroke-width:4.99999"
inkscape:label="eye-l"
d="m 68.81813,111.02191 a 0.5,0.5 0 0 1 -0.5,0.5 0.5,0.5 0 0 1 -0.5,-0.5 0.5,0.5 0 0 1 0.5,-0.5 0.5,0.5 0 0 1 0.5,0.5 z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 46 KiB

Some files were not shown because too many files have changed in this diff Show More