Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a096a56428 | ||
|
|
0b81e46306 | ||
|
|
3720e09779 | ||
|
|
91fdf6144c | ||
|
|
c23c2245f2 | ||
|
|
cb85b6fc43 | ||
|
|
9ca0dd6cdc | ||
|
|
c59f53eeed | ||
|
|
040bd5b10c | ||
|
|
bb07f87f9c | ||
|
|
40755424ee | ||
|
|
fe8610b30d | ||
|
|
a0a4051c8a | ||
|
|
d38c3f3406 | ||
|
|
9d9e099cdb | ||
|
|
a9430070d2 | ||
|
|
a3d30eb32f | ||
|
|
6bd00d8403 | ||
|
|
d715f02da0 | ||
|
|
81a56fe304 | ||
|
|
99c87d0f1d | ||
|
|
3a164e294d | ||
|
|
c42b0b536d | ||
|
|
c61b4361ab | ||
|
|
065f86a74c | ||
|
|
0f6c7608ec | ||
|
|
93d59b024a | ||
|
|
096a8ab2e2 | ||
|
|
1a3e1dcabc | ||
|
|
69056bfb2c | ||
|
|
dd4221802f | ||
|
|
e1783f3c23 | ||
|
|
0957774208 | ||
|
|
77963d5267 | ||
|
|
2f13fc7843 | ||
|
|
e7f68be143 | ||
|
|
197bb1507e | ||
|
|
b18a719cee | ||
|
|
b330c6c70d | ||
|
|
64a3770a76 | ||
|
|
6a745f50f8 | ||
|
|
f41ff6d3e7 | ||
|
|
400691af85 | ||
|
|
0bada691fc | ||
|
|
164a1018a0 | ||
|
|
805acdf782 | ||
|
|
df3f9f2e40 | ||
|
|
2761a17abc | ||
|
|
77b364d682 | ||
|
|
1989effaad | ||
|
|
142e4e95b7 | ||
|
|
44d37808f1 | ||
|
|
eb3e64d243 | ||
|
|
2171fd12ca | ||
|
|
249af70dcd | ||
|
|
b4a5b35c0e | ||
|
|
fe2d0f488d | ||
|
|
c14140a8fe | ||
|
|
9fe661f422 | ||
|
|
87f9b58957 | ||
|
|
b657183209 | ||
|
|
1aad255846 | ||
|
|
52beeb5814 | ||
|
|
c1ad8075a8 | ||
|
|
3fcb6a376a | ||
|
|
33e873c2fa | ||
|
|
56fce18d66 | ||
|
|
399894e9a1 | ||
|
|
8146e0570e | ||
|
|
153ceda2f4 | ||
|
|
b134733dd2 | ||
|
|
8082b271d9 | ||
|
|
02d8c97e98 | ||
|
|
7bb3f64191 | ||
|
|
f2af4d6cdf | ||
|
|
4417465135 | ||
|
|
cf50c75a3e | ||
|
|
7ab265992a | ||
|
|
35cf9e4cc9 | ||
|
|
3fbbd16690 | ||
|
|
01029321c9 | ||
|
|
0477446e49 | ||
|
|
700ec2f855 | ||
|
|
709f2769ce | ||
|
|
19b965ac41 | ||
|
|
28d8748bdb | ||
|
|
497990a2d3 | ||
|
|
dce9a9c53d | ||
|
|
4f0aded5a0 | ||
|
|
73298469d5 | ||
|
|
7c019190c8 | ||
|
|
17df77ca0f | ||
|
|
a188f4269d | ||
|
|
6cdcd5775d | ||
|
|
1d0c2be515 | ||
|
|
fc7e1d0745 | ||
|
|
950a6ef794 | ||
|
|
7f829cfbdf | ||
|
|
86df54c107 | ||
|
|
34dead1a50 | ||
|
|
313554d12e | ||
|
|
8b39d3fdc7 | ||
|
|
66a5e5304b | ||
|
|
12df83e6d2 | ||
|
|
6b0145f92e | ||
|
|
b21043c7e5 | ||
|
|
ab9b2f555b | ||
|
|
cfeefc1d86 | ||
|
|
d65c478a28 | ||
|
|
477f7aed72 | ||
|
|
da3bf57515 | ||
|
|
0d43e135a9 | ||
|
|
ddd5172a6b | ||
|
|
6717bbbe26 | ||
|
|
7683466424 | ||
|
|
6cc380d8ce | ||
|
|
8740b2eb23 | ||
|
|
7244fad2e8 | ||
|
|
edbc28a48b | ||
|
|
33c95e860b | ||
|
|
a60968b7b2 | ||
|
|
8abc27e698 | ||
|
|
2646a48227 | ||
|
|
a8f57618b8 | ||
|
|
9374feefb0 | ||
|
|
d4726aff82 | ||
|
|
3ac6eaa16b | ||
|
|
e6bd55c0be | ||
|
|
c3975f4ce5 | ||
|
|
611c1a6d51 | ||
|
|
d5536fa536 | ||
|
|
ce895a4c59 | ||
|
|
a7d91b4f80 | ||
|
|
bb19d064d5 | ||
|
|
fa7c743843 | ||
|
|
a2a11e816a | ||
|
|
7c73ddeaaf | ||
|
|
bc6180680d | ||
|
|
21df66d221 | ||
|
|
684bbafad5 | ||
|
|
ce6b4729cd | ||
|
|
b0a6e167bc | ||
|
|
54bb3a01e2 | ||
|
|
fcce71fe23 | ||
|
|
de4db3e6bc | ||
|
|
7803f6bc10 | ||
|
|
5c1bcbaf44 | ||
|
|
eefe84fd4b | ||
|
|
a3c26c4ef3 | ||
|
|
a845c3e9f3 | ||
|
|
d151b5ef7c | ||
|
|
0491c1f195 | ||
|
|
1c04409cf3 | ||
|
|
14dd7cbc33 | ||
|
|
ebf4157e2c | ||
|
|
8a1747db2c | ||
|
|
ded65cf94a | ||
|
|
30757c8160 | ||
|
|
b3fe0d58d8 | ||
|
|
15a2221b23 | ||
|
|
c135230289 | ||
|
|
99af0ba0e5 | ||
|
|
2f296e9857 | ||
|
|
f02048e904 | ||
|
|
bdc391b4ce | ||
|
|
9aacd251b8 | ||
|
|
867ea6e92a | ||
|
|
ce89499518 | ||
|
|
cf4a29da84 | ||
|
|
edc1346753 | ||
|
|
ed5baf5839 | ||
|
|
5b100fb99e | ||
|
|
dc8fc40002 | ||
|
|
5a339e46cb | ||
|
|
90ec35c69e | ||
|
|
f98b00fcca | ||
|
|
83f2c27e6d | ||
|
|
b0adf85f12 | ||
|
|
fcbd75a0ef | ||
|
|
d1e71454cf | ||
|
|
fdf1aaebcc | ||
|
|
238ea9118b | ||
|
|
67838fa66b | ||
|
|
c574f23210 | ||
|
|
a66e000699 | ||
|
|
c692c93f94 | ||
|
|
a491f2a88b | ||
|
|
9d912446a7 | ||
|
|
3d3a4cac55 | ||
|
|
fc0a68a18a | ||
|
|
ea2627d4f6 | ||
|
|
21321f0196 | ||
|
|
dadb90a6d8 | ||
|
|
d5d3eef08b | ||
|
|
14fb93f5cf | ||
|
|
7b3cd7d663 | ||
|
|
67817a182c |
@@ -0,0 +1,144 @@
|
||||
name: Build Bootloaders
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: 'Branch to build from'
|
||||
default: 'main'
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build ${{ matrix.defconfig }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
defconfig:
|
||||
- fireant_boot
|
||||
- cn9130_crb_boot
|
||||
- aarch64_qemu_boot
|
||||
- rpi4_boot
|
||||
- mt7986_sd_boot
|
||||
env:
|
||||
MAKEFLAGS: -j5
|
||||
steps:
|
||||
- name: Cleanup Build Folder
|
||||
run: |
|
||||
ls -la ./
|
||||
rm -rf ./* || true
|
||||
rm -rf ./.??* || true
|
||||
ls -la ./
|
||||
|
||||
- name: Checkout infix repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.branch || github.ref }}
|
||||
clean: true
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Set Build Variables
|
||||
id: vars
|
||||
run: |
|
||||
defconfig=${{ matrix.defconfig }}
|
||||
version=$(awk -F'"' '/BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE=/ {print $2}' configs/${defconfig}_defconfig)
|
||||
version=${version:-git}
|
||||
filename=$(echo "${defconfig}" | tr '_' '-')
|
||||
|
||||
# TODO: Replace hardcoded rev with actual revision stepping
|
||||
rev="latest"
|
||||
|
||||
archive="${filename}-${version}-${rev}.tar.gz"
|
||||
dirname="${filename}-${version}-${rev}"
|
||||
|
||||
echo "defconfig=${defconfig}" >> $GITHUB_OUTPUT
|
||||
echo "version=${version}" >> $GITHUB_OUTPUT
|
||||
echo "rev=${rev}" >> $GITHUB_OUTPUT
|
||||
echo "archive=${archive}" >> $GITHUB_OUTPUT
|
||||
echo "dirname=${dirname}" >> $GITHUB_OUTPUT
|
||||
|
||||
echo "Building ${defconfig}_defconfig, version ${version}-${rev}, artifact ${archive} ..."
|
||||
|
||||
- name: Restore Cache of dl/
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: dl/
|
||||
key: dl-boot-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
dl-boot-
|
||||
dl-
|
||||
|
||||
- name: Restore Cache of .ccache/
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .ccache/
|
||||
key: ccache-boot-${{ matrix.defconfig }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
ccache-boot-${{ matrix.defconfig }}-
|
||||
ccache-boot-
|
||||
ccache-
|
||||
|
||||
- name: Configure ${{ matrix.defconfig }}_defconfig
|
||||
run: |
|
||||
make ${{ matrix.defconfig }}_defconfig
|
||||
|
||||
- name: Build ${{ matrix.defconfig }}_defconfig
|
||||
run: |
|
||||
echo "Building ${{ matrix.defconfig }}_defconfig ..."
|
||||
make -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))
|
||||
|
||||
- name: Resulting size of build
|
||||
run: |
|
||||
printf "Size of output/images/: "
|
||||
ls -l output/images/
|
||||
|
||||
- name: Prepare ${{ matrix.defconfig }} Artifact
|
||||
run: |
|
||||
cd output/
|
||||
mv images ${{ steps.vars.outputs.dirname }}
|
||||
tar cfz ${{ steps.vars.outputs.archive }} ${{ steps.vars.outputs.dirname }}/
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: output/${{ steps.vars.outputs.archive }}
|
||||
name: artifact-${{ matrix.defconfig }}
|
||||
|
||||
publish:
|
||||
name: Upload Bootloader Artifacts
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: "artifact-*"
|
||||
merge-multiple: true
|
||||
|
||||
- name: Create checksums ...
|
||||
run: |
|
||||
for file in *.tar.gz; do
|
||||
sha256sum $file > $file.sha256
|
||||
done
|
||||
|
||||
- uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
omitName: true
|
||||
omitBody: true
|
||||
omitBodyDuringUpdate: true
|
||||
prerelease: true
|
||||
tag: "latest-boot"
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
artifacts: "*.tar.gz*"
|
||||
|
||||
- name: Summary
|
||||
run: |
|
||||
cat <<EOF >> $GITHUB_STEP_SUMMARY
|
||||
# Bootloader Build Complete! :rocket:
|
||||
|
||||
For the public download links of these bootloader artifacts, please see:
|
||||
<https://github.com/kernelkit/infix/releases/tag/latest-boot>
|
||||
EOF
|
||||
@@ -0,0 +1,225 @@
|
||||
name: Create SD Card Images
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
board:
|
||||
description: 'Board to create image for'
|
||||
type: choice
|
||||
required: true
|
||||
options:
|
||||
- raspberry-pi-4
|
||||
- banana-pi-r3
|
||||
default: 'raspberry-pi-4'
|
||||
use_latest_release:
|
||||
description: 'Use latest release artifacts instead of workflow artifacts'
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
create-image:
|
||||
name: Create SD Card Image for ${{ inputs.board }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
clean: true
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
genimage \
|
||||
u-boot-tools \
|
||||
parted \
|
||||
gdisk \
|
||||
qemu-utils \
|
||||
dosfstools \
|
||||
e2fsprogs \
|
||||
genext2fs \
|
||||
mtools \
|
||||
jq
|
||||
|
||||
- name: Prepare build environment
|
||||
run: |
|
||||
# Set up directory structure similar to buildroot build
|
||||
mkdir -p output/images
|
||||
mkdir -p build
|
||||
|
||||
- name: Set bootloader and target based on board
|
||||
run: |
|
||||
case "${{ inputs.board }}" in
|
||||
raspberry-pi-4)
|
||||
echo "BOOTLOADER=rpi4_boot" >> $GITHUB_ENV
|
||||
echo "TARGET=aarch64" >> $GITHUB_ENV
|
||||
;;
|
||||
banana-pi-r3)
|
||||
echo "BOOTLOADER=mt7986_sd_boot" >> $GITHUB_ENV
|
||||
echo "TARGET=aarch64" >> $GITHUB_ENV
|
||||
;;
|
||||
*)
|
||||
echo "Error: Unknown board ${{ inputs.board }}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
echo "Using bootloader: $BOOTLOADER and target: $TARGET for board: ${{ inputs.board }}"
|
||||
|
||||
- name: Download bootloader artifacts
|
||||
if: ${{ !inputs.use_latest_release }}
|
||||
run: |
|
||||
# Download from latest bootloader build workflow on main branch
|
||||
gh run list --workflow=build-boot.yml --branch=main --limit=1 --status=success --json databaseId --jq '.[0].databaseId' > latest_boot_run_id
|
||||
BOOT_RUN_ID=$(cat latest_boot_run_id)
|
||||
|
||||
gh run download ${BOOT_RUN_ID} --name artifact-${BOOTLOADER} --dir temp_bootloader/
|
||||
|
||||
# Extract bootloader directly to output/images
|
||||
cd temp_bootloader/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output/images/
|
||||
cd ../
|
||||
rm -rf temp_bootloader/
|
||||
|
||||
echo "Bootloader files extracted to output/images:"
|
||||
ls -la output/images/
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download Infix artifacts
|
||||
if: ${{ !inputs.use_latest_release }}
|
||||
run: |
|
||||
# Download from latest Kernelkit Trigger workflow for main branch
|
||||
gh run list --workflow=164295764 --branch=main --limit=1 --status=success --json databaseId --jq '.[0].databaseId' > latest_infix_run_id
|
||||
INFIX_RUN_ID=$(cat latest_infix_run_id)
|
||||
|
||||
gh run download ${INFIX_RUN_ID} --name artifact-${TARGET} --dir temp_infix/
|
||||
|
||||
# Extract Infix directly to output/images
|
||||
cd temp_infix/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output/images/
|
||||
cd ../
|
||||
rm -rf temp_infix/
|
||||
|
||||
echo "Infix files extracted to output/images:"
|
||||
ls -la output/images/
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download from latest releases
|
||||
if: ${{ inputs.use_latest_release }}
|
||||
run: |
|
||||
# Download latest bootloader release
|
||||
gh release download latest-boot --pattern "*${BOOTLOADER}*" --dir temp_bootloader/
|
||||
cd temp_bootloader/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output/images/
|
||||
cd ../
|
||||
rm -rf temp_bootloader/
|
||||
|
||||
# Download latest Infix release
|
||||
gh release download latest --pattern "*${TARGET}*" --dir temp_infix/
|
||||
cd temp_infix/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output/images/
|
||||
cd ../
|
||||
rm -rf temp_infix/
|
||||
|
||||
echo "All files extracted to output/images:"
|
||||
ls -la output/images/
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Verify extracted files
|
||||
run: |
|
||||
echo "Files available for mkimage.sh:"
|
||||
ls -la output/images/
|
||||
echo ""
|
||||
echo "File types:"
|
||||
file output/images/* || true
|
||||
|
||||
- name: Create SD card image
|
||||
run: |
|
||||
export BINARIES_DIR=$PWD/output/images
|
||||
export BUILD_DIR=$PWD/build
|
||||
export BR2_EXTERNAL_INFIX_PATH=$PWD
|
||||
export RELEASE=""
|
||||
export INFIX_ID="infix"
|
||||
|
||||
# Use the standardized mkimage.sh path for the selected board
|
||||
# BOARD_SCRIPT="src/board/${{ inputs.board }}/mkimage.sh"
|
||||
BOARD_SCRIPT="src/board/${{ inputs.board }}/mkimage.sh"
|
||||
|
||||
if [ -f "$BOARD_SCRIPT" ]; then
|
||||
echo "Using board-specific image creation script: $BOARD_SCRIPT"
|
||||
chmod +x "$BOARD_SCRIPT"
|
||||
"$BOARD_SCRIPT"
|
||||
else
|
||||
echo "Error: Board script $BOARD_SCRIPT not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Verify created image
|
||||
run: |
|
||||
echo "Contents of output/images after mkimage.sh:"
|
||||
ls -lh output/images/
|
||||
|
||||
# Look for SD card image with pattern: *-sdcard.img
|
||||
if ls output/images/*-sdcard.img 1> /dev/null 2>&1; then
|
||||
echo "Found SD card image(s):"
|
||||
for img in output/images/*-sdcard.img; do
|
||||
echo "- $(basename $img)"
|
||||
file "$img"
|
||||
fdisk -l "$img" 2>/dev/null || true
|
||||
done
|
||||
else
|
||||
echo "No SD card image found matching pattern: *-sdcard.img"
|
||||
echo "Available files:"
|
||||
ls -la output/images/
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Upload SD card image
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: sdcard-image-${{ inputs.board }}-${{ env.BOOTLOADER }}
|
||||
path: |
|
||||
output/images/*-sdcard.img
|
||||
retention-days: 30
|
||||
|
||||
- name: Create checksums
|
||||
run: |
|
||||
cd output/images/
|
||||
for file in *-sdcard.img; do
|
||||
if [ -f "$file" ]; then
|
||||
sha256sum "$file" > "$file.sha256"
|
||||
fi
|
||||
done
|
||||
|
||||
- name: Upload to release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
omitName: true
|
||||
omitBody: true
|
||||
omitBodyDuringUpdate: true
|
||||
prerelease: true
|
||||
tag: "latest-boot"
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
artifacts: "output/images/*-sdcard.img*"
|
||||
|
||||
- name: Generate summary
|
||||
run: |
|
||||
cat <<EOF >> $GITHUB_STEP_SUMMARY
|
||||
# SD Card Image Build Complete! 🚀
|
||||
|
||||
**Board:** ${{ inputs.board }}
|
||||
**Target:** ${{ env.TARGET }}
|
||||
**Bootloader:** ${{ env.BOOTLOADER }}
|
||||
**Artifact Source:** ${{ inputs.use_latest_release && 'Latest Release' || 'Latest Workflow Run' }}
|
||||
|
||||
## Created Images
|
||||
$(find output/images/ -name "*.img" -o -name "*.qcow2" -o -name "*.raw" | xargs ls -lh 2>/dev/null | sed 's/^/- /' || echo "- No images found")
|
||||
|
||||
## Download
|
||||
The SD card image is available as a workflow artifact above.
|
||||
EOF
|
||||
@@ -3,23 +3,23 @@ name: Build
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
flavor:
|
||||
description: 'Optional build flavor (e.g. _minimal)'
|
||||
required: false
|
||||
default: ''
|
||||
target:
|
||||
description: "Build target (e.g. aarch64 or aarch64_minimal)"
|
||||
default: "x86_64"
|
||||
type: string
|
||||
parallel:
|
||||
description: 'Massive parallel build of each image'
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
name:
|
||||
description: "Name (for spin overrides)"
|
||||
default: "infix"
|
||||
type: string
|
||||
infix_repo:
|
||||
description: 'Repo to checkout (for spin overrides)'
|
||||
required: false
|
||||
default: kernelkit/infix
|
||||
type: string
|
||||
|
||||
|
||||
workflow_call:
|
||||
inputs:
|
||||
target:
|
||||
@@ -28,23 +28,26 @@ on:
|
||||
name:
|
||||
required: true
|
||||
type: string
|
||||
flavor:
|
||||
required: false
|
||||
type: string
|
||||
default: ''
|
||||
infix_repo:
|
||||
required: false
|
||||
type: string
|
||||
default: kernelkit/infix
|
||||
parallel:
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
env:
|
||||
FLV: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.flavor || inputs.flavor }}
|
||||
NAME: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.name || inputs.name }}
|
||||
TARGET: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.target || inputs.target }}
|
||||
INFIX_REPO: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.infix_repo || inputs.infix_repo }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build ${{ inputs.name }} ${{ inputs.target }}
|
||||
name: Build ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.name || inputs.name }} ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.target || inputs.target }}
|
||||
runs-on: [ self-hosted, latest ]
|
||||
env:
|
||||
PARALLEL: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.parallel == 'true' || github.event_name != 'workflow_dispatch' && inputs.parallel == true }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
outputs:
|
||||
@@ -80,12 +83,11 @@ jobs:
|
||||
| tee -a $GITHUB_OUTPUT $GITHUB_ENV
|
||||
fi
|
||||
|
||||
target=${{ inputs.target }}
|
||||
name=${{ inputs.name }}
|
||||
target=${{ env.TARGET }}
|
||||
name=${{ env.NAME }}
|
||||
echo "dir=${name}-${target}" >> $GITHUB_OUTPUT
|
||||
echo "tgz=${name}-${target}.tar.gz" >> $GITHUB_OUTPUT
|
||||
echo "flv=$FLV" >> $GITHUB_OUTPUT
|
||||
echo "Building target ${target}${FLV}_defconfig"
|
||||
echo "Building target ${target}_defconfig"
|
||||
|
||||
- name: Restore Cache of dl/
|
||||
uses: actions/cache@v4
|
||||
@@ -99,16 +101,16 @@ jobs:
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .ccache/
|
||||
key: ccache-${{ inputs.target }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
||||
key: ccache-${{ env.TARGET }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
ccache-${{ inputs.target }}-
|
||||
ccache-${{ env.TARGET }}-
|
||||
ccache-
|
||||
|
||||
- name: Configure ${{ inputs.target }}${{ steps.vars.outputs.flv }}
|
||||
- name: Configure ${{ env.TARGET }}
|
||||
run: |
|
||||
make ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig
|
||||
make ${{ env.TARGET }}_defconfig
|
||||
|
||||
- name: Unit Test ${{ inputs.target }}
|
||||
- name: Unit Test ${{ env.TARGET }}
|
||||
run: |
|
||||
make test-unit
|
||||
|
||||
@@ -116,7 +118,7 @@ jobs:
|
||||
id: parallel
|
||||
run: |
|
||||
|
||||
if [ "${{ ((github.event.inputs.parallel == 'true' && github.event_name == 'workflow_dispatch') || (github.ref_name != 'main' && github.event_name != 'workflow_dispatch')) }}" == "true" ]; then
|
||||
if [ "$PARALLEL" == "true" ]; then
|
||||
echo "BR2_PER_PACKAGE_DIRECTORIES=y" >> output/.config
|
||||
MAKE="make -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))"
|
||||
echo "Building in parallel with -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))"
|
||||
@@ -126,9 +128,9 @@ jobs:
|
||||
fi
|
||||
echo "MAKE=$MAKE" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build ${{ inputs.target }}${{ steps.vars.outputs.flv }}
|
||||
- name: Build ${{ env.TARGET }}
|
||||
run: |
|
||||
echo "Building ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig ..."
|
||||
echo "Building ${{ env.TARGET }}_defconfig ..."
|
||||
eval "${{ steps.parallel.outputs.MAKE }}"
|
||||
|
||||
- name: Check SBOM from Build
|
||||
@@ -150,7 +152,7 @@ jobs:
|
||||
printf "Size of output/images/: "
|
||||
ls -l output/images/
|
||||
|
||||
- name: Prepare ${{ inputs.target }} Artifact
|
||||
- name: Prepare ${{ env.TARGET }} Artifact
|
||||
run: |
|
||||
cd output/
|
||||
mv images ${{ steps.vars.outputs.dir }}
|
||||
@@ -160,4 +162,4 @@ jobs:
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: output/${{ steps.vars.outputs.tgz }}
|
||||
name: artifact-${{ inputs.target }}
|
||||
name: artifact-${{ env.TARGET }}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
name: User Guide Generator
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- doc
|
||||
- main
|
||||
tags:
|
||||
- 'v*'
|
||||
paths:
|
||||
- 'doc/**'
|
||||
- 'mkdocs.yml'
|
||||
- '.github/workflows/docs.yml'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: "docs-${{ github.ref }}"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
docs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.x'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pipx install mkdocs
|
||||
pipx inject mkdocs mkdocs-material
|
||||
pipx inject mkdocs pymdown-extensions
|
||||
pipx inject mkdocs mkdocs-callouts
|
||||
pipx inject mkdocs mike
|
||||
pipx inject mkdocs mkdocs-to-pdf
|
||||
# Workaround, if pipx inject fails to install symlink
|
||||
ln -s "$(pipx environment -V PIPX_LOCAL_VENVS)/mkdocs/bin/mike" \
|
||||
"$(pipx environment -V PIPX_BIN_DIR)/mike" || true
|
||||
|
||||
- name: Configure Git
|
||||
run: |
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
- name: Deploy dev version
|
||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/doc' || github.ref == 'refs/heads/main')
|
||||
run: |
|
||||
mike deploy --push --update-aliases dev latest
|
||||
mike set-default --push latest
|
||||
|
||||
- name: Deploy tagged version
|
||||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
||||
run: |
|
||||
TAG=${GITHUB_REF#refs/tags/v}
|
||||
# Extract YEAR.MONTH from tag (e.g., v25.06.0-beta1 -> 25.06)
|
||||
VERSION=$(echo $TAG | sed -E 's/^([0-9]+\.[0-9]+)(\.[0-9]+)?(-.*)?$/\1/')
|
||||
echo "Deploying tag $TAG as docs version $VERSION"
|
||||
mike deploy --push --update-aliases $VERSION latest
|
||||
mike set-default --push latest
|
||||
@@ -0,0 +1,73 @@
|
||||
name: Generic X86 GitHub Build
|
||||
|
||||
on:
|
||||
push:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.repository != 'kernelkit/infix'
|
||||
name: Infix x86_64
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Install build dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
bc binutils build-essential bzip2 cpio \
|
||||
diffutils file findutils git gzip \
|
||||
libncurses-dev libssl-dev perl patch \
|
||||
python3 rsync sed tar unzip wget \
|
||||
autopoint bison flex autoconf automake \
|
||||
mtools
|
||||
|
||||
- name: Checkout infix repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
ref: ${{ github.ref }}
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Set Build Variables
|
||||
id: vars
|
||||
run: |
|
||||
echo "INFIX_BUILD_ID=${{ github.run_id }}" >> $GITHUB_OUTPUT
|
||||
echo "dir=Infix-x86_64" >> $GITHUB_OUTPUT
|
||||
echo "tgz=Infix-x86_64.tar.gz" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Configure x86_64_minimal
|
||||
run: |
|
||||
make x86_64_minimal_defconfig
|
||||
|
||||
- name: Unit Test x86_64
|
||||
run: |
|
||||
make test-unit
|
||||
|
||||
- name: Build x86_64_minimal
|
||||
run: |
|
||||
make
|
||||
|
||||
- name: Check SBOM
|
||||
run: |
|
||||
make legal-info
|
||||
|
||||
- name: Report Build Size
|
||||
run: |
|
||||
du -sh .
|
||||
du -sh output
|
||||
du -sh dl || true
|
||||
ls -l output/images/
|
||||
|
||||
- name: Prepare Artifact
|
||||
run: |
|
||||
cd output/
|
||||
mv images Infix-x86_64
|
||||
ln -s Infix-x86_64 images
|
||||
tar cfz Infix-x86_64.tar.gz Infix-x86_64
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: output/Infix-x86_64.tar.gz
|
||||
name: artifact-x86_64
|
||||
|
||||
@@ -25,6 +25,7 @@ jobs:
|
||||
- uses: ncipollo/release-action@v1
|
||||
with:
|
||||
allowUpdates: true
|
||||
replacesArtifacts: true
|
||||
omitName: true
|
||||
omitBody: true
|
||||
omitBodyDuringUpdate: true
|
||||
|
||||
@@ -17,10 +17,6 @@ on:
|
||||
name:
|
||||
required: true
|
||||
type: string
|
||||
flavor:
|
||||
required: false
|
||||
type: string
|
||||
default: ''
|
||||
infix_repo:
|
||||
required: false
|
||||
type: string
|
||||
@@ -35,15 +31,15 @@ on:
|
||||
default: 'test'
|
||||
|
||||
env:
|
||||
FLV: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.flavor || inputs.flavor }}
|
||||
TARGET: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.target || inputs.target }}
|
||||
INFIX_REPO: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.infix_repo || inputs.infix_repo }}
|
||||
NINEPM_CONF: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.ninepm-conf || inputs.ninepm-conf }}
|
||||
TEST_PATH: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.test-path || inputs.test-path }}
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Regression Test ${{ inputs.name }} ${{ inputs.target }}
|
||||
runs-on: [ self-hosted, regression ]
|
||||
name: Regression Test ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.name || inputs.name }} ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.target || inputs.target }}
|
||||
runs-on: [self-hosted, regression]
|
||||
steps:
|
||||
- name: Checkout infix repo
|
||||
uses: actions/checkout@v4
|
||||
@@ -62,20 +58,18 @@ jobs:
|
||||
>>$GITHUB_ENV
|
||||
fi
|
||||
|
||||
echo "flv=$FLV" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Configure ${{ inputs.target }}${{ steps.vars.outputs.flv }}
|
||||
- name: Configure ${{ env.TARGET }}
|
||||
run: |
|
||||
make ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig
|
||||
make ${{ env.TARGET }}_defconfig
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: "artifact-*"
|
||||
merge-multiple: true
|
||||
|
||||
- name: Restore x86-64${{ steps.vars.outputs.flv }} output/
|
||||
- name: Restore ${{ env.TARGET }} output/
|
||||
run: |
|
||||
target=${{ inputs.target }}
|
||||
target=${{ env.TARGET }}
|
||||
name=${{ inputs.name }}
|
||||
|
||||
ls -l
|
||||
@@ -85,7 +79,7 @@ jobs:
|
||||
tar xf ${name}-${target}.tar.gz
|
||||
ln -s ${name}-${target} images
|
||||
|
||||
- name: Regression Test x86_64${{ steps.vars.outputs.flv }}
|
||||
- name: Regression Test ${{ env.TARGET }}
|
||||
run: |
|
||||
if [ -n "$NINEPM_CONF" ]; then
|
||||
export NINEPM_PROJ_CONFIG="${GITHUB_WORKSPACE}/$NINEPM_CONF"
|
||||
@@ -93,24 +87,19 @@ jobs:
|
||||
fi
|
||||
make test
|
||||
|
||||
- name: Publish Test Result for x86_64${{ steps.vars.outputs.flv }}
|
||||
- name: Publish Test Result for ${{ env.TARGET }}
|
||||
# Ensure this runs even if Regression Test fails
|
||||
if: always()
|
||||
run: cat $TEST_PATH/.log/last/result-gh.md >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Generate Test Report for x86_64${{ steps.vars.outputs.flv }}
|
||||
- name: Generate Test Report for ${{ env.TARGET }}
|
||||
# Ensure this runs even if Regression Test fails
|
||||
if: always()
|
||||
run: |
|
||||
asciidoctor-pdf \
|
||||
--theme $TEST_PATH/9pm/report/theme.yml \
|
||||
-a pdf-fontsdir=$TEST_PATH/9pm/report/fonts \
|
||||
$TEST_PATH/.log/last/report.adoc \
|
||||
-o $TEST_PATH/.log/last/report.pdf
|
||||
make test-dir="$(pwd)/$TEST_PATH" test-report
|
||||
|
||||
- name: Upload Test Report as Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: test-report
|
||||
path: ${{ env.TEST_PATH }}/.log/last/report.pdf
|
||||
|
||||
path: output/images/test-report.pdf
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Self Trigger
|
||||
name: Kernelkit Trigger
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
@@ -6,32 +6,37 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- ci-workflow-redesign
|
||||
- ci-work
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ci-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-x86_64:
|
||||
if: startsWith(github.repository, 'kernelkit/')
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
target: "x86_64"
|
||||
name: "infix"
|
||||
flavor: "_minimal"
|
||||
target: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ci:main') && 'x86_64_minimal' || 'x86_64' }}
|
||||
|
||||
build-aarch64:
|
||||
if: startsWith(github.repository, 'kernelkit/')
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
target: "aarch64"
|
||||
name: "infix"
|
||||
flavor: "_minimal"
|
||||
target: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ci:main') && 'aarch64_minimal' || 'aarch64' }}
|
||||
|
||||
test-run-x86_64:
|
||||
if: startsWith(github.repository, 'kernelkit/')
|
||||
needs: build-x86_64
|
||||
uses: ./.github/workflows/test.yml
|
||||
with:
|
||||
target: "x86_64"
|
||||
target: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ci:main') && 'x86_64_minimal' || 'x86_64' }}
|
||||
name: "infix"
|
||||
|
||||
test-publish-x86_64:
|
||||
if: startsWith(github.repository, 'kernelkit/')
|
||||
needs: test-run-x86_64
|
||||
uses: ./.github/workflows/publish.yml
|
||||
|
||||
|
||||
@@ -2,57 +2,69 @@
|
||||
|
||||
<img align="right" src="doc/logo.png" alt="Infix - Linux <3 NETCONF" width=480 border=10>
|
||||
|
||||
Infix is a free, Linux-based, immutable operating system built around
|
||||
[Buildroot][1] and [sysrepo][2]. A powerful mix that ease porting to
|
||||
different platforms, simplify long-term maintenance, and provide
|
||||
made-easy management using NETCONF, RESTCONF[^2], or the built-in
|
||||
command line interface (CLI) from a console or SSH login.
|
||||
Turn any ARM or x86 device into a powerful, manageable network appliance
|
||||
in minutes. From $35 Raspberry Pi boards to enterprise switches — deploy
|
||||
routers, IoT gateways, edge devices, or custom network solutions that
|
||||
just work.
|
||||
|
||||
> Click the **▶ Example CLI Session** foldout below for an example, or
|
||||
> head on over to the [Infix Documentation](doc/README.md) for more
|
||||
> information on how to set up the system.
|
||||
## Our Values
|
||||
|
||||
Although primarily focused on switches and routers, the core values
|
||||
may be appealing for other use-cases as well:
|
||||
**🔒 Immutable**
|
||||
Your system never breaks. Read-only filesystem with atomic upgrades
|
||||
means no configuration drift, no corrupted updates, and instant rollback
|
||||
if something goes wrong. Deploy once, trust forever.
|
||||
|
||||
- Runs from a squashfs image on a read-only partition
|
||||
- Single configuration file on a separate partition
|
||||
- Built around YANG with standard IETF models
|
||||
- Linux switchdev provides open switch APIs
|
||||
- Atomic upgrades to secondary partition
|
||||
- Highly security focused
|
||||
**🤝 Friendly**
|
||||
Actually easy to use. Auto-generated CLI from standard YANG models comes
|
||||
with built-in help for every command — just hit `?` or TAB for
|
||||
context-aware assistance. Familiar NETCONF/RESTCONF APIs and
|
||||
[comprehensive documentation][4] mean you're never stuck. Whether
|
||||
you're learning networking or managing enterprise infrastructure.
|
||||
|
||||
An immutable[^1] operating system enhances security and inherently makes
|
||||
it maintenance-free. Configuration and data, e.g, containers, is stored
|
||||
on separate partitions to ensure complete separation from system files
|
||||
and allow for seamless backup, restore, and provisioning.
|
||||
**🛡️ Secure**
|
||||
Built with security as a foundation, not an afterthought. Minimal
|
||||
attack surface, separation between system and data, and container
|
||||
isolation. Sleep better knowing your infrastructure is protected.
|
||||
|
||||
In itself, Infix is perfectly suited for dedicated networking tasks,
|
||||
such as routing, switching, and monitoring. This is how it started, as
|
||||
a network focused operating system. Now, with native support for Docker
|
||||
containers, it provides a versatile platform that can easily be adapted
|
||||
to any customer need. Be it legacy applications, network protocols,
|
||||
process monitoring, or edge data analysis, it can run close to end
|
||||
equipment. Either directly connected on dedicated Ethernet ports or
|
||||
indirectly using virtual network cables to exist on the same LAN as
|
||||
other connected equipment.
|
||||
## Why Choose Infix
|
||||
|
||||
The simple design of Infix provides complete control over both system
|
||||
and data, minimal cognitive burden, and makes it incredibly easy to get
|
||||
started.
|
||||
**Hardware Flexibility**: Start with a $35 Raspberry Pi, scale to
|
||||
enterprise switching hardware. Same OS, same tools, same reliability.
|
||||
|
||||
<details><summary><b>Example CLI Session</b></summary>
|
||||
**Standards-Based**: Built around YANG models and IETF standards. Learn
|
||||
once, use everywhere - no vendor lock-in.
|
||||
|
||||
The CLI configure context is automatically generated from the loaded
|
||||
YANG models and their corresponding [sysrepo][2] plugins. The following
|
||||
is brief example of how to set the IP address of an interface:
|
||||
**Container Ready**: Run your applications alongside networking
|
||||
functions. GPIO access, dedicated Ethernet ports, custom protocols —
|
||||
your device, your rules.
|
||||
|
||||
```
|
||||
## Use Cases
|
||||
|
||||
1. **Home Labs & Hobbyists**:
|
||||
Transform a Raspberry Pi into a full-featured router with WiFi
|
||||
1. **IoT & Edge Computing**:
|
||||
Bridge devices to the cloud with reliable, updatable gateways
|
||||
1. **Small Business Networks**:
|
||||
Enterprise-grade features without the complexity or cost
|
||||
1. **Developers & Makers**:
|
||||
Test networking concepts, prototype IoT solutions, or build custom
|
||||
appliances
|
||||
1. **Network Professionals**:
|
||||
Consistent tooling from development to production deployment.
|
||||
How about a digital twin using raw Qemu or [GNS3](https://gns3.com/infix)!
|
||||
|
||||
## See It In Action
|
||||
|
||||
Configure an interface in seconds - the CLI guides you with built-in help:
|
||||
|
||||
<details><summary><b>Click Here for an example CLI Session</b></summary>
|
||||
|
||||
```bash
|
||||
admin@infix-12-34-56:/> configure
|
||||
admin@infix-12-34-56:/config/> edit interface eth0
|
||||
admin@infix-12-34-56:/config/interface/eth0/> set ipv4 <TAB>
|
||||
address autoconf bind-ni-name enabled
|
||||
forwarding mtu neighbor
|
||||
forwarding mtu neighbor
|
||||
admin@infix-12-34-56:/config/interface/eth0/> set ipv4 address 192.168.2.200 prefix-length 24
|
||||
admin@infix-12-34-56:/config/interface/eth0/> show
|
||||
type ethernet;
|
||||
@@ -61,7 +73,6 @@ ipv4 {
|
||||
prefix-length 24;
|
||||
}
|
||||
}
|
||||
ipv6
|
||||
admin@infix-12-34-56:/config/interface/eth0/> diff
|
||||
interfaces {
|
||||
interface eth0 {
|
||||
@@ -84,55 +95,69 @@ lo ethernet UP 00:00:00:00:00:00
|
||||
admin@infix-12-34-56:/> copy running-config startup-config
|
||||
```
|
||||
|
||||
[Click here][3] for more details.
|
||||
Notice how TAB completion shows available options, `show` displays
|
||||
current config, and `diff` shows exactly what changed before you
|
||||
commit your changes with the `leave` command.
|
||||
|
||||
</details>
|
||||
|
||||
Infix can run on many different types of architectures and boards, much
|
||||
thanks to Linux and Buildroot. Currently the focus is on 64-bit ARM
|
||||
devices, optionally with switching fabric supported by Linux switchdev.
|
||||
The [following boards](board/aarch64/README.md) are fully supported:
|
||||
> [Full CLI documentation →][3]
|
||||
|
||||
- Marvell CN9130 CRB
|
||||
- Marvell EspressoBIN
|
||||
- Microchip SparX-5i PCB135 (eMMC)
|
||||
- Raspberry Pi 4B
|
||||
- NanoPi R2S
|
||||
## Get Started
|
||||
|
||||
Additionally, StarFive VisionFive2, a RISC-V based two-port router, and
|
||||
an x86_64 build is also available. The latter is primarily intended for
|
||||
development and testing, but can also be used for evaluation and demo
|
||||
purposes. For more information, see: [Infix in Virtual
|
||||
Environments](doc/virtual.md).
|
||||
Get [pre-built images][5] for your hardware. Use the CLI, web
|
||||
interface, or standard NETCONF/RESTCONF tools, e.g., `curl`. Add
|
||||
containers for any custom functionality you need.
|
||||
|
||||
> See the [GitHub Releases](https://github.com/kernelkit/infix/releases)
|
||||
> page for our pre-built images. The *[Latest Build][]* has bleeding
|
||||
> edge images, if possible we recommend using a versioned release.
|
||||
>
|
||||
> For *customer specific builds* of Infix, see your product repository.
|
||||
### Supported Platforms
|
||||
|
||||
- **Raspberry Pi 4B** - Perfect for home labs, learning, and prototyping
|
||||
- **Banana Pi-R3** - Your next home router and gateway
|
||||
- **NanoPi R2S** - Compact dual-port router in a tiny package
|
||||
- **x86_64** - Run in VMs or on mini PCs for development and testing
|
||||
- **Marvell CN9130 CRB, EspressoBIN** - High-performance ARM64 platforms
|
||||
- **Microchip SparX-5i** - Enterprise switching capabilities
|
||||
- **NXP i.MX8MP EVK** - Highly capable ARM64 SoC
|
||||
- **StarFive VisionFive2** - RISC-V architecture support
|
||||
|
||||
----
|
||||
*Why start with Raspberry Pi?* It's affordable, widely available, has
|
||||
built-in WiFi + Ethernet, and runs the exact same Infix OS you'd deploy
|
||||
in production. Perfect for learning, prototyping, or even small-scale
|
||||
deployments.
|
||||
|
||||
> 📖 **[Complete documentation][4]** • 💬 **[Join our Discord][discord-url]**
|
||||
|
||||
## Technical Details
|
||||
|
||||
Built on proven open-source foundations ([Buildroot][1] + [sysrepo][2])
|
||||
for reliability you can trust:
|
||||
|
||||
- **Immutable OS**: Read-only filesystem, atomic updates, instant rollback
|
||||
- **YANG Configuration**: Industry-standard models with auto-generated tooling
|
||||
- **Hardware Acceleration**: Linux switchdev support for wire-speed packet processing
|
||||
- **Container Integration**: Docker support with flexible network and hardware access
|
||||
- **Memory Efficient**: Runs comfortably on devices with as little as 256 MB RAM
|
||||
|
||||
Perfect for everything from resource-constrained edge devices to
|
||||
high-throughput network appliances.
|
||||
|
||||
> Check the *[Latest Build][]* for bleeding-edge features.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/wires-se"><img src="https://raw.githubusercontent.com/wires-se/.github/main/profile/logo.png" width=300></a>
|
||||
<br />Infix development is sponsored by <a href="https://wires.se">Wires<a>
|
||||
<a href="https://github.com/wires-se"><img src="https://raw.githubusercontent.com/wires-se/.github/main/profile/play.svg" width=300></a>
|
||||
<br />Infix development is sponsored by <a href="https://wires.se">Wires</a>
|
||||
</div>
|
||||
|
||||
----
|
||||

|
||||
|
||||
[^1]: An immutable operating system is one with read-only file systems,
|
||||
atomic updates, rollbacks, declarative configuration, and workload
|
||||
isolation. All to improve reliability, scalability, and security.
|
||||
For more information, see <https://ceur-ws.org/Vol-3386/paper9.pdf>
|
||||
and <https://www.zdnet.com/article/what-is-immutable-linux-heres-why-youd-run-an-immutable-linux-distro/>.
|
||||
|
||||
[^2]: Partial RESTCONF support, features like HTTP PATCH, OPTIONS, HEAD,
|
||||
and copying between datastores are still missing.
|
||||
|
||||
[1]: https://buildroot.org/
|
||||
[2]: https://www.sysrepo.org/
|
||||
[3]: doc/cli/introduction.md
|
||||
[Latest Build]: https://github.com/kernelkit/infix/releases/tag/latest
|
||||
[1]: https://buildroot.org/ "Buildroot Homepage"
|
||||
[2]: https://www.sysrepo.org/ "Sysrepo Homepage"
|
||||
[3]: https://kernelkit.org/infix/latest/cli/introduction/
|
||||
[4]: https://kernelkit.org/infix/
|
||||
[5]: https://github.com/kernelkit/infix/releases
|
||||
[Latest Build]: https://github.com/kernelkit/infix/releases/tag/latest "Latest build"
|
||||
[License]: https://en.wikipedia.org/wiki/GPL_license
|
||||
[License Badge]: https://img.shields.io/badge/License-GPL%20v2-blue.svg
|
||||
[GitHub]: https://github.com/kernelkit/infix/actions/workflows/build.yml/
|
||||
|
||||
@@ -4,6 +4,8 @@ aarch64
|
||||
Board Specific Documentation
|
||||
----------------------------
|
||||
|
||||
- [Banana Pi R3](banana-pi-r3/)
|
||||
- [Marvell CN9130-CRB](cn9130-crb/)
|
||||
- [Microchip SparX-5i PCB135 (eMMC)](sparx5-pcb135/)
|
||||
- [NanoPi R2S](r2s/)
|
||||
- [Raspberry Pi 4 b](raspberry-pi-4/)
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# Banana Pi R3
|
||||
|
||||
## Support level
|
||||
Full support for all Infix enabled features including switched ethernet ports, WiFi,
|
||||
and SFP interfaces. The board includes comprehensive hardware support for
|
||||
MediaTek MT7986 SoC features.
|
||||
|
||||
### Hardware features
|
||||
The Banana Pi R3 is a high-performance networking board featuring:
|
||||
- MediaTek MT7986 ARM Cortex-A53 quad-core processor
|
||||
- 4x Gigabit LAN ports (lan1-lan4)
|
||||
- 1x Gigabit WAN port
|
||||
- 2x SFP ports (sfp1, sfp2) for fiber connectivity
|
||||
- Dual WiFi interfaces (wifi0 for 2.4GHz, wifi1 for 5GHz)
|
||||
- USB support
|
||||
- SD card boot support
|
||||
|
||||
### Network configuration
|
||||
The board comes preconfigured with:
|
||||
- 4 switched LAN ports for internal networking
|
||||
- Dedicated WAN port with DHCP client enabled
|
||||
- SFP ports for high-speed fiber connections
|
||||
- Dual WiFi interfaces for wireless connectivity
|
||||
|
||||
### Pre-built images
|
||||
SD card image: [infix-bpi-r3-sdcard.img](https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r3-sdcard.img)
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
# QEMU-specific U-Boot config
|
||||
# Enable PCI MMC for QEMU virtualized environment
|
||||
CONFIG_MMC_PCI=y
|
||||
@@ -153,7 +153,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-system:motd-banner": "Li0tLS0tLS0uCnwgIC4gLiAgfCBJbmZpeCAtLSBhIE5ldHdvcmsgT3BlcmF0aW5nIFN5c3RlbQp8LS4gdiAuLXwgaHR0cHM6Ly9rZXJuZWxraXQuZ2l0aHViLmlvCictJy0tLSctJwo="
|
||||
"infix-system:motd-banner": "Li0tLS0tLS0uCnwgIC4gLiAgfCBJbmZpeCBPUyDigJQgSW1tdXRhYmxlLkZyaWVuZGx5LlNlY3VyZQp8LS4gdiAuLXwgaHR0cHM6Ly9rZXJuZWxraXQub3JnCictJy0tLSctJwo="
|
||||
},
|
||||
"infix-dhcp-client:dhcp-client": {
|
||||
"client-if": [
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# Raspberry Pi 4 b
|
||||
|
||||
## Support level
|
||||
Full support for base board but not any extension board on the
|
||||
GPIOs.
|
||||
|
||||
### Touch screen
|
||||
The [Raspberry Pi touch display v1][RPI-TOUCH] is supported, including
|
||||
touch functionality. There are multiple touchscreens on the market for
|
||||
Raspberry Pi, but only the official (first version with 800x480
|
||||
resolution) is currently supported. Infix supplies all drivers
|
||||
required to utilize the hardware, but you need to add the actual
|
||||
graphical application in a container.
|
||||
|
||||
There are some important considerations you need to know about when
|
||||
using Infix for graphical applications. The container needs access to
|
||||
/dev/dri/ to be able to access the graphics card, and it also needs
|
||||
access to /run/udev to be able to find the input devices.
|
||||
|
||||
Example of running Doom in Infix:
|
||||
|
||||
```cli
|
||||
admin@example:/> configure
|
||||
admin@example:/config/> edit container doom
|
||||
admin@example:/config/container/doom/> set image docker://mattiaswal/alpine-doom:latest
|
||||
admin@example:/config/container/doom/> set privileged
|
||||
admin@example:/config/container/doom/> edit mount udev
|
||||
admin@example:/config/container/doom/mount/udev/> set type bind
|
||||
admin@example:/config/container/doom/mount/udev/> set target /run/udev/
|
||||
admin@example:/config/container/doom/mount/udev/> set source /run/udev/
|
||||
admin@example:/config/container/doom/mount/udev/> end
|
||||
admin@example:/config/container/doom/mount/xorg.conf/> set content U2VjdGlvbiAiT3V0cHV0Q2xhc3MiCiAgSWRlbnRpZmllciAidmM0IgogIE1hdGNoRHJpdmVyICJ2YzQiCiAgRHJpdmVyICJtb2Rlc2V0dGluZyIKICBPcHRpb24gIlByaW1hcnlHUFUiICJ0cnVlIgpFbmRTZWN0aW9uCg==
|
||||
admin@example:/config/container/doom/mount/xorg.conf/> set target /etc/X11/xorg.conf
|
||||
admin@example:/config/container/doom/mount/xorg.conf/> end
|
||||
admin@example:/config/container/doom/> edit volume var
|
||||
admin@example:/config/container/doom/volume/var/> set target /var
|
||||
admin@example:/config/container/doom/volume/var/> leave
|
||||
admin@example:/>
|
||||
|
||||
```
|
||||
|
||||
### Pre-built images
|
||||
SD card image: [infix-rpi4-sdcard.img](https://github.com/kernelkit/infix/releases/download/latest-boot/infix-rpi4-sdcard.img)
|
||||
|
||||
|
||||
[RPI-TOUCH]: https://www.raspberrypi.com/products/raspberry-pi-touch-display/
|
||||
@@ -6,6 +6,12 @@ mountprefix=/var/lib/rauc/mnt
|
||||
bundle-formats=-plain
|
||||
max-bundle-download-size=1073741824
|
||||
|
||||
[log.event-log]
|
||||
filename=/var/log/upgrade-json.log
|
||||
format=json-pretty
|
||||
max-size=1M
|
||||
max-files=5
|
||||
|
||||
[keyring]
|
||||
directory=/etc/rauc/keys
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
--- a/arch/arm/boot/dts/broadcom/bcm2711-rpi-4-b.dts 2025-04-28 00:13:06.880003668 +0200
|
||||
+++ b/arch/arm/boot/dts/broadcom/bcm2711-rpi-4-b.dts 2025-04-28 00:14:17.708941263 +0200
|
||||
@@ -14,6 +14,11 @@
|
||||
chosen {
|
||||
/* 8250 auxiliary UART instead of pl011 */
|
||||
stdout-path = "serial1:115200n8";
|
||||
+
|
||||
+ infix {
|
||||
+ /* Default admin user password: 'admin' */
|
||||
+ factory-password-hash = "$5$mI/zpOAqZYKLC2WU$i7iPzZiIjOjrBF3NyftS9CCq8dfYwHwrmUK097Jca9A";
|
||||
+ };
|
||||
};
|
||||
|
||||
cam1_reg: regulator-cam1 {
|
||||
@@ -1,16 +0,0 @@
|
||||
default rpi4b
|
||||
menu title Boot Menu
|
||||
prompt 1
|
||||
timeout 30
|
||||
|
||||
label rpi4b
|
||||
menu label Infix on Raspberry Pi 4B
|
||||
kernel /boot/Image
|
||||
devicetree /boot/broadcom/bcm2711-rpi-4-b.dtb
|
||||
append ${bootargs_root} 8250.nr_uarts=1 console=ttyS0,115200 ${bootargs_log} -- ${bootargs_user}
|
||||
|
||||
label rpi400
|
||||
menu label Infix on Raspberry Pi 400
|
||||
kernel /boot/Image
|
||||
devicetree /boot/broadcom/bcm2711-rpi-400.dtb
|
||||
append ${bootargs_root} 8250.nr_uarts=1 console=ttyS0,115200 ${bootargs_log} -- ${bootargs_user}
|
||||
@@ -1,6 +0,0 @@
|
||||
# Broadcom BCM2835 Watchdog timer
|
||||
device /dev/watchdog0 {
|
||||
timeout = 60
|
||||
interval = 5
|
||||
safe-exit = true
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
# CONFIG_MMC_PCI is not set
|
||||
CONFIG_OF_OVERLAY_LIST="rpi-env infix-key"
|
||||
# CONFIG_ENV_IS_IN_FAT is not set
|
||||
@@ -83,7 +83,7 @@ genboot()
|
||||
{
|
||||
if [ -d "$bootdata" ]; then
|
||||
bootimg=$(cat <<EOF
|
||||
image efi-part.vfat {
|
||||
image $BINARIES_DIR/efi-part.vfat {
|
||||
size = $bootsize
|
||||
vfat {
|
||||
file EFI {
|
||||
@@ -98,7 +98,7 @@ EOF
|
||||
offset = $bootoffs
|
||||
partition-type-uuid = U
|
||||
bootable = true
|
||||
image = efi-part.vfat
|
||||
image = $BINARIES_DIR/efi-part.vfat
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
@@ -114,6 +114,12 @@ grep -qsE '^/bin/true$$' "$TARGET_DIR/etc/shells" \
|
||||
grep -qsE '^/bin/false$$' "$TARGET_DIR/etc/shells" \
|
||||
|| echo "/bin/false" >> "$TARGET_DIR/etc/shells"
|
||||
|
||||
boards=$(${BR2_EXTERNAL_INFIX_PATH}/board/common/selected-boards.sh ${BR2_EXTERNAL_INFIX_PATH} ${O})
|
||||
|
||||
for board in $boards; do
|
||||
[ ! -f "${BR2_EXTERNAL_INFIX_PATH}/src/board/${board}/post-build.sh" ] && continue
|
||||
${BR2_EXTERNAL_INFIX_PATH}/src/board/${board}/post-build.sh
|
||||
done
|
||||
# Allow clish (symlink to /usr/bin/klish) to be a login shell
|
||||
grep -qsE '^/bin/clish$$' "$TARGET_DIR/etc/shells" \
|
||||
|| echo "/bin/clish" >> "$TARGET_DIR/etc/shells"
|
||||
|
||||
@@ -86,25 +86,27 @@ if [ "$FIT_IMAGE" = "y" ]; then
|
||||
$common/mkfit.sh
|
||||
fi
|
||||
|
||||
# Only for regular builds, not bootloader-only builds
|
||||
if [ "$BR2_TARGET_ROOTFS_SQUASHFS" = "y" ]; then
|
||||
rel=$(ver)
|
||||
ln -sf rootfs.squashfs "$BINARIES_DIR/${NAME}${rel}.img"
|
||||
if [ -n "$rel" ]; then
|
||||
ln -sf "${NAME}${rel}.img" "$BINARIES_DIR/${NAME}.img"
|
||||
fi
|
||||
|
||||
cp "$BR2_EXTERNAL_INFIX_PATH/board/common/rootfs/usr/bin/onieprom" "$BINARIES_DIR/"
|
||||
|
||||
# Menuconfig support for modifying Qemu args in release tarballs
|
||||
cp "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/qemu.sh" "$BINARIES_DIR/"
|
||||
sed -e "s/@ARCH@/QEMU_$BR2_ARCH/" \
|
||||
-e "s/@DISK_IMG@/$diskimg/" \
|
||||
< "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/Config.in.in" \
|
||||
> "$BINARIES_DIR/Config.in"
|
||||
rm -f "$BINARIES_DIR/qemu.cfg"
|
||||
CONFIG_="CONFIG_" BR2_CONFIG="$BINARIES_DIR/qemu.cfg" \
|
||||
"$O/build/buildroot-config/conf" --olddefconfig "$BINARIES_DIR/Config.in"
|
||||
rm -f "$BINARIES_DIR/qemu.cfg.old" "$BINARIES_DIR/.config.old"
|
||||
|
||||
# Quick intro for beginners, with links to more information
|
||||
cp "$BR2_EXTERNAL_INFIX_PATH/board/common/README.txt" "$BINARIES_DIR/"
|
||||
fi
|
||||
|
||||
# Menuconfig support for modifying Qemu args in release tarballs
|
||||
cp "$BR2_EXTERNAL_INFIX_PATH/board/common/rootfs/usr/bin/onieprom" "$BINARIES_DIR/"
|
||||
cp "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/qemu.sh" "$BINARIES_DIR/"
|
||||
sed -e "s/@ARCH@/QEMU_$BR2_ARCH/" \
|
||||
-e "s/@DISK_IMG@/$diskimg/" \
|
||||
< "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/Config.in.in" \
|
||||
> "$BINARIES_DIR/Config.in"
|
||||
rm -f "$BINARIES_DIR/qemu.cfg"
|
||||
CONFIG_="CONFIG_" BR2_CONFIG="$BINARIES_DIR/qemu.cfg" \
|
||||
"$O/build/buildroot-config/conf" --olddefconfig "$BINARIES_DIR/Config.in"
|
||||
rm -f "$BINARIES_DIR/qemu.cfg.old" "$BINARIES_DIR/.config.old"
|
||||
|
||||
# Quick intro for beginners, with links to more information
|
||||
cp "$BR2_EXTERNAL_INFIX_PATH/board/common/README.txt" "$BINARIES_DIR/"
|
||||
|
||||
@@ -15,18 +15,34 @@ export PROMPT_COMMAND=prompt_command
|
||||
# update the values of LINES and COLUMNS.
|
||||
shopt -s checkwinsize
|
||||
|
||||
# don't put duplicate lines or lines starting with space in the history.
|
||||
export HISTCONTROL=ignoreboth
|
||||
|
||||
# append to the history file, don't overwrite it
|
||||
shopt -s histappend
|
||||
|
||||
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
|
||||
export HISTSIZE=1000
|
||||
export HISTFILESIZE=2000
|
||||
|
||||
# case-insensitive filename completion
|
||||
bind "set completion-ignore-case on"
|
||||
|
||||
# show all completions immediately instead of ringing bell
|
||||
bind "set show-all-if-ambiguous on"
|
||||
|
||||
log()
|
||||
{
|
||||
local fn="/var/log/syslog"
|
||||
[ -n "$1" ] && fn="/var/log/$1"
|
||||
less +G "$fn"
|
||||
less +G -r "$fn"
|
||||
}
|
||||
|
||||
follow()
|
||||
{
|
||||
local fn="/var/log/syslog"
|
||||
[ -n "$1" ] && fn="/var/log/$1"
|
||||
tail -F "$fn"
|
||||
less +F -r "$fn"
|
||||
}
|
||||
|
||||
_logfile_completions()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Start a container instance (%i) and redirect logs to /log/container
|
||||
# Give podman enough time to properly shut down the container. Every
|
||||
# time we start a container we run the setup stage, disable the Finit
|
||||
# timeout to allow the setup stage to run to completion.
|
||||
sysv log:prio:local1,tag:%i kill:10 pid:!/run/container:%i.pid \
|
||||
pre:0,/usr/sbin/container cleanup:0,/usr/sbin/container \
|
||||
# Give podman enough time to properly shut down the container, kill:30
|
||||
# The pre:script, which is responsibe for fetching a remote image, must
|
||||
# not have a timeout. The cleanup should take no longer than a minute.
|
||||
sysv log:prio:local1,tag:%i kill:30 pid:!/run/container:%i.pid \
|
||||
pre:0,/usr/sbin/container cleanup:60,/usr/sbin/container \
|
||||
[2345] <!> :%i container -n %i -- container %i
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
service name:netopeer notify:none log env:/etc/default/confd \
|
||||
[12345] <pid/confd> netopeer2-server -F -t $CONFD_TIMEOUT -v 1 \
|
||||
-- NETCONF server
|
||||
@@ -1,5 +1,5 @@
|
||||
set G_MESSAGES_DEBUG=nocolor
|
||||
service [2345] <service/dbus/running> \
|
||||
env:-/etc/default/rauc log:prio:user.notice \
|
||||
env:-/etc/default/rauc \
|
||||
rauc service $RAUC_ARGS -- Software update service
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Use <pid/syslogd> as barrier for other system tasks and service that
|
||||
# rely on modules, firmware, and device nodes to be ready.
|
||||
service if:udevd nowarn env:-/etc/default/sysklogd <run/udevadm:post/success> \
|
||||
[S0123456789] syslogd -F $SYSLOGD_ARGS -- System log daemon
|
||||
[S0123456789] syslogd -8 -F $SYSLOGD_ARGS -- System log daemon
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
../available/netconf.conf
|
||||
@@ -0,0 +1,66 @@
|
||||
# /etc/inputrc - global inputrc for libreadline
|
||||
|
||||
# Be 8 bit clean.
|
||||
set input-meta on
|
||||
set output-meta on
|
||||
|
||||
# To allow the use of 8bit-characters like the german umlauts, uncomment
|
||||
# the line below. However this makes the meta key not work as a meta key,
|
||||
# which is annoying to those which don't need to type in 8-bit characters.
|
||||
|
||||
# set convert-meta off
|
||||
|
||||
# try to enable the application keypad when it is called. Some systems
|
||||
# need this to enable the arrow keys.
|
||||
# set enable-keypad on
|
||||
|
||||
# see /usr/share/doc/bash/inputrc.arrows for other codes of arrow keys
|
||||
|
||||
# do not bell on tab-completion
|
||||
# set bell-style none
|
||||
# set bell-style visible
|
||||
|
||||
# some defaults / modifications for the emacs mode
|
||||
$if mode=emacs
|
||||
|
||||
# allow the use of the Home/End keys
|
||||
"\e[1~": beginning-of-line
|
||||
"\e[4~": end-of-line
|
||||
|
||||
# allow the use of the Delete/Insert keys
|
||||
"\e[3~": delete-char
|
||||
"\e[2~": quoted-insert
|
||||
|
||||
# mappings for "page up" and "page down" to step to the beginning/end
|
||||
# of the history
|
||||
# "\e[5~": beginning-of-history
|
||||
# "\e[6~": end-of-history
|
||||
|
||||
# alternate mappings for "page up" and "page down" to search the history
|
||||
"\e[5~": history-search-backward
|
||||
"\e[6~": history-search-forward
|
||||
|
||||
# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
|
||||
"\e[1;5C": forward-word
|
||||
"\e[1;5D": backward-word
|
||||
"\e[5C": forward-word
|
||||
"\e[5D": backward-word
|
||||
"\e\e[C": forward-word
|
||||
"\e\e[D": backward-word
|
||||
|
||||
$if term=rxvt
|
||||
"\e[7~": beginning-of-line
|
||||
"\e[8~": end-of-line
|
||||
"\eOc": forward-word
|
||||
"\eOd": backward-word
|
||||
$endif
|
||||
|
||||
# for non RH/Debian xterm, can't hurt for RH/Debian xterm
|
||||
# "\eOH": beginning-of-line
|
||||
# "\eOF": end-of-line
|
||||
|
||||
# for freebsd console
|
||||
# "\e[H": beginning-of-line
|
||||
# "\e[F": end-of-line
|
||||
|
||||
$endif
|
||||
@@ -0,0 +1,165 @@
|
||||
# /etc/watchdogd.conf sample
|
||||
# Commented out values are program defaults.
|
||||
#
|
||||
# The checker/monitor `warning` and `critical` levels are 0.00-1.00,
|
||||
# i.e. 0-100%, except for load average which can vary a lot between
|
||||
# systems and use-cases, not just because of the number of CPU cores.
|
||||
# Use the `script = ...` setting to call script when `warning` and
|
||||
# `critical` are reached for a monitor. In `critical` the monitor
|
||||
# otherwise triggers an unconditional reboot.
|
||||
#
|
||||
# NOTE: `critical` is optional, omitting it disables the reboot action.
|
||||
#
|
||||
|
||||
### Watchdogs ##########################################################
|
||||
# Global settings that can be overridden per watchdog
|
||||
|
||||
# Do not set WDT timeout and kick interval too low, the daemon runs at
|
||||
# SCHED_OTHER level with all other tasks, unless the process supervisor
|
||||
# is enabled. The monitor plugins (below) need CPU time as well.
|
||||
#timeout = 20
|
||||
#interval = 10
|
||||
|
||||
# With safe-exit enabled (true) the daemon will ask the driver disable
|
||||
# the WDT before exiting (SIGINT). However, some WDT drivers (or HW)
|
||||
# may not support this.
|
||||
#safe-exit = true
|
||||
|
||||
# Multiple watchdogs can be kicked, the default, even if no .conf file
|
||||
# is found or device node given on the command line, is /dev/watchdog
|
||||
device /dev/watchdog {
|
||||
timeout = 60
|
||||
interval = 5
|
||||
safe-exit = true
|
||||
}
|
||||
|
||||
#device /dev/watchdog2 {
|
||||
# timeout = 20
|
||||
# interval = 10
|
||||
# safe-exit = true
|
||||
#}
|
||||
|
||||
### Supervisor #########################################################
|
||||
# Instrumented processes can have their main loop supervised. Processes
|
||||
# subscribe to this service using the libwdog API, see the docs for more
|
||||
# on this. When the supervisor is enabled and the priority is set to a
|
||||
# value > 0, watchdogd runs as a SCHED_RR process with elevated realtime
|
||||
# priority. When disabled, or the priority is set to zero (0), it runs
|
||||
# as a regular SCHED_OTHER process, this is the default.
|
||||
#
|
||||
# When a supervised process fails to meet its deadline, the daemon will
|
||||
# perform an unconditional reset having saved the reset reason. If a
|
||||
# script is provided in this section it will be called instead. The
|
||||
# script is called as:
|
||||
#
|
||||
# script.sh supervisor CODE PID LABEL
|
||||
#
|
||||
# Availabel CODEs for the reset reason are avilable in wdog.h
|
||||
#
|
||||
#supervisor {
|
||||
# !!!REMEMBER TO ENABLE reset-reason (below) AS WELL!!!
|
||||
# enabled = true
|
||||
# priority = 98
|
||||
# script = "/path/to/supervisor-script.sh"
|
||||
#}
|
||||
|
||||
### Reset reason #######################################################
|
||||
# The following section controls if/how the reset reason & reset counter
|
||||
# is tracked. By default this is disabled, since not all systems allow
|
||||
# writing to disk, e.g. embedded systems using MTD devices with limited
|
||||
# number of write cycles.
|
||||
#
|
||||
# The default file setting is a non-volatile path, according to the FHS.
|
||||
# It can be changed to another location, but make sure that location is
|
||||
# writable first.
|
||||
reset-reason {
|
||||
enabled = true
|
||||
file = "/var/lib/misc/watchdogd.state"
|
||||
}
|
||||
|
||||
### Checkers/Monitors ##################################################
|
||||
#
|
||||
# Script or command to run instead of reboot when a monitor plugin
|
||||
# reaches any of its critical or warning level. Setting this will
|
||||
# disable the built-in reboot on critical, it is therefore up to the
|
||||
# script to perform reboot, if needed. The script is called as:
|
||||
#
|
||||
# script.sh {filenr, fsmon, loadavg, meminfo} {crit, warn} VALUE
|
||||
#
|
||||
#script = "/path/to/reboot-action.sh"
|
||||
|
||||
# Monitors file descriptor leaks based on /proc/sys/fs/file-nr
|
||||
filenr {
|
||||
# enabled = true
|
||||
interval = 300
|
||||
logmark = false
|
||||
warning = 0.9
|
||||
critical = 1.0
|
||||
# script = "/path/to/alt-reboot-action.sh"
|
||||
}
|
||||
|
||||
# Monitors a file system, blocks and inode usage against watermarks
|
||||
# The script is called with fsmon as the first argument and there
|
||||
# are two environment variables FSMON_NAME, for the monitored path,
|
||||
# and FSMON_TYPE indicating either 'blocks' or 'inodes'.
|
||||
#fsmon /var {
|
||||
# enabled = true
|
||||
# interval = 300
|
||||
# logmark = false
|
||||
# warning = 0.95
|
||||
# critical = 1.0
|
||||
# script = "/path/to/alt-reboot-action.sh"
|
||||
#}
|
||||
|
||||
# Monitors load average based on sysinfo() from /proc/loadavg
|
||||
# The level is composed from the average of the 1 and 5 min marks.
|
||||
loadavg {
|
||||
# enabled = true
|
||||
interval = 300
|
||||
logmark = false
|
||||
warning = 1.0
|
||||
critical = 2.0
|
||||
# script = "/path/to/alt-reboot-action.sh"
|
||||
}
|
||||
|
||||
# Monitors free RAM based on data from /proc/meminfo
|
||||
meminfo {
|
||||
# enabled = true
|
||||
interval = 300
|
||||
logmark = false
|
||||
warning = 0.9
|
||||
critical = 0.95
|
||||
# script = "/path/to/alt-reboot-action.sh"
|
||||
}
|
||||
|
||||
# Monitor temperature. The critical value is unset by default, so no
|
||||
# action is taken at that watermark (by default). Both the critical and
|
||||
# warning watermarks are relative to the trip/critical/max value from
|
||||
# sysfs. The warning is default 0.9, i.e., 90% of critical. Use script
|
||||
# to to reset the fan controller or poweroff(8) the system.
|
||||
#
|
||||
# Each temp monitor caches the last 10 values, calculates the mean, and
|
||||
# compares that to the warning and critical levels. Logging is only
|
||||
# done every 10 x interval (if enabled).
|
||||
#tempmon /sys/class/hwmon/hwmon0/temp1_input {
|
||||
# enabled = true
|
||||
# interval = 30
|
||||
# warning = 0.9
|
||||
# critical = 0.95
|
||||
# logmark = true
|
||||
# script = "/script/to/log/and/poweroff.sh"
|
||||
#}
|
||||
|
||||
# Monitor a generic script, executes 'monitor-script' every 'interval'
|
||||
# seconds, with a max runtime of 'timeout' seconds. When the exit code
|
||||
# of the monitor script is above the critical level watchdogd either
|
||||
# starts the reboot, or calls the alternate 'script' to determin the
|
||||
# next cause of action.
|
||||
#generic /path/to/monitor-script.sh {
|
||||
# enabled = true
|
||||
# interval = 300
|
||||
# timeout = 60
|
||||
# warning = 1
|
||||
# critical = 10
|
||||
# script = "/path/to/alt-reboot-action.sh"
|
||||
#}
|
||||
@@ -5,10 +5,11 @@
|
||||
# -K :: exit immediately when an interrupt character (usually ^C) is typed
|
||||
# -R :: Almost raw control charachters, only ANSI color escape sequences and
|
||||
# OSC 8 hyperlink sequences are output. Allows veritcal scrolling
|
||||
# -r :: Causes "raw" control characters to be displayed, including unicode.
|
||||
# -X :: No termcap initialization and deinitialization set to the terminal.
|
||||
# This is what leaves the contents of the output on screen.
|
||||
|
||||
export LESS="-P %f (press h for help or q to quit)"
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
less -RIKd -FX "$@"
|
||||
less -rIKd -FX "$@"
|
||||
|
||||
@@ -308,16 +308,52 @@ def probe_qemusystem(out):
|
||||
subprocess.run("initctl -nbq cond set qemu".split(), check=False)
|
||||
return 0
|
||||
|
||||
def rasberry_pi_4_usb_ports(out):
|
||||
out["usb-ports"] = [
|
||||
{
|
||||
"name": "USB",
|
||||
"path": "/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/authorized"
|
||||
},
|
||||
{
|
||||
"name": "USB",
|
||||
"path": "/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/authorized_default"
|
||||
},
|
||||
{
|
||||
"name": "USB",
|
||||
"path": "/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/authorized",
|
||||
},
|
||||
{
|
||||
"name": "USB",
|
||||
"path": "/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-0:1.0/authorized"
|
||||
},
|
||||
{
|
||||
"name": "USB",
|
||||
"path": "/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb2/authorized"
|
||||
},
|
||||
{
|
||||
"name": "USB",
|
||||
"path": "/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb2/authorized_default"
|
||||
},
|
||||
{
|
||||
"name": "USB3",
|
||||
"path": "/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb2/2-0:1.0/authorized"
|
||||
}
|
||||
]
|
||||
|
||||
def probe_dtsystem(out):
|
||||
"""Probe DTS based system, expects a VPD in ONIE PROM format."""
|
||||
dtsys = DTSystem()
|
||||
vpds = dtsys.infix_vpds()
|
||||
dtsys.infix_usb_devices(out)
|
||||
|
||||
model = dtsys.base.str("model")
|
||||
if model:
|
||||
out["product-name"] = model
|
||||
|
||||
# Since rpi4 has USB on PCIe, there is no phandle reference
|
||||
if model and model.startswith("Raspberry Pi 4"):
|
||||
rasberry_pi_4_usb_ports(out)
|
||||
else:
|
||||
dtsys.infix_usb_devices(out)
|
||||
out["compatible"] = dtsys.base.str_array("compatible")
|
||||
|
||||
staticpw = dtsys.infix.str("factory-password-hash")
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#
|
||||
DOWNLOADS=/var/lib/containers/oci
|
||||
BUILTIN=/lib/oci
|
||||
TMPDIR=/var/tmp
|
||||
BASEDIR=/var/tmp
|
||||
container=$0
|
||||
checksum=""
|
||||
extracted=
|
||||
@@ -29,10 +29,10 @@ err()
|
||||
rc=$1; shift
|
||||
logger -I $PPID -t container -p local1.err -- "Error: $*"
|
||||
|
||||
if [ -n "$extracted" ]; then
|
||||
if [ -d "$TMPDIR/$dir" ]; then
|
||||
log "Cleaning up extracted $dir"
|
||||
rm -rf "$dir"
|
||||
if [ -n "$extracted" ] && [ -n "$tmpdir" ]; then
|
||||
if [ -d "$tmpdir" ]; then
|
||||
log "Cleaning up temporary directory $tmpdir"
|
||||
rm -rf "$tmpdir"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -110,10 +110,11 @@ EOF
|
||||
return 1
|
||||
}
|
||||
|
||||
# Unpacks a given oci-archive.tar[.gz] in the current directory. Sanity
|
||||
# checks, at least one index.json in the top-level dir of the archive.
|
||||
# If there are more index files, this function does not handle them.
|
||||
unpack_archive()
|
||||
# Extracts an oci-archive.tar[.gz] in a temporary directory. Finds and
|
||||
# sanity checks that at least one index.json exist in the archive. This
|
||||
# is the OCI directory fed to `podman load` and also used as repo name.
|
||||
# NOTE: if there are >1 index.json, this function does not handle them.
|
||||
load_archive()
|
||||
{
|
||||
uri=$1
|
||||
tag=$2
|
||||
@@ -158,49 +159,81 @@ unpack_archive()
|
||||
fi
|
||||
fi
|
||||
|
||||
file=$(realpath "$file")
|
||||
if [ -d "$file" ]; then
|
||||
index=$(find "$file" -name index.json)
|
||||
if [ -z "$index" ]; then
|
||||
err 1 "cannot find index.json in OCI image $file"
|
||||
fi
|
||||
else
|
||||
cd "$TMPDIR" || err 0 "failed cd $TMPDIR, wiill use $(pwd) for OCI archive extraction."
|
||||
# Extract files in a temporary directory, because most OCI
|
||||
# archives are flat/bare, all files in the root w/o a dir/
|
||||
tmpdir=$(mktemp -d -p "$BASEDIR") || err 1 "failed creating temporary directory"
|
||||
cd "$tmpdir" || err 1 "failed cd to temporary directory $tmpdir"
|
||||
|
||||
index=$(tar tf "$file" |grep index.json)
|
||||
index="$tmpdir/$(tar tf "$file" |grep index.json)"
|
||||
if [ -z "$index" ]; then
|
||||
err 1 "invalid OCI archive, cannot find index.json in $file"
|
||||
fi
|
||||
|
||||
[ -n "$quiet" ] || log "Extracting OCI archive $file ..."
|
||||
tar xf "$file" || err 1 "failed unpacking $file in $(pwd)"
|
||||
tar xf "$file" || err 1 "failed unpacking $file in $tmpdir"
|
||||
extracted=true
|
||||
cd - >/dev/null || err 0 "failed cd -"
|
||||
fi
|
||||
|
||||
dir=$(dirname "$index")
|
||||
if echo "$dir" | grep -q ":"; then
|
||||
|
||||
# Handle flat tarballs without a sub-directory, because
|
||||
# the $dir name is used as fallback when retagging below.
|
||||
if [ -n "$extracted" ] && [ "$dir" = "$tmpdir" ]; then
|
||||
parent=$(dirname "$dir")
|
||||
dirnam=$(echo "$img" | sed 's/\(.*\)\.tar.*/\1/')
|
||||
tmpdir="${parent}/${dirnam}"
|
||||
mv "$dir" "$tmpdir"
|
||||
dir="$tmpdir"
|
||||
fi
|
||||
|
||||
if basename "$dir" | grep -q ":"; then
|
||||
if [ -z "$tag" ]; then
|
||||
tag="$dir"
|
||||
tag=$(basename "$dir")
|
||||
fi
|
||||
|
||||
sanitized_dir=$(echo "$dir" | cut -d':' -f1)
|
||||
mv "$dir" "$sanitized_dir" || err 1 "failed renaming $dir to $sanitized_dir"
|
||||
dir="$sanitized_dir"
|
||||
fi
|
||||
|
||||
[ -n "$quiet" ] || log "Loading OCI image $dir ..."
|
||||
podman load -qi "$dir" >/dev/null
|
||||
output=$(podman load -qi "$dir")
|
||||
|
||||
# Extract image ID from podman load output:
|
||||
# "Loaded image: sha256:cd9d0aaf81be..."
|
||||
if echo "$output" | grep -q "sha256:"; then
|
||||
img_id="${output##*sha256:}"
|
||||
else
|
||||
# Fallback to directory name if no SHA found
|
||||
img_id="$dir"
|
||||
fi
|
||||
|
||||
# On podman < 4.7.0 we had to retag images from default $dir:latest
|
||||
# From >= 4.7.0 we always tag since loads come in as <none>:<none>
|
||||
if [ -z "$tag" ]; then
|
||||
tag=$(basename "$dir")
|
||||
fi
|
||||
|
||||
# Repo names must be lowercase, and only '[a-z0-9._/-]+' and ':tag'
|
||||
tag=$(printf "%s" "$tag" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9._/:-' '-')
|
||||
|
||||
[ -n "$quiet" ] || log "Tagging loaded image $img_id as $tag"
|
||||
if ! podman tag "$img_id" "$tag"; then
|
||||
err 1 "failed tagging image as $tag"
|
||||
fi
|
||||
|
||||
# Clean up after ourselves
|
||||
if [ -n "$extracted" ]; then
|
||||
log "Cleaning up extracted $dir"
|
||||
rm -rf "$dir"
|
||||
fi
|
||||
|
||||
# Retag image from podman default $dir:latest
|
||||
if [ -n "$tag" ]; then
|
||||
podman tag "$dir" "$tag" >/dev/null
|
||||
podman rmi "$dir" >/dev/null
|
||||
else
|
||||
tag=$dir
|
||||
rm -rf "$tmpdir"
|
||||
fi
|
||||
|
||||
echo "$tag"
|
||||
@@ -228,7 +261,7 @@ create()
|
||||
|
||||
# Unpack and load docker-archive/oci/oci-archive, returning image
|
||||
# name, or return docker:// URL for download.
|
||||
if ! image=$(unpack_archive "$image"); then
|
||||
if ! image=$(load_archive "$image"); then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -287,7 +320,6 @@ delete()
|
||||
fi
|
||||
|
||||
# Should already be stopped, but if not ...
|
||||
log "$name: should already be stopped, double checking ..."
|
||||
container stop "$name" >/dev/null
|
||||
|
||||
while running "$name"; do
|
||||
@@ -299,9 +331,11 @@ delete()
|
||||
sleep 1
|
||||
done
|
||||
|
||||
log "$name: calling podman rm -vif ..."
|
||||
podman rm -vif "$name" >/dev/null 2>&1
|
||||
[ -n "$quiet" ] || log "Container $name has been removed."
|
||||
|
||||
cnt=$(podman image prune -af | wc -l)
|
||||
log "Pruned $cnt image(s)"
|
||||
}
|
||||
|
||||
waitfor()
|
||||
@@ -442,7 +476,7 @@ options:
|
||||
-q, --quiet Quiet operation, called from confd
|
||||
-r, --restart POLICY One of "no", "always", or "on-failure:NUM"
|
||||
-s, --simple Show output in simplified format
|
||||
-t, --timeout SEC Set timeout for delete/restart commands, default: 20
|
||||
-t, --timeout SEC Set timeout for delete/restart commands, default: 30
|
||||
-v, --volume NAME:PATH Create named volume mounted inside container on PATH
|
||||
|
||||
commands:
|
||||
@@ -663,7 +697,7 @@ case $cmd in
|
||||
;;
|
||||
load)
|
||||
# shellcheck disable=SC2086
|
||||
name=$(unpack_archive "$1" $2)
|
||||
name=$(load_archive "$1" $2)
|
||||
[ -n "$name" ] || exit 1
|
||||
|
||||
# Show resulting image(s) matching $name
|
||||
@@ -748,7 +782,11 @@ case $cmd in
|
||||
|
||||
while ! "$script"; do
|
||||
log "${name}: setup failed, waiting for network changes ..."
|
||||
read -t 60 _ < <(ip monitor address route)
|
||||
|
||||
# Timeout and retry after 60 seconds, on SIGTERM, or when
|
||||
# any network event is caught.
|
||||
timeout -s TERM -k 1 60 sh -c \
|
||||
'ip monitor address route 2>/dev/null | head -n1 >/dev/null' || true
|
||||
|
||||
# On IP address/route changes, wait a few seconds more to ensure
|
||||
# the system has ample time to react and set things up for us.
|
||||
@@ -757,6 +795,8 @@ case $cmd in
|
||||
done
|
||||
|
||||
rm -f "$pidfile"
|
||||
cnt=$(podman image prune -f | wc -l)
|
||||
log "setup: pruned $cnt image(s)"
|
||||
;;
|
||||
shell)
|
||||
if [ -z "$name" ]; then
|
||||
|
||||
@@ -23,12 +23,22 @@ fi
|
||||
|
||||
log()
|
||||
{
|
||||
logger -I $$ -t udhcpc -p user.notice "$*"
|
||||
logger -I $$ -t udhcpc -p user.notice "${interface}: $*"
|
||||
}
|
||||
|
||||
dbg()
|
||||
{
|
||||
logger -I $$ -t udhcpc -p user.debug "${interface}: $*"
|
||||
}
|
||||
|
||||
err()
|
||||
{
|
||||
logger -I $$ -t udhcpc -p user.err "${interface}: $*"
|
||||
}
|
||||
|
||||
wait_for_ipv6_default_route()
|
||||
{
|
||||
log "waiting for IPv6 default route to be installed."
|
||||
dbg "waiting for IPv6 default route to be installed."
|
||||
while [ $IF_WAIT_DELAY -gt 0 ]; do
|
||||
if ip -6 route list proto dhcp dev $interface | grep -q default; then
|
||||
return
|
||||
@@ -37,7 +47,7 @@ wait_for_ipv6_default_route()
|
||||
printf "."
|
||||
: $((IF_WAIT_DELAY -= 1))
|
||||
done
|
||||
log "Timed out witing for IPv6 default route!"
|
||||
err "Timed out waiting for IPv6 default route!"
|
||||
}
|
||||
|
||||
# RFC3442: If the DHCP server returns both a Classless
|
||||
@@ -50,7 +60,7 @@ set_dhcp_routes()
|
||||
# format: dest1/mask gw1 ... destn/mask gwn
|
||||
set -- $staticroutes
|
||||
while [ -n "$1" -a -n "$2" ]; do
|
||||
log "adding route $1 via $2 metric $metric tag 100"
|
||||
dbg "adding route $1 via $2 metric $metric tag 100"
|
||||
echo "ip route $1 $2 $metric tag 100" >> "$NEXT"
|
||||
shift 2
|
||||
done
|
||||
@@ -69,7 +79,7 @@ set_dhcp_routes()
|
||||
|
||||
clr_dhcp_routes()
|
||||
{
|
||||
log "deleting DHCP routes from $interface"
|
||||
log "deleting DHCP routes"
|
||||
[ -f "$NAME" ] || return
|
||||
rm "$NAME"
|
||||
|
||||
@@ -84,7 +94,7 @@ clr_dhcp_addresses()
|
||||
for addr in $addrs; do
|
||||
ip="$(echo "$addr" | jq -r '."local"')"
|
||||
prefix="$(echo "$addr" | jq -r '."prefixlen"')"
|
||||
log "removing $ip/$prefix from $interface"
|
||||
log "removing $ip/$prefix"
|
||||
ip addr del "$ip/$prefix" dev "$interface"
|
||||
done
|
||||
}
|
||||
@@ -142,12 +152,12 @@ case "$ACTION" in
|
||||
fi
|
||||
|
||||
if [ -n "$search_list" ]; then
|
||||
log "adding search $search_list"
|
||||
dbg "adding search $search_list"
|
||||
echo "search $search_list # $interface" >> $RESOLV_CONF
|
||||
fi
|
||||
|
||||
for i in $dns ; do
|
||||
log "adding dns $i"
|
||||
dbg "adding dns $i"
|
||||
echo "nameserver $i # $interface" >> $RESOLV_CONF
|
||||
resolvconf -u
|
||||
done
|
||||
@@ -155,7 +165,7 @@ case "$ACTION" in
|
||||
if [ -n "$ntpsrv" ]; then
|
||||
truncate -s 0 "$NTPFILE"
|
||||
for srv in $ntpsrv; do
|
||||
log "got NTP server $srv"
|
||||
dbg "got NTP server $srv"
|
||||
echo "server $srv iburst" >> "$NTPFILE"
|
||||
done
|
||||
chronyc reload sources >/dev/null
|
||||
|
||||
@@ -20,7 +20,6 @@ CONFIG_CMD_SETEXPR_FMT=y
|
||||
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_PCI=y
|
||||
CONFIG_CMD_MMC=y
|
||||
|
||||
CONFIG_FS_SQUASHFS=y
|
||||
|
||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -6,6 +6,12 @@ mountprefix=/var/lib/rauc/mnt
|
||||
bundle-formats=-plain
|
||||
max-bundle-download-size=1073741824
|
||||
|
||||
[log.event-log]
|
||||
filename=/var/log/upgrade-json.log
|
||||
format=json-pretty
|
||||
max-size=1M
|
||||
max-files=5
|
||||
|
||||
[keyring]
|
||||
directory=/etc/rauc/keys
|
||||
|
||||
|
||||
@@ -261,6 +261,7 @@ CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_CRYPTO_AES=y
|
||||
CONFIG_CRYPTO_GCM=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_PANIC_ON_OOPS=y
|
||||
|
||||
@@ -7,6 +7,12 @@ mountprefix=/var/lib/rauc/mnt
|
||||
bundle-formats=-plain
|
||||
max-bundle-download-size=1073741824
|
||||
|
||||
[log.event-log]
|
||||
filename=/var/log/upgrade-json.log
|
||||
format=json-pretty
|
||||
max-size=1M
|
||||
max-files=5
|
||||
|
||||
[keyring]
|
||||
directory=/etc/rauc/keys
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ BR2_CCACHE=y
|
||||
BR2_CCACHE_DIR="${BR2_EXTERNAL_INFIX_PATH}/.ccache"
|
||||
BR2_ENABLE_DEBUG=y
|
||||
BR2_GLOBAL_PATCH_DIR="${BR2_EXTERNAL_INFIX_PATH}/patches"
|
||||
BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
|
||||
BR2_TARGET_GENERIC_HOSTNAME="infix"
|
||||
BR2_TARGET_GENERIC_ISSUE="Infix by KernelKit"
|
||||
BR2_INIT_FINIT=y
|
||||
@@ -27,16 +28,16 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.35"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.49"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="${BR2_EXTERNAL_INFIX_PATH}/board/common/busybox_defconfig"
|
||||
BR2_PACKAGE_STRACE=y
|
||||
BR2_PACKAGE_STRESS_NG=y
|
||||
BR2_PACKAGE_SYSREPO_GROUP="sys-cli"
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_E2FSPROGS=y
|
||||
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
|
||||
BR2_PACKAGE_DBUS_CXX=y
|
||||
BR2_PACKAGE_DBUS_GLIB=y
|
||||
BR2_PACKAGE_DBUS_TRIGGERD=y
|
||||
@@ -61,6 +62,7 @@ BR2_PACKAGE_LIBINPUT=y
|
||||
BR2_PACKAGE_LIBCURL_CURL=y
|
||||
BR2_PACKAGE_NETOPEER2_CLI=y
|
||||
BR2_PACKAGE_NSS_MDNS=y
|
||||
BR2_PACKAGE_SYSREPO_GROUP="sys-cli"
|
||||
BR2_PACKAGE_LINUX_PAM=y
|
||||
BR2_PACKAGE_LIBPAM_RADIUS_AUTH=y
|
||||
BR2_PACKAGE_ONIGURUMA=y
|
||||
@@ -73,11 +75,13 @@ BR2_PACKAGE_ETHTOOL=y
|
||||
BR2_PACKAGE_FPING=y
|
||||
BR2_PACKAGE_FRR=y
|
||||
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
|
||||
BR2_PACKAGE_IPERF3=y
|
||||
BR2_PACKAGE_IPROUTE2=y
|
||||
BR2_PACKAGE_IPTABLES_NFTABLES=y
|
||||
BR2_PACKAGE_IPUTILS=y
|
||||
BR2_PACKAGE_LLDPD=y
|
||||
BR2_PACKAGE_MSTPD=y
|
||||
BR2_PACKAGE_MTR=y
|
||||
BR2_PACKAGE_NETCALC=y
|
||||
BR2_PACKAGE_NETCAT_OPENBSD=y
|
||||
BR2_PACKAGE_NETSNMP=y
|
||||
@@ -97,8 +101,10 @@ BR2_PACKAGE_TRACEROUTE=y
|
||||
BR2_PACKAGE_ULOGD=y
|
||||
BR2_PACKAGE_WHOIS=y
|
||||
BR2_PACKAGE_BASH_COMPLETION=y
|
||||
BR2_PACKAGE_NEOFETCH=y
|
||||
BR2_PACKAGE_SUDO=y
|
||||
BR2_PACKAGE_TTYD=y
|
||||
BR2_PACKAGE_GETENT=y
|
||||
BR2_PACKAGE_HTOP=y
|
||||
BR2_PACKAGE_IRQBALANCE=y
|
||||
BR2_PACKAGE_KMOD_TOOLS=y
|
||||
@@ -125,22 +131,24 @@ BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
INFIX_VENDOR_HOME="https://github.com/kernelkit"
|
||||
INFIX_DESC="Infix is an operating system based on Linux and modeled with YANG. It can be set up both as a switch, with offloading using switchdev, a router with firewalling, or a secure end device. All while supporting advanced networking scenarios and running Docker containers."
|
||||
INFIX_VENDOR_HOME="https://kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://github.com/kernelkit/infix/tree/main/doc"
|
||||
INFIX_DOC="https://kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_ALDER_ALDER=y
|
||||
BR2_PACKAGE_MARVELL_CN9130_CRB=y
|
||||
BR2_PACKAGE_MARVELL_ESPRESSOBIN=y
|
||||
BR2_PACKAGE_STYX_DCP_SC_28P=y
|
||||
BR2_PACKAGE_RASPBERRY_PI_4=y
|
||||
BR2_PACKAGE_BANANA_PI_R3=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_DONGLE_REALTEK=y
|
||||
BR2_PACKAGE_CONFD=y
|
||||
BR2_PACKAGE_CONFD_TEST_MODE=y
|
||||
BR2_PACKAGE_CURIOS_HTTPD=y
|
||||
BR2_PACKAGE_CURIOS_NFTABLES=y
|
||||
BR2_PACKAGE_GENCERT=y
|
||||
BR2_PACKAGE_STATD=y
|
||||
BR2_PACKAGE_SHOW=y
|
||||
BR2_PACKAGE_FACTORY=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_HOOK_SCRIPTS=y
|
||||
@@ -162,14 +170,11 @@ BR2_PACKAGE_PODMAN=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_BTRFS=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_DEVICEMAPPER=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_VFS=y
|
||||
BR2_PACKAGE_SHOW=y
|
||||
BR2_PACKAGE_TETRIS=y
|
||||
BR2_PACKAGE_ROUSETTE=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
BR2_PACKAGE_FEATURE_WIFI=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_DONGLE_REALTEK=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
|
||||
BR2_PACKAGE_GETENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
DISK_IMAGE_BOOT_BIN=y
|
||||
|
||||
@@ -27,7 +27,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.35"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.49"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -107,10 +107,10 @@ BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
INFIX_VENDOR_HOME="https://github.com/kernelkit"
|
||||
INFIX_DESC="Infix is an operating system based on Linux and modeled with YANG. It can be set up both as a switch, with offloading using switchdev, a router with firewalling, or a secure end device. All while supporting advanced networking scenarios and running Docker containers."
|
||||
INFIX_VENDOR_HOME="https://kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://github.com/kernelkit/infix/tree/main/doc"
|
||||
INFIX_DOC="https://kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_ALDER_ALDER=y
|
||||
BR2_PACKAGE_MARVELL_CN9130_CRB=y
|
||||
|
||||
@@ -20,15 +20,11 @@ BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2023.07.02"
|
||||
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="qemu_arm64"
|
||||
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/extras.config"
|
||||
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/extras.config $(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/qemu/uboot/extras.config"
|
||||
BR2_TARGET_UBOOT_FORMAT_DTB=y
|
||||
BR2_PACKAGE_HOST_GENIMAGE=y
|
||||
BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
DISK_IMAGE_BOOT_BIN=y
|
||||
DISK_IMAGE_BOOT_DATA="${BINARIES_DIR}/flash-image.bin"
|
||||
DISK_IMAGE_BOOT_OFFSET=0x00200000
|
||||
# GNS3_APPLIANCE is not set
|
||||
|
||||
@@ -38,8 +38,4 @@ BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
DISK_IMAGE_BOOT_BIN=y
|
||||
DISK_IMAGE_BOOT_DATA="${BINARIES_DIR}/flash-image.bin"
|
||||
DISK_IMAGE_BOOT_OFFSET=0x00200000
|
||||
# GNS3_APPLIANCE is not set
|
||||
|
||||
@@ -11,6 +11,7 @@ BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_INFIX_PATH)/patches"
|
||||
BR2_INIT_NONE=y
|
||||
BR2_SYSTEM_BIN_SH_NONE=y
|
||||
# BR2_PACKAGE_BUSYBOX is not set
|
||||
BR2_PACKAGE_LIBBSD=y
|
||||
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
|
||||
# BR2_TARGET_ROOTFS_TAR is not set
|
||||
BR2_TARGET_UBOOT=y
|
||||
@@ -20,3 +21,5 @@ BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/kernelkit/u-boot.git"
|
||||
BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="c3d9cdcc7d9e3eb490d4036f5eece3fb91a2485c"
|
||||
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="mscc_fireant_pcb135_emmc"
|
||||
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/extras.config"
|
||||
BR2_TARGET_UBOOT_NEEDS_DTC=y
|
||||
# GNS3_APPLIANCE is not set
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
BR2_aarch64=y
|
||||
BR2_TOOLCHAIN_EXTERNAL=y
|
||||
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
|
||||
BR2_DL_DIR="$(BR2_EXTERNAL_INFIX_PATH)/dl"
|
||||
BR2_CCACHE=y
|
||||
BR2_CCACHE_DIR="$(BR2_EXTERNAL_INFIX_PATH)/.ccache"
|
||||
BR2_ENABLE_DEBUG=y
|
||||
BR2_PACKAGE_OVERRIDE_FILE="$(BR2_EXTERNAL_INFIX_PATH)/local.mk"
|
||||
BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_INFIX_PATH)/patches"
|
||||
BR2_SSP_NONE=y
|
||||
BR2_INIT_NONE=y
|
||||
BR2_SYSTEM_BIN_SH_NONE=y
|
||||
# BR2_PACKAGE_BUSYBOX is not set
|
||||
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
|
||||
# BR2_TARGET_ROOTFS_TAR is not set
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE=y
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/mtk-openwrt/arm-trusted-firmware-mtk.git"
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="78a0dfd927bb00ce973a1f8eb4079df0f755887a"
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="mt7986"
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP=y
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33=y
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="BOOT_DEVICE=sdmmc DRAM_USE_DDR4=1 USE_MKIMAGE=1 MKIMAGE=$(HOST_DIR)/bin/mkimage"
|
||||
BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES="*.img *.bin"
|
||||
BR2_TARGET_UBOOT=y
|
||||
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2025.01"
|
||||
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="mt7986a_bpir3_sd"
|
||||
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="${BR2_EXTERNAL_INFIX_PATH}/board/common/uboot/extras.config ${BR2_EXTERNAL_INFIX_PATH}/src/board/banana-pi-r3/uboot/extras.config ${BR2_EXTERNAL_INFIX_PATH}/src/board/banana-pi-r3/uboot/sd-extras.config"
|
||||
BR2_TARGET_UBOOT_NEEDS_DTC=y
|
||||
BR2_TARGET_UBOOT_FORMAT_DTB=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="${BR2_EXTERNAL_INFIX_PATH}/src/board/banana-pi-r3/uboot/*.dtsi"
|
||||
BR2_PACKAGE_HOST_GENIMAGE=y
|
||||
BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
DISK_IMAGE_BOOT_BIN=y
|
||||
DISK_IMAGE_BOOT_DATA="${BINARIES_DIR}/flash-image.bin"
|
||||
DISK_IMAGE_BOOT_OFFSET=0x00200000
|
||||
@@ -29,7 +29,7 @@ BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/r2s/genimage.cfg"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.35"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.49"
|
||||
BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/r2s/rk3328-nanopi-r2s-dts.patch"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/r2s/linux_defconfig"
|
||||
@@ -44,6 +44,7 @@ BR2_PACKAGE_STRESS_NG=y
|
||||
BR2_PACKAGE_SYSREPO_GROUP="sys-cli"
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_E2FSPROGS=y
|
||||
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT61=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73=y
|
||||
@@ -65,6 +66,7 @@ BR2_PACKAGE_GPTFDISK_SGDISK=y
|
||||
BR2_PACKAGE_INPUT_EVENT_DAEMON=y
|
||||
BR2_PACKAGE_MDIO_TOOLS=y
|
||||
BR2_PACKAGE_RNG_TOOLS=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y
|
||||
@@ -91,10 +93,12 @@ BR2_PACKAGE_ETHTOOL=y
|
||||
BR2_PACKAGE_FPING=y
|
||||
BR2_PACKAGE_FRR=y
|
||||
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
|
||||
BR2_PACKAGE_IPERF3=y
|
||||
BR2_PACKAGE_IPROUTE2=y
|
||||
BR2_PACKAGE_IPTABLES_NFTABLES=y
|
||||
BR2_PACKAGE_IPUTILS=y
|
||||
BR2_PACKAGE_LLDPD=y
|
||||
BR2_PACKAGE_MTR=y
|
||||
BR2_PACKAGE_NETCALC=y
|
||||
BR2_PACKAGE_NETCAT_OPENBSD=y
|
||||
BR2_PACKAGE_NETSNMP=y
|
||||
@@ -117,6 +121,7 @@ BR2_PACKAGE_WIRELESS_REGDB=y
|
||||
BR2_PACKAGE_WIRELESS_TOOLS=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT=y
|
||||
BR2_PACKAGE_BASH_COMPLETION=y
|
||||
BR2_PACKAGE_NEOFETCH=y
|
||||
BR2_PACKAGE_SUDO=y
|
||||
BR2_PACKAGE_TTYD=y
|
||||
BR2_PACKAGE_HTOP=y
|
||||
@@ -168,11 +173,11 @@ BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
INFIX_VENDOR_HOME="https://github.com/kernelkit"
|
||||
INFIX_VENDOR_HOME="https://kernelkit.org"
|
||||
INFIX_IMAGE_ID="${INFIX_ID}-r2s"
|
||||
INFIX_DESC="Infix is an operating system based on Linux and modeled with YANG. It can be set up both as a switch, with offloading using switchdev, a router with firewalling, or a secure end device. All while supporting advanced networking scenarios and running Docker containers."
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://github.com/kernelkit/infix/tree/main/doc"
|
||||
INFIX_DOC="https://kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_CONFD=y
|
||||
BR2_PACKAGE_GENCERT=y
|
||||
|
||||
@@ -11,8 +11,8 @@ BR2_TARGET_GENERIC_ISSUE="Infix by KernelKit"
|
||||
BR2_INIT_FINIT=y
|
||||
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
|
||||
BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs"
|
||||
# BR2_TARGET_ENABLE_ROOT_LOGIN is not set
|
||||
BR2_ROOTFS_MERGED_USR=y
|
||||
# BR2_TARGET_ENABLE_ROOT_LOGIN is not set
|
||||
BR2_SYSTEM_BIN_SH_BASH=y
|
||||
BR2_TARGET_GENERIC_GETTY_PORT="@console"
|
||||
BR2_TARGET_GENERIC_GETTY_TERM="xterm"
|
||||
@@ -39,9 +39,9 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_INFIX_PATH)/board/common/busybox_defconfig"
|
||||
BR2_PACKAGE_STRACE=y
|
||||
BR2_PACKAGE_STRESS_NG=y
|
||||
BR2_PACKAGE_SYSREPO_GROUP="sys-cli"
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_E2FSPROGS=y
|
||||
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT61=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73=y
|
||||
@@ -60,19 +60,22 @@ BR2_PACKAGE_GPTFDISK=y
|
||||
BR2_PACKAGE_GPTFDISK_SGDISK=y
|
||||
BR2_PACKAGE_MDIO_TOOLS=y
|
||||
BR2_PACKAGE_RNG_TOOLS=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y
|
||||
BR2_PACKAGE_PYTHON3=y
|
||||
BR2_PACKAGE_PYTHON_GUNICORN=y
|
||||
BR2_PACKAGE_LIBSSH_OPENSSL=y
|
||||
BR2_PACKAGE_LIBSSH2=y
|
||||
BR2_PACKAGE_LIBXCRYPT=y
|
||||
BR2_PACKAGE_LIBSSH2_OPENSSL=y
|
||||
BR2_PACKAGE_LIBOPENSSL_BIN=y
|
||||
BR2_PACKAGE_LIBINPUT=y
|
||||
BR2_PACKAGE_LIBCURL_CURL=y
|
||||
BR2_PACKAGE_NETOPEER2_CLI=y
|
||||
BR2_PACKAGE_NSS_MDNS=y
|
||||
BR2_PACKAGE_SYSREPO_GROUP="sys-cli"
|
||||
BR2_PACKAGE_LINUX_PAM=y
|
||||
BR2_PACKAGE_LIBPAM_RADIUS_AUTH=y
|
||||
BR2_PACKAGE_ONIGURUMA=y
|
||||
@@ -85,11 +88,13 @@ BR2_PACKAGE_ETHTOOL=y
|
||||
BR2_PACKAGE_FPING=y
|
||||
BR2_PACKAGE_FRR=y
|
||||
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
|
||||
BR2_PACKAGE_IPERF3=y
|
||||
BR2_PACKAGE_IPROUTE2=y
|
||||
BR2_PACKAGE_IPTABLES_NFTABLES=y
|
||||
BR2_PACKAGE_IPUTILS=y
|
||||
BR2_PACKAGE_LLDPD=y
|
||||
BR2_PACKAGE_MSTPD=y
|
||||
BR2_PACKAGE_MTR=y
|
||||
BR2_PACKAGE_NETCALC=y
|
||||
BR2_PACKAGE_NETCAT_OPENBSD=y
|
||||
BR2_PACKAGE_NETSNMP=y
|
||||
@@ -109,8 +114,10 @@ BR2_PACKAGE_TRACEROUTE=y
|
||||
BR2_PACKAGE_ULOGD=y
|
||||
BR2_PACKAGE_WHOIS=y
|
||||
BR2_PACKAGE_BASH_COMPLETION=y
|
||||
BR2_PACKAGE_NEOFETCH=y
|
||||
BR2_PACKAGE_SUDO=y
|
||||
BR2_PACKAGE_TTYD=y
|
||||
BR2_PACKAGE_GETENT=y
|
||||
BR2_PACKAGE_HTOP=y
|
||||
BR2_PACKAGE_IRQBALANCE=y
|
||||
BR2_PACKAGE_KMOD_TOOLS=y
|
||||
@@ -161,16 +168,14 @@ BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
INFIX_VENDOR_HOME="https://github.com/kernelkit"
|
||||
INFIX_DESC="Infix is an operating system based on Linux and modeled with YANG. It can be set up both as a switch, with offloading using switchdev, a router with firewalling, or a secure end device. All while supporting advanced networking scenarios and running Docker containers."
|
||||
INFIX_VENDOR_HOME="https://kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://github.com/kernelkit/infix/tree/main/doc"
|
||||
INFIX_DOC="https://kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_CONFD=y
|
||||
# BR2_PACKAGE_CONFD_TEST_MODE is not set
|
||||
BR2_PACKAGE_GENCERT=y
|
||||
BR2_PACKAGE_STATD=y
|
||||
BR2_PACKAGE_SHOW=y
|
||||
BR2_PACKAGE_FACTORY=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_HOOK_SCRIPTS=y
|
||||
@@ -192,12 +197,11 @@ BR2_PACKAGE_PODMAN=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_BTRFS=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_DEVICEMAPPER=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_VFS=y
|
||||
BR2_PACKAGE_SHOW=y
|
||||
BR2_PACKAGE_TETRIS=y
|
||||
BR2_PACKAGE_ROUSETTE=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
|
||||
BR2_PACKAGE_GETENT=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
# GNS3_APPLIANCE is not set
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
BR2_aarch64=y
|
||||
BR2_cortex_a72=y
|
||||
BR2_TOOLCHAIN_EXTERNAL=y
|
||||
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
|
||||
BR2_DL_DIR="$(BR2_EXTERNAL_INFIX_PATH)/dl"
|
||||
BR2_CCACHE=y
|
||||
BR2_CCACHE_DIR="$(BR2_EXTERNAL_INFIX_PATH)/.ccache"
|
||||
BR2_ENABLE_DEBUG=y
|
||||
BR2_PACKAGE_OVERRIDE_FILE="$(BR2_EXTERNAL_INFIX_PATH)/local.mk"
|
||||
BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_INFIX_PATH)/patches"
|
||||
BR2_SSP_NONE=y
|
||||
BR2_INIT_NONE=y
|
||||
BR2_SYSTEM_BIN_SH_NONE=y
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
# BR2_PACKAGE_BUSYBOX is not set
|
||||
BR2_PACKAGE_RPI_FIRMWARE=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/config.txt"
|
||||
BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/cmdline.txt"
|
||||
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
|
||||
# BR2_TARGET_ROOTFS_TAR is not set
|
||||
BR2_TARGET_UBOOT=y
|
||||
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
|
||||
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2025.01"
|
||||
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rpi_arm64"
|
||||
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="${BR2_EXTERNAL_INFIX_PATH}/board/common/uboot/extras.config ${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/uboot/extras.config"
|
||||
BR2_TARGET_UBOOT_NEEDS_DTC=y
|
||||
BR2_TARGET_UBOOT_FORMAT_DTB=y
|
||||
BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
|
||||
BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="arch/arm/dts/infix-key.dtbo arch/arm/dts/rpi-env.dtbo"
|
||||
BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="${BR2_EXTERNAL_INFIX_PATH}/src/board/raspberry-pi-4/uboot/rpi-env.dtso"
|
||||
BR2_PACKAGE_HOST_GENIMAGE=y
|
||||
BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_BOOTLOADER_SPLASHSCREEN=y
|
||||
# GNS3_APPLIANCE is not set
|
||||
@@ -1,201 +0,0 @@
|
||||
BR2_aarch64=y
|
||||
BR2_cortex_a72=y
|
||||
BR2_ARM_FPU_VFPV4=y
|
||||
BR2_TOOLCHAIN_EXTERNAL=y
|
||||
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
|
||||
BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y
|
||||
BR2_DL_DIR="${BR2_EXTERNAL_INFIX_PATH}/dl"
|
||||
BR2_CCACHE=y
|
||||
BR2_CCACHE_DIR="${BR2_EXTERNAL_INFIX_PATH}/.ccache"
|
||||
BR2_GLOBAL_PATCH_DIR="board/raspberrypi/patches ${BR2_EXTERNAL_INFIX_PATH}/patches"
|
||||
BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
|
||||
BR2_TARGET_GENERIC_HOSTNAME="infix"
|
||||
BR2_TARGET_GENERIC_ISSUE="Infix by KernelKit"
|
||||
BR2_INIT_FINIT=y
|
||||
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
|
||||
BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs"
|
||||
BR2_ROOTFS_MERGED_USR=y
|
||||
# BR2_TARGET_ENABLE_ROOT_LOGIN is not set
|
||||
BR2_SYSTEM_BIN_SH_BASH=y
|
||||
BR2_TARGET_GENERIC_GETTY_PORT="@console"
|
||||
BR2_TARGET_GENERIC_GETTY_TERM="xterm"
|
||||
BR2_SYSTEM_DHCP="eth0"
|
||||
BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin"
|
||||
BR2_ENABLE_LOCALE_WHITELIST="C en_US en_CA C.UTF-8"
|
||||
BR2_GENERATE_LOCALE="en_US en_CA C.UTF-8"
|
||||
BR2_TARGET_TZ_INFO=y
|
||||
BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/rootfs ${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/rpi/rootfs"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/rpi/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh ${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/rpi/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.35"
|
||||
BR2_LINUX_KERNEL_PATCH="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/rpi/bcm2711-rpi-4-b-dts.patch"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/rpi/bcm2711_defconfig"
|
||||
BR2_LINUX_KERNEL_DTS_SUPPORT=y
|
||||
BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2711-rpi-4-b broadcom/bcm2711-rpi-400"
|
||||
BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME=y
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_INFIX_PATH)/board/common/busybox_defconfig"
|
||||
BR2_PACKAGE_XZ=y
|
||||
BR2_PACKAGE_STRACE=y
|
||||
BR2_PACKAGE_STRESS_NG=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_E2FSPROGS=y
|
||||
BR2_PACKAGE_ARMBIAN_FIRMWARE=y
|
||||
BR2_PACKAGE_ARMBIAN_FIRMWARE_AP6255=y
|
||||
BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XX=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM43XXX=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM4366B1=y
|
||||
BR2_PACKAGE_LINUX_FIRMWARE_BRCM_BCM4366C0=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4_X=y
|
||||
BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/rpi/config.txt"
|
||||
BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/rpi/cmdline.txt"
|
||||
BR2_PACKAGE_DBUS_CXX=y
|
||||
BR2_PACKAGE_DBUS_GLIB=y
|
||||
BR2_PACKAGE_DBUS_TRIGGERD=y
|
||||
BR2_PACKAGE_EUDEV_RULES_GEN=y
|
||||
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
|
||||
BR2_PACKAGE_EVEMU=y
|
||||
BR2_PACKAGE_EVTEST=y
|
||||
BR2_PACKAGE_GPTFDISK=y
|
||||
BR2_PACKAGE_GPTFDISK_SGDISK=y
|
||||
BR2_PACKAGE_INPUT_EVENT_DAEMON=y
|
||||
BR2_PACKAGE_MDIO_TOOLS=y
|
||||
BR2_PACKAGE_RNG_TOOLS=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_FIT_CHECK_SIGN=y
|
||||
BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE=y
|
||||
BR2_PACKAGE_PYTHON3=y
|
||||
BR2_PACKAGE_PYTHON_GUNICORN=y
|
||||
BR2_PACKAGE_LIBSSH_OPENSSL=y
|
||||
BR2_PACKAGE_LIBSSH2=y
|
||||
BR2_PACKAGE_LIBSSH2_OPENSSL=y
|
||||
BR2_PACKAGE_LIBOPENSSL_BIN=y
|
||||
BR2_PACKAGE_LIBINPUT=y
|
||||
BR2_PACKAGE_LIBCURL_CURL=y
|
||||
BR2_PACKAGE_NETOPEER2_CLI=y
|
||||
BR2_PACKAGE_NSS_MDNS=y
|
||||
BR2_PACKAGE_LINUX_PAM=y
|
||||
BR2_PACKAGE_LIBPAM_RADIUS_AUTH=y
|
||||
BR2_PACKAGE_ONIGURUMA=y
|
||||
BR2_PACKAGE_AVAHI_DAEMON=y
|
||||
BR2_PACKAGE_AVAHI_DEFAULT_SERVICES=y
|
||||
BR2_PACKAGE_CHRONY=y
|
||||
BR2_PACKAGE_CONNTRACK_TOOLS=y
|
||||
BR2_PACKAGE_DNSMASQ=y
|
||||
BR2_PACKAGE_ETHTOOL=y
|
||||
BR2_PACKAGE_FPING=y
|
||||
BR2_PACKAGE_FRR=y
|
||||
BR2_PACKAGE_HOSTAPD=y
|
||||
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
|
||||
BR2_PACKAGE_IPROUTE2=y
|
||||
BR2_PACKAGE_IPTABLES_NFTABLES=y
|
||||
BR2_PACKAGE_IPUTILS=y
|
||||
BR2_PACKAGE_IW=y
|
||||
BR2_PACKAGE_LLDPD=y
|
||||
BR2_PACKAGE_MSTPD=y
|
||||
BR2_PACKAGE_NETCALC=y
|
||||
BR2_PACKAGE_NETCAT_OPENBSD=y
|
||||
BR2_PACKAGE_NETSNMP=y
|
||||
BR2_PACKAGE_NFTABLES=y
|
||||
BR2_PACKAGE_NGINX=y
|
||||
BR2_PACKAGE_NGINX_HTTP_SSL_MODULE=y
|
||||
BR2_PACKAGE_NGINX_HTTP_V2_MODULE=y
|
||||
BR2_PACKAGE_NMAP=y
|
||||
BR2_PACKAGE_NMAP_NCAT=y
|
||||
BR2_PACKAGE_NMAP_NMAP=y
|
||||
BR2_PACKAGE_NMAP_NPING=y
|
||||
BR2_PACKAGE_OPENRESOLV=y
|
||||
BR2_PACKAGE_OPENSSH=y
|
||||
BR2_PACKAGE_SOCAT=y
|
||||
BR2_PACKAGE_TCPDUMP=y
|
||||
BR2_PACKAGE_TRACEROUTE=y
|
||||
BR2_PACKAGE_ULOGD=y
|
||||
BR2_PACKAGE_WHOIS=y
|
||||
BR2_PACKAGE_WIRELESS_REGDB=y
|
||||
BR2_PACKAGE_WIRELESS_TOOLS=y
|
||||
BR2_PACKAGE_WPA_SUPPLICANT=y
|
||||
BR2_PACKAGE_BASH_COMPLETION=y
|
||||
BR2_PACKAGE_SUDO=y
|
||||
BR2_PACKAGE_TTYD=y
|
||||
BR2_PACKAGE_GETENT=y
|
||||
BR2_PACKAGE_HTOP=y
|
||||
BR2_PACKAGE_IRQBALANCE=y
|
||||
BR2_PACKAGE_KMOD_TOOLS=y
|
||||
BR2_PACKAGE_PWGEN=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
BR2_PACKAGE_RAUC_GPT=y
|
||||
BR2_PACKAGE_RAUC_NETWORK=y
|
||||
BR2_PACKAGE_RAUC_JSON=y
|
||||
BR2_PACKAGE_SYSKLOGD=y
|
||||
BR2_PACKAGE_SYSKLOGD_LOGGER=y
|
||||
BR2_PACKAGE_WATCHDOGD=y
|
||||
BR2_PACKAGE_LESS=y
|
||||
BR2_PACKAGE_MG=y
|
||||
BR2_PACKAGE_NANO=y
|
||||
BR2_TARGET_ROOTFS_SQUASHFS=y
|
||||
# BR2_TARGET_ROOTFS_TAR is not set
|
||||
BR2_TARGET_UBOOT=y
|
||||
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rpi_arm64"
|
||||
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/extras.config $(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/rpi/uboot/extras.config"
|
||||
BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
|
||||
BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="arch/arm/dts/infix-key.dtbo arch/arm/dts/rpi-env.dtbo"
|
||||
BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/rpi/uboot/rpi-env.dtso"
|
||||
BR2_PACKAGE_HOST_DOSFSTOOLS=y
|
||||
BR2_PACKAGE_HOST_E2FSPROGS=y
|
||||
BR2_PACKAGE_HOST_ENVIRONMENT_SETUP=y
|
||||
BR2_PACKAGE_HOST_GENEXT2FS=y
|
||||
BR2_PACKAGE_HOST_GENIMAGE=y
|
||||
BR2_PACKAGE_HOST_KMOD_XZ=y
|
||||
BR2_PACKAGE_HOST_MTOOLS=y
|
||||
BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
INFIX_VENDOR_HOME="https://github.com/kernelkit"
|
||||
INFIX_IMAGE_ID="${INFIX_ID}-rpi4"
|
||||
INFIX_DESC="Infix is an operating system based on Linux and modeled with YANG. It can be set up both as a switch, with offloading using switchdev, a router with firewalling, or a secure end device. All while supporting advanced networking scenarios and running Docker containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://github.com/kernelkit/infix/tree/main/doc"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_CONFD=y
|
||||
BR2_PACKAGE_GENCERT=y
|
||||
BR2_PACKAGE_STATD=y
|
||||
BR2_PACKAGE_FACTORY=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_HOOK_SCRIPTS=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_MODULES_LOAD=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_RTC=y
|
||||
BR2_PACKAGE_FINIT_RTC_DATE="2024-11-04 10:54:00"
|
||||
BR2_PACKAGE_FINIT_RTC_FILE="/var/lib/misc/rtc"
|
||||
BR2_PACKAGE_FINIT_PLUGIN_TTY=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_URANDOM=y
|
||||
BR2_PACKAGE_IITO=y
|
||||
BR2_PACKAGE_KEYACK=y
|
||||
BR2_PACKAGE_KLISH_PLUGIN_INFIX=y
|
||||
BR2_PACKAGE_LANDING=y
|
||||
BR2_PACKAGE_LOWDOWN=y
|
||||
BR2_PACKAGE_MCD=y
|
||||
BR2_PACKAGE_MDNS_ALIAS=y
|
||||
BR2_PACKAGE_NETBROWSE=y
|
||||
BR2_PACKAGE_PODMAN=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_BTRFS=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_DEVICEMAPPER=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_VFS=y
|
||||
BR2_PACKAGE_SHOW=y
|
||||
BR2_PACKAGE_TETRIS=y
|
||||
BR2_PACKAGE_ROUSETTE=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
SDCARD_AUX=y
|
||||
@@ -7,6 +7,7 @@ BR2_CCACHE=y
|
||||
BR2_CCACHE_DIR="${BR2_EXTERNAL_INFIX_PATH}/.ccache"
|
||||
BR2_ENABLE_DEBUG=y
|
||||
BR2_GLOBAL_PATCH_DIR="${BR2_EXTERNAL_INFIX_PATH}/patches"
|
||||
BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
|
||||
BR2_TARGET_GENERIC_HOSTNAME="infix"
|
||||
BR2_TARGET_GENERIC_ISSUE="Infix by KernelKit"
|
||||
BR2_INIT_FINIT=y
|
||||
@@ -26,7 +27,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INF
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.35"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.49"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -34,9 +35,9 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="${BR2_EXTERNAL_INFIX_PATH}/board/common/busybox_defconfig"
|
||||
BR2_PACKAGE_STRACE=y
|
||||
BR2_PACKAGE_STRESS_NG=y
|
||||
BR2_PACKAGE_SYSREPO_GROUP="sys-cli"
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_E2FSPROGS=y
|
||||
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
|
||||
BR2_PACKAGE_DBUS_CXX=y
|
||||
BR2_PACKAGE_DBUS_GLIB=y
|
||||
BR2_PACKAGE_DBUS_TRIGGERD=y
|
||||
@@ -59,6 +60,7 @@ BR2_PACKAGE_LIBOPENSSL_BIN=y
|
||||
BR2_PACKAGE_LIBCURL_CURL=y
|
||||
BR2_PACKAGE_NETOPEER2_CLI=y
|
||||
BR2_PACKAGE_NSS_MDNS=y
|
||||
BR2_PACKAGE_SYSREPO_GROUP="sys-cli"
|
||||
BR2_PACKAGE_LINUX_PAM=y
|
||||
BR2_PACKAGE_LIBPAM_RADIUS_AUTH=y
|
||||
BR2_PACKAGE_ONIGURUMA=y
|
||||
@@ -71,11 +73,13 @@ BR2_PACKAGE_ETHTOOL=y
|
||||
BR2_PACKAGE_FPING=y
|
||||
BR2_PACKAGE_FRR=y
|
||||
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
|
||||
BR2_PACKAGE_IPERF3=y
|
||||
BR2_PACKAGE_IPROUTE2=y
|
||||
BR2_PACKAGE_IPTABLES_NFTABLES=y
|
||||
BR2_PACKAGE_IPUTILS=y
|
||||
BR2_PACKAGE_LLDPD=y
|
||||
BR2_PACKAGE_MSTPD=y
|
||||
BR2_PACKAGE_MTR=y
|
||||
BR2_PACKAGE_NETCALC=y
|
||||
BR2_PACKAGE_NETCAT_OPENBSD=y
|
||||
BR2_PACKAGE_NETSNMP=y
|
||||
@@ -95,8 +99,10 @@ BR2_PACKAGE_TRACEROUTE=y
|
||||
BR2_PACKAGE_ULOGD=y
|
||||
BR2_PACKAGE_WHOIS=y
|
||||
BR2_PACKAGE_BASH_COMPLETION=y
|
||||
BR2_PACKAGE_NEOFETCH=y
|
||||
BR2_PACKAGE_SUDO=y
|
||||
BR2_PACKAGE_TTYD=y
|
||||
BR2_PACKAGE_GETENT=y
|
||||
BR2_PACKAGE_HTOP=y
|
||||
BR2_PACKAGE_IRQBALANCE=y
|
||||
BR2_PACKAGE_KMOD_TOOLS=y
|
||||
@@ -131,18 +137,19 @@ BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
INFIX_VENDOR_HOME="https://github.com/kernelkit"
|
||||
INFIX_DESC="Infix is an operating system based on Linux and modeled with YANG. It can be set up both as a switch, with offloading using switchdev, a router with firewalling, or a secure end device. All while supporting advanced networking scenarios and running Docker containers."
|
||||
INFIX_VENDOR_HOME="https://kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://github.com/kernelkit/infix/tree/main/doc"
|
||||
INFIX_DOC="https://kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_FEATURE_WIFI=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_DONGLE_REALTEK=y
|
||||
BR2_PACKAGE_CONFD=y
|
||||
BR2_PACKAGE_CONFD_TEST_MODE=y
|
||||
BR2_PACKAGE_CURIOS_HTTPD=y
|
||||
BR2_PACKAGE_CURIOS_NFTABLES=y
|
||||
BR2_PACKAGE_GENCERT=y
|
||||
BR2_PACKAGE_STATD=y
|
||||
BR2_PACKAGE_SHOW=y
|
||||
BR2_PACKAGE_FACTORY=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y
|
||||
BR2_PACKAGE_FINIT_PLUGIN_HOOK_SCRIPTS=y
|
||||
@@ -164,14 +171,11 @@ BR2_PACKAGE_PODMAN=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_BTRFS=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_DEVICEMAPPER=y
|
||||
BR2_PACKAGE_PODMAN_DRIVER_VFS=y
|
||||
BR2_PACKAGE_SHOW=y
|
||||
BR2_PACKAGE_TETRIS=y
|
||||
BR2_PACKAGE_ROUSETTE=y
|
||||
BR2_PACKAGE_RAUC_INSTALLATION_STATUS=y
|
||||
BR2_PACKAGE_FEATURE_WIFI=y
|
||||
BR2_PACKAGE_FEATURE_WIFI_DONGLE_REALTEK=y
|
||||
BR2_PACKAGE_HOST_PYTHON_YANGDOC=y
|
||||
BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
|
||||
BR2_PACKAGE_GETENT=y
|
||||
TRUSTED_KEYS=y
|
||||
TRUSTED_KEYS_DEVELOPMENT=y
|
||||
GNS3_APPLIANCE_RAM=512
|
||||
|
||||
@@ -27,7 +27,7 @@ BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INF
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.35"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.49"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
|
||||
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
||||
@@ -114,10 +114,10 @@ BR2_PACKAGE_HOST_RAUC=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
|
||||
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
|
||||
INFIX_VENDOR_HOME="https://github.com/kernelkit"
|
||||
INFIX_DESC="Infix is an operating system based on Linux and modeled with YANG. It can be set up both as a switch, with offloading using switchdev, a router with firewalling, or a secure end device. All while supporting advanced networking scenarios and running Docker containers."
|
||||
INFIX_VENDOR_HOME="https://kernelkit.org"
|
||||
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
|
||||
INFIX_HOME="https://github.com/kernelkit/infix/"
|
||||
INFIX_DOC="https://github.com/kernelkit/infix/tree/main/doc"
|
||||
INFIX_DOC="https://kernelkit.org/infix/"
|
||||
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
|
||||
BR2_PACKAGE_CONFD=y
|
||||
BR2_PACKAGE_CONFD_TEST_MODE=y
|
||||
|
||||
@@ -3,6 +3,55 @@ Change Log
|
||||
|
||||
All notable changes to the project are documented in this file.
|
||||
|
||||
[v25.09.0][] - 2025-09-30
|
||||
-------------------------
|
||||
|
||||
### Changes
|
||||
|
||||
- Upgrade Buildroot to 2025.02.6 (LTS)
|
||||
- Upgrade Linux kernel to 6.12.49 (LTS)
|
||||
- Upgrade libyang to 3.13.5
|
||||
- Upgrade sysrepo to 3.7.11
|
||||
- Upgrade netopeer2 (NETCONF) to 2.4.5
|
||||
- Upgrade rousette (RESTCONF) to v2
|
||||
- Add support for [Banana Pi R3][BPI-R3], a 7 port switch with 2 WiFi chip
|
||||
- Add neofetch system information tool for system introspection, issue #1143
|
||||
- Add mtr and iperf3 network diagnostic tools, issue #1144
|
||||
- Improve default bash settings with better history handling and tab completion
|
||||
- cli: new `terminal reset` and `terminal resize` convenience commands
|
||||
|
||||
### Fixes
|
||||
|
||||
- Fix #1080: Error message in log from rauc, deprecated 'Install' D-Bus method
|
||||
- Fix #1100: Reduce DHCP client logging verbosity by 70% and include interface
|
||||
names in log messages for easier troubleshooting
|
||||
- Fix #1119: CLI UX regression, restore proper behavior for `no enabled` command
|
||||
- Fix #1155: `show ospf` commands regression
|
||||
- Fix #1150: `show-legacy` wrapper permissions
|
||||
- Fix #1161: error in log during boot about unsupported command
|
||||
- Fix #1169: Expected neighbors not shown in sysrepocfg
|
||||
- Fixes for unicode translation in log and pager outputs as well as `syslogd`
|
||||
|
||||
[BPI-R3]: https://wiki.banana-pi.org/Banana_Pi_BPI-R3
|
||||
|
||||
[v25.08.0][] - 2025-09-01
|
||||
-------------------------
|
||||
|
||||
### Changes
|
||||
- Upgrade Buildroot to 2025.02.5 (LTS)
|
||||
- Upgrade Linux kernel to 6.12.44 (LTS)
|
||||
- Raspberry Pi 4 is now a part of the aarch64 image.
|
||||
- Add support for [Raspberry Pi touch display][RPI-TOUCH] on Raspberry Pi 4
|
||||
|
||||
### Fixes
|
||||
- Fix #1098: Prune dangling container images to reclaim disk space
|
||||
- Fix #1123: Disabling or removing a container may cause podman to hang
|
||||
- Fix #1124: Container setup with unreachable remote image spawns
|
||||
excessive `ip monitor` processes
|
||||
- Fix #1127: Silence libyang Obsolete schema node warnings in log
|
||||
|
||||
[RPI-TOUCH]: https://www.raspberrypi.com/products/raspberry-pi-touch-display/
|
||||
|
||||
[v25.06.0][] - 2025-07-01
|
||||
-------------------------
|
||||
|
||||
@@ -1594,6 +1643,9 @@ Supported YANG models in addition to those used by sysrepo and netopeer:
|
||||
- N/A
|
||||
|
||||
[buildroot]: https://buildroot.org/
|
||||
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v25.09.0...HEAD
|
||||
[v25.09.0]: https://github.com/kernelkit/infix/compare/v25.08.0...v26.09.0
|
||||
[v25.08.0]: https://github.com/kernelkit/infix/compare/v25.06.1...v26.08.0
|
||||
[v25.06.0]: https://github.com/kernelkit/infix/compare/v25.05.1...v26.06.0
|
||||
[v25.05.1]: https://github.com/kernelkit/infix/compare/v25.05.0...v25.05.1
|
||||
[v25.05.0]: https://github.com/kernelkit/infix/compare/v25.04.0...v25.05.0
|
||||
|
||||
@@ -1,37 +1,36 @@
|
||||
Boot Procedure
|
||||
==============
|
||||
# Boot Procedure
|
||||
|
||||
Systems running Infix will typically boot in multiple phases, forming
|
||||
a boot chain. Each link in the chain has three main responsibilities:
|
||||
|
||||
1. Ensuring the integrity of the next link before passing control to
|
||||
it. This avoids silent failures stemming from data corruption.
|
||||
|
||||
2. Ensuring the authenticity of the next link before passing control
|
||||
1. Ensuring the authenticity of the next link before passing control
|
||||
to it, commonly referred to as _Secure Boot_. This protects against
|
||||
malicious attempts to modify a system's firmware.
|
||||
|
||||
3. Preparing the system state according to the requirements of the
|
||||
1. Preparing the system state according to the requirements of the
|
||||
next link. E.g. the Linux kernel requires the system's RAM to be
|
||||
operational.
|
||||
|
||||
A typical chain consists of four stages:
|
||||
|
||||
.---------.
|
||||
| ROM >---. Determine the location of and load the SPL
|
||||
'---------' |
|
||||
.-----------------'
|
||||
| .---------.
|
||||
'---> SPL >---. Perform DDR training and load the TPL
|
||||
'---------' |
|
||||
.-----------------'
|
||||
| .---------.
|
||||
'---> TPL >---. Load Linux kernel, device tree, and root filesystem
|
||||
'---------' |
|
||||
.-----------------'
|
||||
| .---------.
|
||||
'---> Infix | Get down to business
|
||||
'---------'
|
||||
```
|
||||
.---------.
|
||||
| ROM >---. Determine the location of and load the SPL
|
||||
'---------' |
|
||||
.-----------------'
|
||||
| .---------.
|
||||
'---> SPL >---. Perform DDR training and load the TPL
|
||||
'---------' |
|
||||
.-----------------'
|
||||
| .---------.
|
||||
'---> TPL >---. Load Linux kernel, device tree, and root filesystem
|
||||
'---------' |
|
||||
.-----------------'
|
||||
| .---------.
|
||||
'---> Infix | Get down to business
|
||||
'---------'
|
||||
```
|
||||
|
||||
After a reset, hardware will pass control to a program (_ROM_) which
|
||||
is almost always programmed into the SoC by the vendor. This program
|
||||
@@ -52,9 +51,7 @@ This document's focus is to describe the final two phases of the boot
|
||||
chain, as the initial phases are very hardware dependent, better
|
||||
described by existing documentation provided by the SoC vendor.
|
||||
|
||||
|
||||
Bootloader
|
||||
----------
|
||||
## Bootloader
|
||||
|
||||
### Configuration
|
||||
|
||||
@@ -62,33 +59,42 @@ To mitigate the risk of a malicious user being able to circumvent the
|
||||
bootloader's validation procedure, user configuration is kept to a
|
||||
minimum. Two settings are available:
|
||||
|
||||
- **Boot order**: Since Infix maintains two copies of its software image,
|
||||
and as some bootloaders support [netbooting][2], the order in which boot
|
||||
sources are considered can be configured. To select the active
|
||||
source, use [RAUC][]:
|
||||
**Boot order**: Since Infix maintains two copies of its software image,
|
||||
and as some bootloaders support [netbooting][2], the order in which boot
|
||||
sources are considered can be configured. To select the active
|
||||
source, use [RAUC][]:
|
||||
|
||||
`rauc status mark-active <slot>`
|
||||
```
|
||||
root@example:~# rauc status mark-active <slot>
|
||||
...
|
||||
```
|
||||
|
||||
Where `<slot>` is one of:
|
||||
Where `<slot>` is one of:
|
||||
|
||||
| `<slot>` | Source |
|
||||
|----------|---------------------------|
|
||||
| rootfs.0 | Primary partition |
|
||||
| rootfs.1 | Secondary partition |
|
||||
| net.0 | Netboot (where supported) |
|
||||
| **`<slot>`** | **Source** |
|
||||
|--------------|---------------------------|
|
||||
| `rootfs.0` | Primary partition |
|
||||
| `rootfs.1` | Secondary partition |
|
||||
| `net.0` | Netboot (where supported) |
|
||||
|
||||
- **Debug**: By default, the kernel will only output errors to the
|
||||
console during boot. Optionally, this can be altered such that all
|
||||
enabled messages are logged.
|
||||
**Debug**: By default, the kernel will only output errors to the
|
||||
console during boot. Optionally, this can be altered such that all
|
||||
enabled messages are logged.
|
||||
|
||||
On systems using _U-Boot_, this can be enabled by running `fw_setenv
|
||||
DEBUG 1`. To restore the default behavior, run `fw_setenv DEBUG`.
|
||||
On systems using _U-Boot_, this can be enabled by running `fw_setenv
|
||||
DEBUG 1`. To restore the default behavior, run `fw_setenv DEBUG`.
|
||||
|
||||
On systems running _GRUB_, this can be enabled by running
|
||||
`grub-editenv /mnt/aux/grub/grubenv set DEBUG=1`. To restore the
|
||||
default behavior, run `grub-editenv /mnt/aux/grub/grubenv unset
|
||||
DEBUG`
|
||||
On systems running _GRUB_, this can be enabled by running:
|
||||
|
||||
```
|
||||
root@example:~# grub-editenv /mnt/aux/grub/grubenv set DEBUG=1
|
||||
```
|
||||
|
||||
To restore the default behavior, run:
|
||||
|
||||
```
|
||||
root@example:~# grub-editenv /mnt/aux/grub/grubenv unset DEBUG
|
||||
```
|
||||
|
||||
### U-Boot
|
||||
|
||||
@@ -107,8 +113,7 @@ and TFTP to transfer the image to the system's RAM.
|
||||
|
||||
Access to U-Boot's shell is disabled to prevent side-loading of
|
||||
malicious software. To configure the active boot partition, refer to
|
||||
the [Bootloader Interface](#bootloader-interface) section.
|
||||
|
||||
the [Bootloader Configuration](#configuration) section.
|
||||
|
||||
### GRUB
|
||||
|
||||
@@ -119,14 +124,82 @@ standard [System Upgrade](#system-upgrade) can be performed on
|
||||
virtualized instances.
|
||||
|
||||
Access to the GRUB shell is not limited in any way, and the boot
|
||||
partition can be selected interactively at boot using the arrow
|
||||
keys. It is also possible to permanently configure the default
|
||||
partition from Infix using the [Bootloader
|
||||
Interface](#bootloader-interface).
|
||||
partition can be selected interactively at boot using the arrow keys. It
|
||||
is also possible to permanently configure the default partition from
|
||||
Infix using the [Bootloader Configuration](#configuration).
|
||||
|
||||
## System Boot
|
||||
|
||||
System Upgrade
|
||||
==============
|
||||
After the system firmware (BIOS or and [boot loader](boot.md) start
|
||||
Linux the following happens. The various failure modes, e.g., missing
|
||||
password in VPD, are detailed later in this section.
|
||||
|
||||

|
||||
|
||||
1. Before mounting `/cfg` and `/var` partitions, hosting read-writable
|
||||
data like `startup-config` and container images, the system first
|
||||
checks if a factory reset has been requested by the user, if so it
|
||||
wipes the contents of these partitions
|
||||
1. Linux boots with a device tree which is used for detecting generic
|
||||
make and model of the device, e.g., number of interfaces. It may
|
||||
also reference an EEPROM with [Vital Product Data](vpd.md). That is
|
||||
where the base MAC address and per-device password hash is stored.
|
||||
(Generic builds use the same MAC address and password)
|
||||
1. On every boot the system's `factory-config` and `failure-config` are
|
||||
generated from the YANG[^2] models of the current firmware version.
|
||||
This ensures that a factory reset device can always boot, and that
|
||||
there is a working fail safe, or rather *fail secure*, mode
|
||||
1. On first power-on, and after a factory reset, the system does not
|
||||
have a `startup-config`, in which case `factory-config` is copied
|
||||
to `startup-config` -- if a per-product specific version exists it
|
||||
is preferred over the generated one
|
||||
1. Provided the integrity of the `startup-config` is OK, a system
|
||||
service loads and activates the configuration
|
||||
|
||||
### Failure Modes
|
||||
|
||||
So, what happens if any of the steps above fail?
|
||||
|
||||
#### VPD Fail
|
||||
|
||||
The per-device password cannot be read, or is corrupt, so the system
|
||||
`factory-config` and `failure-config` are not generated:
|
||||
|
||||
1. First boot, or after factory reset: `startup-config` cannot be
|
||||
created or loaded, and `failure-config` cannot be loaded. The
|
||||
system ends up in an unrecoverable state, i.e., **RMA[^3] Mode**
|
||||
1. The system has booted (at least) once with correct VPD and password
|
||||
and already has a `startup-config`. Provided the `startup-config`
|
||||
is OK (see below), it is loaded and system boots successfully
|
||||
|
||||
In both cases, external factory reset modes/button will not help, and
|
||||
in the second case will cause the device to fail on the next boot.
|
||||
|
||||
> [!NOTE]
|
||||
> The second case does not yet have any warning or event that can be
|
||||
> detected from the outside. This is planned for a later release.
|
||||
|
||||
#### Broken startup-config
|
||||
|
||||
If loading `startup-config` fails for some reason, e.g., invalid JSON
|
||||
syntax, failed validation against the system's YANG model, or a bug in
|
||||
the system's `confd` service, the *Fail Secure Mode* is triggered and
|
||||
`failure-config` is loaded (unless VPD Failure, see above).
|
||||
|
||||
> [!TIP]
|
||||
> Please see the [Branding & Releases](branding.md) document for how to
|
||||
> provide per-product `failure-config`, or `factory-config` to suit your
|
||||
> product's preferences.
|
||||
|
||||
*Fail Secure Mode* is a fail-safe mode provided for debugging the
|
||||
system. The default[^4] creates a setup of isolated interfaces with
|
||||
communication only to the management CPU, SSH and console login using
|
||||
the device's factory reset password, IP connectivity only using IPv6
|
||||
link-local, and device discovery protocols: LLDP, mDNS-SD. The login
|
||||
and shell prompt are set to `failure-c0-ff-ee`, the last three octets of
|
||||
the device's base MAC address.
|
||||
|
||||
## System Upgrade
|
||||
|
||||
Much of the minutiae of software upgrades is delegated to [RAUC][],
|
||||
which offers lots of benefits out-of-the-box:
|
||||
@@ -134,21 +207,21 @@ which offers lots of benefits out-of-the-box:
|
||||
- Upgrade Bundles are always signed, such that their authenticity can
|
||||
be verified by the running operating system, before the new one is
|
||||
installed.
|
||||
|
||||
- The bureaucracy of interfacing with different bootloaders, manage
|
||||
the boot order, is a simple matter of providing a compatible
|
||||
configuration.
|
||||
|
||||
- Updates can be sourced from the local filesystem (including external
|
||||
media like USB sticks or SD-cards) and from remote servers using FTP
|
||||
or HTTP(S).
|
||||
|
||||
To initiate a system upgrade from the shell[^1], run:
|
||||
|
||||
rauc install <file|url>
|
||||
```
|
||||
root@example:~# rauc install <file|url>
|
||||
...
|
||||
```
|
||||
|
||||
Where the file or URL points to a [RAUC Upgrade
|
||||
Bundle](#rauc-upgrade-bundle).
|
||||
Where the file or URL points to a [RAUC Upgrade Bundle](#rauc-upgrade-bundle).
|
||||
|
||||
This will upgrade the partition not currently running. After a
|
||||
successful upgrade is completed, you can reboot your system, which
|
||||
@@ -156,14 +229,9 @@ will then boot from the newly installed image. Since the partition
|
||||
from which you were originally running is now inactive, running the
|
||||
same upgrade command again will bring both partitions into sync.
|
||||
|
||||
[RAUC]: https://rauc.io
|
||||
## Image Formats
|
||||
|
||||
|
||||
Image Formats
|
||||
=============
|
||||
|
||||
SquashFS Image
|
||||
--------------
|
||||
### SquashFS Image
|
||||
|
||||
**Canonical Name**: `rootfs.squashfs`
|
||||
|
||||
@@ -174,10 +242,7 @@ this image, or is dependent on it, in one way or another.
|
||||
On its own, it can be used as an [initrd][] to efficiently boot a
|
||||
virtual instance of Infix.
|
||||
|
||||
[initrd]: https://docs.kernel.org/admin-guide/initrd.html
|
||||
|
||||
FIT Framed Squash Image
|
||||
-----------------------
|
||||
### FIT Framed Squash Image
|
||||
|
||||
**Canonical Name**: `rootfs.itb`
|
||||
|
||||
@@ -194,9 +259,9 @@ stored in the `/boot` directory of the filesystem.
|
||||
|
||||
On disk, this image is then stored broken up into its two components;
|
||||
the _FIT header_ (`rootfs.itbh`) and the SquashFS image. The header
|
||||
is stored on the [Auxiliary Data](#aux---auxiliary-data) partition of
|
||||
is stored on the [Auxiliary Data](#aux-auxiliary-data) partition of
|
||||
the [Disk Image](#disk-image), while the SquashFS image is stored in
|
||||
one of the [Root Filesystem](#primarysecondary---root-filesystems)
|
||||
one of the [Root Filesystem](#primarysecondary-root-filesystems)
|
||||
partitions.
|
||||
|
||||
When the system boots, U-Boot will concatenate the two parts to
|
||||
@@ -216,25 +281,20 @@ validate the SquashFS's contents. This path was chosen because:
|
||||
In its full form, it can be used to netboot Infix, as it contains all
|
||||
the information needed by U-Boot in a single file.
|
||||
|
||||
[FIT]: https://u-boot.readthedocs.io/en/latest/usage/fit.html
|
||||
|
||||
|
||||
RAUC Upgrade Bundle
|
||||
-------------------
|
||||
### RAUC Upgrade Bundle
|
||||
|
||||
**Canonical Name**: `infix-${ARCH}.pkg`
|
||||
|
||||
Itself a SquashFS image, it contains the Infix [SquashFS
|
||||
Image](#squashfs-image) along with the header of the [FIT Framed
|
||||
Squash Image](#fit-framed-squash-image), and some supporting files to
|
||||
let [RAUC][] know how install it on the target system.
|
||||
Itself a SquashFS image, this bundle (sometimes referred to package)
|
||||
contains the Infix [SquashFS Image](#squashfs-image) along with the
|
||||
header of the [FIT Framed Squash Image](#fit-framed-squash-image), and
|
||||
some supporting files to let [RAUC][] know how install it on the target
|
||||
system.
|
||||
|
||||
When performing a [System Upgrade](#system-upgrade), this is the
|
||||
format to use.
|
||||
When performing a [System Upgrade](#system-upgrade), this is the format
|
||||
to use.
|
||||
|
||||
|
||||
Disk Image
|
||||
----------
|
||||
### Disk Image
|
||||
|
||||
**Canonical Name**: `disk.img`
|
||||
|
||||
@@ -242,35 +302,37 @@ Infix runs from a block device (e.g. eMMC or virtio disk) with the
|
||||
following layout. The disk is expected to use the GPT partitioning
|
||||
scheme. Partitions marked with an asterisk are optional.
|
||||
|
||||
.-----------.
|
||||
| GPT Table |
|
||||
:-----------:
|
||||
| boot* |
|
||||
:-----------:
|
||||
| aux |
|
||||
:-----------:
|
||||
| |
|
||||
| primary |
|
||||
| |
|
||||
:-----------:
|
||||
| |
|
||||
| secondary |
|
||||
| |
|
||||
:-----------:
|
||||
| cfg |
|
||||
:-----------:
|
||||
| |
|
||||
| var* |
|
||||
| |
|
||||
'-----------'
|
||||
```
|
||||
.-----------.
|
||||
| GPT Table |
|
||||
:-----------:
|
||||
| boot* |
|
||||
:-----------:
|
||||
| aux |
|
||||
:-----------:
|
||||
| |
|
||||
| primary |
|
||||
| |
|
||||
:-----------:
|
||||
| |
|
||||
| secondary |
|
||||
| |
|
||||
:-----------:
|
||||
| cfg |
|
||||
:-----------:
|
||||
| |
|
||||
| var* |
|
||||
| |
|
||||
'-----------'
|
||||
```
|
||||
|
||||
### `boot` - Bootloader
|
||||
#### `boot` - Bootloader
|
||||
|
||||
| Parameter | Value |
|
||||
|-----------|-----------------------------------------|
|
||||
| Required | No |
|
||||
| Size | 4 MiB |
|
||||
| Format | Raw binary, as dictated by the hardware |
|
||||
| **Parameter** | **Value** |
|
||||
|---------------|-----------------------------------------|
|
||||
| Required | No |
|
||||
| Size | 4 MiB |
|
||||
| Format | Raw binary, as dictated by the hardware |
|
||||
|
||||
Optional partition containing the system's bootloader. May also reside
|
||||
in a separate storage device, e.g. a serial FLASH.
|
||||
@@ -278,14 +340,13 @@ in a separate storage device, e.g. a serial FLASH.
|
||||
On x86_64, this partition holds the EFI system partition, containing
|
||||
the GRUB bootloader.
|
||||
|
||||
#### `aux` - Auxiliary Data
|
||||
|
||||
### `aux` - Auxiliary Data
|
||||
|
||||
| Parameter | Value |
|
||||
|-----------|-----------------|
|
||||
| Required | Yes |
|
||||
| Size | 4 MiB |
|
||||
| Format | EXT4 filesystem |
|
||||
| **Parameter** | **Value** |
|
||||
|---------------|-----------------|
|
||||
| Required | Yes |
|
||||
| Size | 4 MiB |
|
||||
| Format | EXT4 filesystem |
|
||||
|
||||
Holds information that is shared between Infix and its bootloader,
|
||||
such as image signatures required to validate the chain of trust,
|
||||
@@ -293,10 +354,12 @@ bootloader configuration etc.
|
||||
|
||||
Typical layout when using U-Boot bootloader:
|
||||
|
||||
/
|
||||
├ primary.itbh
|
||||
├ secondary.itbh
|
||||
└ uboot.env
|
||||
```
|
||||
/
|
||||
├ primary.itbh
|
||||
├ secondary.itbh
|
||||
└ uboot.env
|
||||
```
|
||||
|
||||
During boot, an ITB header along with the corresponding root
|
||||
filesystem image are concatenated in memory, by U-Boot, to form a
|
||||
@@ -307,39 +370,36 @@ Note that the bootloader's primary environment is bundled in the
|
||||
binary - `uboot.env` is only used to import a few settings that is
|
||||
required to configure the boot order.
|
||||
|
||||
#### `primary`/`secondary` - Root Filesystems
|
||||
|
||||
### `primary`/`secondary` - Root Filesystems
|
||||
|
||||
| Parameter | Value |
|
||||
|-----------|-------------------|
|
||||
| Required | Yes |
|
||||
| Size | >= 256 MiB |
|
||||
| Format | Squash filesystem |
|
||||
| **Parameter** | **Value** |
|
||||
|---------------|-------------------|
|
||||
| Required | Yes |
|
||||
| Size | >= 256 MiB |
|
||||
| Format | Squash filesystem |
|
||||
|
||||
Holds the [SquashFS Image](#squashfs-image). Two copies exist so that
|
||||
an incomplete upgrade does not brick the system, and to allow fast
|
||||
rollbacks when upgrading to a new version.
|
||||
|
||||
#### `cfg` - Configuration Data
|
||||
|
||||
### `cfg` - Configuration Data
|
||||
|
||||
| Parameter | Value |
|
||||
|-----------|-----------------|
|
||||
| Required | Yes |
|
||||
| Size | >= 16 MiB |
|
||||
| Format | EXT4 filesystem |
|
||||
| **Parameter** | **Value** |
|
||||
|---------------|-----------------|
|
||||
| Required | Yes |
|
||||
| Size | >= 16 MiB |
|
||||
| Format | EXT4 filesystem |
|
||||
|
||||
Non-volatile storage of the system configuration and user data.
|
||||
Concretely, user data is everything stored under `/root` and `/home`.
|
||||
|
||||
#### `var` - Variable Data
|
||||
|
||||
### `var` - Variable Data
|
||||
|
||||
| Parameter | Value |
|
||||
|-----------|-----------------|
|
||||
| Required | No |
|
||||
| Size | >= 16 MiB |
|
||||
| Format | EXT4 filesystem |
|
||||
| **Parameter** | **Value** |
|
||||
|---------------|-----------------|
|
||||
| Required | No |
|
||||
| Size | >= 16 MiB |
|
||||
| Format | EXT4 filesystem |
|
||||
|
||||
Persistent storage for everything under `/var`. This is maintained as
|
||||
a separate filesystem from the data in `cfg`, because while the system
|
||||
@@ -349,8 +409,20 @@ can funtion reasonably well without a persistent `/var`, loosing
|
||||
If `var` is not available, Infix will still persist `/var/lib` using
|
||||
`cfg` as the backing storage.
|
||||
|
||||
[^1]: See [Upgrading procedures and boot
|
||||
order](system.md#upgrade-procedures-and-boot-order) for
|
||||
information on upgrading via CLI.
|
||||
[^1]: See [Upgrade & Boot Order](upgrade.md) for more information.
|
||||
[^2]: YANG is a modeling language from IETF, replacing that used for
|
||||
SNMP (MIB), used to describe the subsystems and properties of
|
||||
the system.
|
||||
[^3]: Return Merchandise Authorization (RMA), i.e., broken beyond repair
|
||||
by end-user and eligible for return to manufacturer.
|
||||
[^4]: Customer specific builds can define their own `failure-config`.
|
||||
It may be the same as `factory-config`, with the hostname set to
|
||||
`failure`, or a dedicated configuration that isolates interfaces, or
|
||||
even disables ports, to ensure that the device does not cause any
|
||||
security problems on the network. E.g., start forwarding traffic
|
||||
between previously isolated VLANs.
|
||||
|
||||
[2]: netboot.md
|
||||
[2]: netboot.md
|
||||
[FIT]: https://u-boot.readthedocs.io/en/latest/usage/fit.html
|
||||
[RAUC]: https://rauc.io
|
||||
[initrd]: https://docs.kernel.org/admin-guide/initrd.html
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
Branding & Releases
|
||||
===================
|
||||
# Branding & Releases
|
||||
|
||||
This document is for projects using Infix as a br2-external, i.e., OEMs.
|
||||
This document is for projects using Infix as a br2-external, i.e., OEMs
|
||||
that want to create *their own "Spin"* of Infix.
|
||||
|
||||
|
||||
Branding
|
||||
--------
|
||||
## Branding
|
||||
|
||||
Branding is done in menuconfig, there are several settings affecting
|
||||
it, most are in the Infix external subsection called "Branding", but
|
||||
@@ -24,25 +22,18 @@ check this for you and you may end up with odd results.
|
||||
|
||||
Verify the result after a build by inspecting:
|
||||
|
||||
- `output/images/*`: names, missing prefix, etc.
|
||||
- `output/target/etc/os-release`: this file is sourced by
|
||||
other build scripts, e.g., `mkgns3a.sh`. For reference, see
|
||||
https://www.freedesktop.org/software/systemd/man/os-release.html
|
||||
- `output/images/*`: names, missing prefix, etc.
|
||||
- `output/target/etc/os-release`: this file is sourced by other build
|
||||
scripts, e.g., `mkgns3a.sh`. For reference, see [os-release(5)][]
|
||||
|
||||
> **Note:** to get proper GIT revision (hash) from your composed OS,
|
||||
> remember in menuconfig to set `INFIX_OEM_PATH`. When unset the
|
||||
> Infix `post-build.sh` script defaults to the Infix base path. The
|
||||
> revision is stored in the file `/etc/os-release` as BUILD_ID and
|
||||
> is also in the file `/etc/version`. See below for more info.
|
||||
> [!IMPORTANT]
|
||||
> To get a proper GIT revision (hash) from your OS spin, remember to set
|
||||
> in menuconfig `INFIX_OEM_PATH`. When unset, the Infix `post-build.sh`
|
||||
> script defaults to the Infix base path. The revision is stored in the
|
||||
> file `/etc/os-release` as `BUILD_ID`, also in the file `/etc/version`.
|
||||
> See below for more info.
|
||||
|
||||
[^1]: The base MAC address is defined in the device's Vital Product
|
||||
Data (VPD) EEPROM, or similar, which is used by the kernel to
|
||||
create the system interfaces. This MAC address is usually also
|
||||
printed on a label on the device.
|
||||
|
||||
|
||||
Factory & Failure Config
|
||||
------------------------
|
||||
## Factory & Failure Config
|
||||
|
||||
To support booting the same image (CPU architecture) on multiple boards,
|
||||
Infix by default generates the device's initial configuration every time
|
||||
@@ -50,13 +41,12 @@ at boot. This also ensures the device can always be restored to a known
|
||||
state after a factory reset, since the `factory-config` is guaranteed to
|
||||
be compatible with the YANG models for the given software version. (For
|
||||
more information on how the system boots, please see the section [Key
|
||||
Concepts](introduction.md#key-concepts) in the Introduction document.)
|
||||
Concepts](index.md#key-concepts) in the Introduction document.)
|
||||
|
||||
However, for custom builds of Infix it is possible to override this with
|
||||
a single static `/etc/factory-config.cfg` (and failure-config) in your
|
||||
rootfs overlay -- with a [VPD](vpd.md) you can even support several!
|
||||
|
||||
|
||||
### Variables & Format Specifiers
|
||||
|
||||
Parts of the configuration you likely always want to generated, like the
|
||||
@@ -65,22 +55,22 @@ unique (per-device with a VPD) password hash. This section lists the
|
||||
available keywords, see the next section for examples of how to use
|
||||
them:
|
||||
|
||||
- **Default password hash:** `$factory$` (from VPD, .dtb, or built-in)
|
||||
XPath: `/ietf-system:system/authentication/user/password`
|
||||
- **Default SSH and NETCONF hostkey:** `genkey` (regenerated at factory reset)
|
||||
XPath: `/ietf-keystore:keystore/asymmetric-keys/asymmetric-key[name='genkey']`
|
||||
- **Hostname format specifiers:**
|
||||
XPath: `/ietf-system:system/hostname`
|
||||
- **Default password hash:** `$factory$` (from VPD, .dtb, or built-in)
|
||||
XPath: `/ietf-system:system/authentication/user/password`
|
||||
- **Default SSH and NETCONF hostkey:** `genkey` (regenerated at factory reset)
|
||||
XPath: `/ietf-keystore:keystore/asymmetric-keys/asymmetric-key[name='genkey']`
|
||||
- **Hostname format specifiers:**
|
||||
XPath: `/ietf-system:system/hostname`
|
||||
- `%i`: OS ID, from `/etc/os-release`, from Menuconfig branding
|
||||
- `%h`: Default hostname, from `/etc/os-release`, from branding
|
||||
- `%m`: NIC specific part of base MAC, e.g., to `c0-ff-ee`
|
||||
- `%%`: Literal %
|
||||
|
||||
|
||||
### Static Files
|
||||
|
||||
> **Caveat:** maintaining static a factory-config and failure-config may
|
||||
> seem like an obvious choice, but as YANG models evolve (even the IETF
|
||||
> [!CAUTION]
|
||||
> Maintaining a static `factory-config` and `failure-config` may seem
|
||||
> like an obvious choice, but as YANG models evolve (even the IETF
|
||||
> models get upgraded), you may need to upgrade your static files.
|
||||
|
||||
First, for one-off builds (one image per product), the simplest way is
|
||||
@@ -103,9 +93,8 @@ after `00-probe` has run. The lower case version of the string is used.
|
||||
|
||||
I.e., create a rootfs overlay that provides any combination of:
|
||||
|
||||
- `/usr/share/product/<PRODUCT>/etc/factory-config.cfg`
|
||||
- `/usr/share/product/<PRODUCT>/etc/failure-config.cfg`
|
||||
|
||||
- `/usr/share/product/<PRODUCT>/etc/factory-config.cfg`
|
||||
- `/usr/share/product/<PRODUCT>/etc/failure-config.cfg`
|
||||
|
||||
### Dynamically Generated
|
||||
|
||||
@@ -113,14 +102,14 @@ The generated `factory-config` and `failure-config` files consist of
|
||||
both static JSON files and part generated files at runtime for each
|
||||
device. The resulting files are written to the RAM disk in `/run`:
|
||||
|
||||
- `/run/confd/factory-config.gen`
|
||||
- `/run/confd/failure-config.gen`
|
||||
- `/run/confd/factory-config.gen`
|
||||
- `/run/confd/failure-config.gen`
|
||||
|
||||
Provided no custom overrides (see above) have been installed already,
|
||||
these files are then copied to:
|
||||
|
||||
- `/etc/factory-config.cfg`
|
||||
- `/etc/failure-config.cfg`
|
||||
- `/etc/factory-config.cfg`
|
||||
- `/etc/failure-config.cfg`
|
||||
|
||||
... where the bootstrap process expects them to be in the next step.
|
||||
|
||||
@@ -132,29 +121,33 @@ base hostname, set `BR2_TARGET_GENERIC_HOSTNAME` in your defconfig.
|
||||
The static files are installed by Infix `confd` in `/usr/share/confd/`
|
||||
at build time. It contains two subdirectories:
|
||||
|
||||
/usr/share/confd/
|
||||
|- factory.d/
|
||||
| |- 10-foo.json
|
||||
| |- 10-bar.json
|
||||
| `- 10-qux.json
|
||||
`- failure.d/
|
||||
|- 10-xyzzy.json
|
||||
`- 10-garply.json
|
||||
```
|
||||
/usr/share/confd/
|
||||
|- factory.d/
|
||||
| |- 10-foo.json
|
||||
| |- 10-bar.json
|
||||
| `- 10-qux.json
|
||||
`- failure.d/
|
||||
|- 10-xyzzy.json
|
||||
`- 10-garply.json
|
||||
```
|
||||
|
||||
To override, or extend, these files in you br2-external, set up a rootfs
|
||||
overlay and add it last in `BR2_ROOTFS_OVERLAY`. Your overlay can look
|
||||
something like this:
|
||||
|
||||
./board/common/rootfs/
|
||||
|- etc/
|
||||
| |- confdrc # See below
|
||||
| `- confdrc.local
|
||||
`- usr/
|
||||
`- share/
|
||||
`- confd/
|
||||
|- 10-foo.json # Override Infix foo
|
||||
|- 30-bar.json # Extend, probably 10-bar.json
|
||||
`- 30-fred.json # Extend, your own defaults
|
||||
```
|
||||
./board/common/rootfs/
|
||||
|- etc/
|
||||
| |- confdrc # See below
|
||||
| `- confdrc.local
|
||||
`- usr/
|
||||
`- share/
|
||||
`- confd/
|
||||
|- 10-foo.json # Override Infix foo
|
||||
|- 30-bar.json # Extend, probably 10-bar.json
|
||||
`- 30-fred.json # Extend, your own defaults
|
||||
```
|
||||
|
||||
Using the same filename in your overlay, here `10-foo.json`, completely
|
||||
replaces the contents of the same file provided by Infix. If you just
|
||||
@@ -168,17 +161,17 @@ provide a few custom ones that the `bootstrap` knows about, e.g.,
|
||||
`gen-ifs-custom` that overrides `20-interfaces.json`. See the
|
||||
bootstrap script for more help, and up-to-date information.
|
||||
|
||||
> **Note:** you may not need to provide your own `/etc/confdrc`. The
|
||||
> one installed by `confd` is usually enough. However, if you want to
|
||||
> adjust the behavior of `bootstrap` you may want to override it. There
|
||||
> is also `confdrc.local`, which usually is enough to change arguments
|
||||
> to scripts like `gen-interfaces`, e.g., to create a bridge by default,
|
||||
> you may want to look into `GEN_IFACE_OPTS`.
|
||||
|
||||
> [!TIP]
|
||||
> You may not need to provide your own `/etc/confdrc` for your spin.
|
||||
> The one installed by `confd` is usually enough. However, if you want
|
||||
> to adjust the behavior of `bootstrap` you may want to override it.
|
||||
> There is also `confdrc.local`, which usually is enough to change
|
||||
> arguments to scripts like `gen-interfaces`, e.g., to create a bridge
|
||||
> by default, you may want to look into `GEN_IFACE_OPTS`.
|
||||
|
||||
### Example Snippets
|
||||
|
||||
**IETF System:**
|
||||
#### IETF System
|
||||
|
||||
```hsib
|
||||
"ietf-system:system": {
|
||||
@@ -211,15 +204,16 @@ bootstrap script for more help, and up-to-date information.
|
||||
The `motd-banner` is a binary type, which is basically a Base64 encoded
|
||||
text file without line breaks (`-w0`):
|
||||
|
||||
```bash
|
||||
$ echo "Li0tLS0tLS0uCnwgIC4gLiAgfCBJbmZpeCAtLSBhIE5ldHdvcmsgT3BlcmF0aW5nIFN5c3RlbQp8LS4gdiAuLXwgaHR0cHM6Ly9rZXJuZWxraXQuZ2l0aHViLmlvCictJy0tLSctJwo=" |base64 -d
|
||||
```
|
||||
$ echo "Li0tLS0tLS0uCnwgIC4gLiAgfCBJbmZpeCAtLSBhIE5ldHdvcmsgT3BlcmF0aW5nIFN5c3RlbQp8LS4gdiAuLXwgaHR0cHM6Ly9rZXJuZWxraXQuZ2l0aHViLmlvCictJy0tLSctJwo=" \
|
||||
| base64 -d
|
||||
.-------.
|
||||
| . . | Infix OS — Immutable.Friendly.Secure
|
||||
|-. v .-| https://kernelkit.github.io
|
||||
'-'---'-'
|
||||
```
|
||||
|
||||
**IETF Keystore**
|
||||
#### IETF Keystore
|
||||
|
||||
Notice how both the public and private keys are left empty here, this
|
||||
cause them to be always automatically regenerated after each factory reset.
|
||||
@@ -245,7 +239,7 @@ use-case and not documented here.
|
||||
},
|
||||
```
|
||||
|
||||
**IETF NETCONF Server**
|
||||
#### IETF NETCONF Server
|
||||
|
||||
```json
|
||||
"ietf-netconf-server:netconf-server": {
|
||||
@@ -278,7 +272,8 @@ use-case and not documented here.
|
||||
},
|
||||
```
|
||||
|
||||
**Infix Services**
|
||||
#### Infix Services
|
||||
|
||||
```json
|
||||
"infix-services:ssh": {
|
||||
"enabled": true,
|
||||
@@ -300,10 +295,7 @@ use-case and not documented here.
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
Integration
|
||||
-----------
|
||||
## Integration
|
||||
|
||||
When integrating your software stack with Infix there may be protocols
|
||||
that want to change system settings like hostname and dynamically set
|
||||
@@ -330,7 +322,7 @@ root@infix-00-00-00:~# cat hostnm.xml
|
||||
</system>
|
||||
root@infix-00-00-00:~# edit hostnm.xml
|
||||
root@infix-00-00-00:~# sysrepocfg -Ehostnm.xml
|
||||
root@example:~#
|
||||
root@example:~#
|
||||
```
|
||||
|
||||
Second, perform all changes on `running-config`, the running datastore.
|
||||
@@ -344,8 +336,8 @@ activate all.)
|
||||
|
||||
You can consider the system composed of two entities:
|
||||
|
||||
- NETCONF starts up the system using `startup-config`, then
|
||||
- Hands over control to your application at runtime
|
||||
- NETCONF starts up the system using `startup-config`, then
|
||||
- Hands over control to your application at runtime
|
||||
|
||||
Infix is prepared for this by already having two "runlevels" for these
|
||||
two states. The `startup-config` is applied in runlevel S (bootstrap)
|
||||
@@ -353,15 +345,13 @@ and the system then enters runlevel 2 for normal operation.
|
||||
|
||||
This allow you to keep a set of functionality that is provided by the
|
||||
underlying system, and another managed by your application. You can
|
||||
of course in your br2-external provide a sysrepo plugin that block
|
||||
of course in your br2-external provide a sysrepo plugin that block
|
||||
operations on certain datastores when your application is enabled.
|
||||
E.g., to prevent changes to startup after initial deployment. In
|
||||
that case a proper factory reset would be needed to get back to a
|
||||
"pre-deployment" state where you can reconfigure your baseline.
|
||||
|
||||
|
||||
Releases
|
||||
--------
|
||||
## Releases
|
||||
|
||||
A release build requires the global variable `INFIX_RELEASE` to be set.
|
||||
It can be derived from GIT, if the source tree is kept in GIT VCS. First,
|
||||
@@ -371,14 +361,14 @@ let us talk about versioning in general.
|
||||
|
||||
Two popular scheme for versioning a product derived from Infix:
|
||||
|
||||
1. Track Infix major.minor, e.g. *Foobar v23.08.z*, where `z` is
|
||||
your patch level. I.e., Foobar v23.08.0 could be based on Infix
|
||||
v23.08.0, or v23.08.12, it is up to you. Maybe you based it on
|
||||
v23.08.12 and then back ported changes from v23.10.0, but it was
|
||||
the first release you made to your customer(s).
|
||||
2. Start from v1.0.0 and step the major number every time you sync
|
||||
with a new Infix release, or every time Infix bumps to the next
|
||||
Buildroot LTS.
|
||||
1. Track Infix major.minor, e.g. *Foobar v23.08.z*, where `z` is
|
||||
your patch level. I.e., Foobar v23.08.0 could be based on Infix
|
||||
v23.08.0, or v23.08.12, it is up to you. Maybe you based it on
|
||||
v23.08.12 and then back ported changes from v23.10.0, but it was
|
||||
the first release you made to your customer(s).
|
||||
1. Start from v1.0.0 and step the major number every time you sync
|
||||
with a new Infix release, or every time Infix bumps to the next
|
||||
Buildroot LTS.
|
||||
|
||||
The important thing is to be consistent, not only for your own sake,
|
||||
but also for your end customers. The *major.minor.patch* style is
|
||||
@@ -386,10 +376,10 @@ the most common and often recommended style, which usually maps well
|
||||
to other systems, e.g. PROFINET GSDML files require this (*VX.Y.Z*).
|
||||
But you can of course use only two numbers, *major.minor*, as well.
|
||||
|
||||
> [!WARNING]
|
||||
> What could be confusing, however, is if you use the name *Infix*
|
||||
> with your own versioning scheme.
|
||||
|
||||
|
||||
### Specifying Versioning Information
|
||||
|
||||
Two optional environment variables control the version information
|
||||
@@ -416,4 +406,10 @@ generated file names like disk images, etc.
|
||||
|
||||
**Default:** `${INFIX_BUILD_ID}`
|
||||
|
||||
[NanoPi R2S]: https://github.com/kernelkit/infix/blob/main/board/aarch64/r2s/rootfs/etc/factory-config.cfg
|
||||
[^1]: The base MAC address is defined in the device's Vital Product
|
||||
Data (VPD) EEPROM, or similar, which is used by the kernel to
|
||||
create the system interfaces. This MAC address is usually also
|
||||
printed on a label on the device.
|
||||
|
||||
[NanoPi R2S]: https://github.com/kernelkit/infix/blob/main/board/aarch64/r2s/rootfs/etc/factory-config.cfg
|
||||
[os-release(5)]: https://www.freedesktop.org/software/systemd/man/os-release.html
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
Configure Context
|
||||
-----------------
|
||||
# CLI Configure Context
|
||||
|
||||
Enter the configure context from admin-exec by typing `configure`
|
||||
followed by Enter. Available commands, press `?` at the prompt:
|
||||
@@ -41,14 +40,17 @@ admin@host:/config/interface/eth0/> up
|
||||
admin@host:/config/>
|
||||
```
|
||||
|
||||
> **Note:** the tree structure in the configure context is automatically
|
||||
> generated from the system's supported NETCONF YANG models, which may
|
||||
> vary between products. However, the `ietf-interfaces.yang` and
|
||||
> `ietf-ip.yang` models, for instance, that provide basic networking
|
||||
----
|
||||
|
||||
> **Note:** commands in configure context are automatically generated
|
||||
> from the system's YANG models, hence different products likely have a
|
||||
> different set of commands. However, both the `ietf-interfaces.yang`
|
||||
> and `ietf-ip.yang` models, for instance, that provide the networking
|
||||
> support are common to all systems.
|
||||
|
||||
----
|
||||
|
||||
### Set IP Address on an Interface
|
||||
## Set IP Address on an Interface
|
||||
|
||||
```
|
||||
admin@host:/config/> edit interface eth0
|
||||
@@ -73,7 +75,7 @@ interfaces {
|
||||
```
|
||||
|
||||
|
||||
### Saving Changes
|
||||
## Saving Changes
|
||||
|
||||
Apply the changes (from candidate to `running-config`):
|
||||
|
||||
@@ -104,11 +106,14 @@ admin@host:/> copy running-config startup-config
|
||||
The `startup-config` can also be inspected with the `show` command to
|
||||
verify the changes are saved.
|
||||
|
||||
> **Note:** most (all) commands need to be spelled out, no short forms
|
||||
> are allowed at the moment. Use the `TAB` key to make this easier.
|
||||
----
|
||||
|
||||
> **Note:** all commands need to be spelled out, no short forms are
|
||||
> allowed in the CLI. Use the `TAB` key to make your life easier.
|
||||
|
||||
### Changing Hostname
|
||||
----
|
||||
|
||||
## Changing Hostname
|
||||
|
||||
Settings like hostname are located in the `ietf-system.yang` model.
|
||||
Here is how it can be set.
|
||||
@@ -123,11 +128,14 @@ admin@example:/>
|
||||
Notice how the hostname in the prompt does not change until the change
|
||||
is committed.
|
||||
|
||||
----
|
||||
|
||||
> **Note:** critical services like syslog, mDNS, LLDP, and similar that
|
||||
> advertise the hostname, are restarted when the hostname is changed.
|
||||
|
||||
----
|
||||
|
||||
### Changing Password
|
||||
## Changing Password
|
||||
|
||||
User management, including passwords, is also a part of `ietf-system`.
|
||||
|
||||
@@ -149,12 +157,15 @@ the `do password encrypt` command. This launches the admin-exec command
|
||||
to hash, and optionally salt, your password. This encrypted string can
|
||||
then be used with `set password ...`.
|
||||
|
||||
----
|
||||
|
||||
> **Tip:** if you are having trouble thinking of a password, there is
|
||||
> also `do password generate`, which generates random but readable
|
||||
> strings using the UNIX command `pwgen`.
|
||||
|
||||
----
|
||||
|
||||
### SSH Authorized Key
|
||||
## SSH Authorized Key
|
||||
|
||||
Logging in remotely with SSH is possible by adding a *public key* to a
|
||||
user. Here we add the authorized key to the admin user, multiple keys
|
||||
@@ -174,11 +185,15 @@ key-data AAAAB3NzaC1yc2EAAAADAQABAAABgQC8iBL42yeMBioFay7lty1C4ZDTHcHyo739gc91rTT
|
||||
admin@host:/config/system/authentication/user/admin/authorized-key/example@host/> leave
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
> **Note:** the `ssh-keygen` program already base64 encodes the public
|
||||
> key data, so there is no need to use the `text-editor` command, `set`
|
||||
> does the job.
|
||||
|
||||
### Creating a VETH Pair
|
||||
----
|
||||
|
||||
## Creating a VETH Pair
|
||||
|
||||
The following example creates a `veth0a <--> veth0b` virtual Ethernet
|
||||
pair which is useful for connecting, e.g., a container to the physical
|
||||
@@ -214,12 +229,15 @@ admin@host:/config/> leave
|
||||
|
||||
See the bridging example below for more.
|
||||
|
||||
----
|
||||
|
||||
> **Note:** in the CLI you do not have to create the `veth0b` interface.
|
||||
> The system _infers_ this for you. When setting up a VETH pair using
|
||||
> NETCONF, however, you must include the `veth0b` interface.
|
||||
|
||||
----
|
||||
|
||||
### Creating a Bridge
|
||||
## Creating a Bridge
|
||||
|
||||
Building on the previous example, we now create a non-VLAN filtering
|
||||
bridge (`br0`) that forwards any, normally link-local, LLDP traffic
|
||||
@@ -273,6 +291,10 @@ the VETH pair from the previous example) are now bridged. Any traffic
|
||||
ingressing one port will egress the other. Only reserved IEEE multicast
|
||||
is filtered, except LLDP frames as shown above.
|
||||
|
||||
----
|
||||
|
||||
> **Note:** the bridge can be named anything, provided the interface
|
||||
> name is not already taken. However, for any name outside the pattern
|
||||
> `br[0-9]+`, you have to set the interface type manually to `bridge`.
|
||||
|
||||
----
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Introduction
|
||||
# CLI Introduction
|
||||
|
||||
The command line interface (CLI, see-ell-aye) implements a CISCO-like,
|
||||
or Juniper Networks JunOS-like, CLI. It is the traditional way of
|
||||
@@ -10,8 +10,7 @@ Nevertheless, when it comes to initial deployment and debugging, it
|
||||
is very useful to know how to navigate and use the CLI. This very
|
||||
short guide intends to help you with that.
|
||||
|
||||
|
||||
## About
|
||||
----
|
||||
|
||||
New users usually get the CLI as the default "shell" when logging in,
|
||||
but the default `admin` user logs in to `bash`. To access the CLI,
|
||||
@@ -35,9 +34,12 @@ admin@host-12-34-56:/> show # Try: Tab or ?
|
||||
admin@host-12-34-56:/> # Try: Tab or ?
|
||||
```
|
||||
|
||||
> **Tip:** Even on an empty command line you can tap the Tab or ? keys.
|
||||
> See `help keybindings` for more tips!
|
||||
----
|
||||
|
||||
> **Note:** even on an empty command line, you can tap the `Tab` or `?` keys.
|
||||
> See [`help keybindings`](keybindings.md) for more tips!
|
||||
|
||||
----
|
||||
|
||||
## Key Concepts
|
||||
|
||||
@@ -129,10 +131,15 @@ In *configure context* the following commands are available:
|
||||
| `do command` | Call admin-exec command: `do show log` |
|
||||
| `commit` | |
|
||||
|
||||
### Example Session
|
||||
|
||||
> Remember to use the `TAB` and `?` keys to speed up your navigation.
|
||||
> See `help keybindings` for more tips!
|
||||
## Example Session
|
||||
|
||||
----
|
||||
|
||||
> Remember to use the `TAB` and `?` keys to speed up your navigation.
|
||||
> See [`help keybindings`](keybindings.md) for more tips!
|
||||
|
||||
----
|
||||
|
||||
In this example we enter configure context to add an IPv4 address to
|
||||
interface `eth0`, then we apply the changes using the `leave` command.
|
||||
@@ -180,4 +187,3 @@ admin@host-12-34-56:/> copy startup-config running-config
|
||||
```
|
||||
|
||||
Or restarting the device.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Keybindings
|
||||
# CLI Keybindings
|
||||
|
||||
Writing CLI commands by hand is very tedious. To make things easier the
|
||||
CLI has several keybindings, most significant first:
|
||||
@@ -27,10 +27,12 @@ CLI has several keybindings, most significant first:
|
||||
| Ctrl-n | Down arrow | History, next command |
|
||||
| Ctrl-r | | History, reversed interactive search (i-search) |
|
||||
|
||||
> **Note:** the Meta key is called Alt on most modern keyboards. If you
|
||||
> have neither, first tap the Esc key instead of holding down Alt/Meta.
|
||||
## What is Meta?
|
||||
|
||||
## Examples
|
||||
The Meta key is called Alt on most modern keyboards. If you have
|
||||
neither, first tap the Esc key instead of holding down Alt/Meta.
|
||||
|
||||
## Usage
|
||||
|
||||
Complete a word. Start by typing a few characters, then tap the TAB key
|
||||
on your keyboard:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Usage
|
||||
# Network Calculator
|
||||
|
||||
```
|
||||
netcalc <ADDRESS/LEN | NETWORK NETMASK> [split <1-32 | 64-128>]
|
||||
@@ -12,8 +12,8 @@ information about the subnet. Both IPv4 and IPv6 is supported.
|
||||
|
||||
A subnet can be entered in two ways:
|
||||
|
||||
- `192.168.2.0 255.255.255.0`: traditional IPv4 'address netmask' style
|
||||
- `192.168.2.0/24`: modern prefix length, same also for IPv6
|
||||
- `192.168.2.0 255.255.255.0`: traditional IPv4 'address netmask' style
|
||||
- `192.168.2.0/24`: modern prefix length, same also for IPv6
|
||||
|
||||
An optional `split LEN` can be given as argument, the new length value
|
||||
must be bigger than the current prefix length. See example below.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Quick Overview
|
||||
# CLI Quickstart Guide
|
||||
|
||||
The question mark `?` key along with the `Tab` key are your best friends
|
||||
in the command line interface. They provide context help and completion
|
||||
@@ -16,14 +16,17 @@ of commands you input. See the table below for a handful of examples.
|
||||
Explore the following topics for more information. Note, the
|
||||
keybindings are really useful to learn!
|
||||
|
||||
| **Command** | **Description** |
|
||||
|---------------------|--------------------------------------------|
|
||||
| `help introduction` | An introduction to the CLI |
|
||||
| `help configure` | How to use configure context |
|
||||
| `help text-editor` | Help with the built-in text-editor command |
|
||||
| `help keybindings` | Lists keybindings and other helpful tricks |
|
||||
| **Command** | **Description** |
|
||||
|---------------------|----------------------------------------------------|
|
||||
| `help introduction` | An introduction to the CLI |
|
||||
| `help configure` | How to use configure context |
|
||||
| `help text-editor` | Help with the built-in text-editor command |
|
||||
| `help keybindings` | Lists available keybindings & other helpful tricks |
|
||||
|
||||
----
|
||||
|
||||
> In `configure` context the `help setting` command shows the YANG
|
||||
> description text for each node and container. To reach the admin
|
||||
> exec help from configure context, e.g., `do help text-editor`
|
||||
|
||||
----
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Network Traffic Inspection
|
||||
# Network Monitoring
|
||||
|
||||
`tcpdump` is useful tool for analyzing and diagnosing network problems.
|
||||
This document presents the limited feature set that exposed is in the
|
||||
@@ -10,7 +10,7 @@ A section called [Examples](#examples) follows that, which may be what
|
||||
you want to scroll down to.
|
||||
|
||||
|
||||
### Hardware Overview
|
||||
## Hardware Overview
|
||||
|
||||
Using `tcpdump` effectively requires an understanding of how the
|
||||
underlying hardware works. For a standard PC, or common single-board
|
||||
@@ -57,17 +57,21 @@ up the switch core to mirror traffic ingressing and/or egressing a set
|
||||
of ports to another port. On this *monitor port* you can then run your
|
||||
tcpdump, which means you need an external device (laptop).
|
||||
|
||||
----
|
||||
|
||||
> A planned feature is to support mirroring traffic to the CPU port,
|
||||
> which would be an effective way to log and monitor traffic over a
|
||||
> longer period of time. Highly effective for diagnosing intermittent
|
||||
> and other rare network issues.
|
||||
|
||||
----
|
||||
|
||||
If only "proof of life" is required, then sometimes port counters, also
|
||||
called *RMON counters*, can be very useful too. Seeing counters of a
|
||||
particular type increment means traffic is ingressing or egressing.
|
||||
|
||||
|
||||
### Examples
|
||||
## Examples
|
||||
|
||||
Listen to all traffic on an interface:
|
||||
|
||||
|
||||
@@ -44,10 +44,13 @@ C-x i insert C-x g goto-ln C-x o other win C-x C-x swap M-q reform
|
||||
- tap `c`
|
||||
- release `Ctrl`
|
||||
|
||||
----
|
||||
|
||||
> The status field at the bottom asks if you are really sure, and/or if
|
||||
> you want to add a final Enter/newline to the file. For binary content
|
||||
> that final newline may be important.
|
||||
|
||||
----
|
||||
|
||||
## Changing the Editor
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
Upgrading the Software
|
||||
----------------------
|
||||
# Upgrading the System
|
||||
|
||||
The admin-exec command `upgrade` can be used to install software images, or
|
||||
bundles. A bundle is a signed and self-contained package that carries all the
|
||||
@@ -39,12 +38,9 @@ The secondary partition (`rootfs.1`) has now been upgraded and will be used as
|
||||
the *active* partition on the next boot. Leaving the primary partition, with
|
||||
the version we are currently running, intact in case of trouble.
|
||||
|
||||
See [upgrading procedures and boot order][2] for more information on
|
||||
upgrading.
|
||||
See [Upgrade & Boot Order](../upgrade.md) for more information on upgrading.
|
||||
|
||||
[^1]: It is not possible to upgrade the partition we booted from. Thankfully
|
||||
the underlying "rauc" subsystem keeps track of this. Hence, to upgrade
|
||||
both partitions you must reboot to the new version (to verify it works)
|
||||
and then repeat the same command.
|
||||
|
||||
[2]: ../system.md#upgrade-procedures-and-boot-order
|
||||
|
||||
@@ -1,31 +1,7 @@
|
||||
Containers in Infix
|
||||
===================
|
||||
<img align="right" src="img/docker.webp" alt="Docker whale" width=360>
|
||||
Docker Container Support
|
||||
========================
|
||||
|
||||
* [Introduction](#introduction)
|
||||
* [Caution](#caution)
|
||||
* [Getting Started](#getting-started)
|
||||
* [Examples](#examples)
|
||||
* [Container Images](#container-images)
|
||||
* [Upgrading a Container Image](#upgrading-a-container-image)
|
||||
* [Networking and Containers](#networking-and-containers)
|
||||
* [Container Bridge](#container-bridge)
|
||||
* [Container Host Interface](#container-host-interface)
|
||||
* [Host Networking](#host-networking)
|
||||
* [Mounts and Volumes](#mounts-and-volumes)
|
||||
* [Content Mounts](#content-mounts)
|
||||
* [Example Containers](#example-containers)
|
||||
* [System Container](#system-container)
|
||||
* [Application Container: nftables](#application-container-nftables)
|
||||
* [Application Container: ntpd](#application-container-ntpd)
|
||||
* [Advanced](#advanced)
|
||||
* [Running Host Commands From Container](#running-host-commands-from-container)
|
||||
* [Container Requirements](#container-requirements)
|
||||
* [Advanced Users](#advanced-users)
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
{ align=right width="360" }
|
||||
|
||||
Infix comes with native support for Docker containers using [podman][].
|
||||
The [YANG model][1] describes the current level of support, complete
|
||||
@@ -110,10 +86,9 @@ your container image and application to run.
|
||||
> support the CPU architecture of your host system. Remember, unlike
|
||||
> virtualization, containers reuse the host's CPU and kernel.
|
||||
|
||||
{ align=right width="200" }
|
||||
|
||||
<img align="right" src="img/docker-hello-world.svg" alt="Hello World" width=360>
|
||||
|
||||
### Examples
|
||||
### Example: Hello World
|
||||
|
||||
Classic Hello World:
|
||||
|
||||
@@ -129,6 +104,8 @@ Classic Hello World:
|
||||
Hello from Docker!
|
||||
This message shows that your installation appears to be working correctly.
|
||||
|
||||
### Example: Web Server
|
||||
|
||||
A web server with [nginx][], using standard docker bridge. Podman will
|
||||
automatically create a VETH pair for us, connecting the container to the
|
||||
`docker0` bridge:
|
||||
@@ -279,7 +256,7 @@ archive, which helps greatly with container upgrades (see below):
|
||||
|
||||
Upgrading a Container Image
|
||||
---------------------------
|
||||
<img align="right" src="img/shield-checkmark.svg" alt="Hello World" width=100>
|
||||
{ align=right width="100" }
|
||||
|
||||
The applications in your container are an active part of the system as a
|
||||
whole, so make it a routine to keep your container images up-to-date!
|
||||
|
||||
@@ -14,6 +14,9 @@ the Buildroot `make menuconfig` system.
|
||||
-> System configuration
|
||||
-> [*]Enable root login with password
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Please see the [Contributing](#contributing) section, below, for
|
||||
> details on how to fork and clone when contributing to Infix.
|
||||
|
||||
Cloning
|
||||
-------
|
||||
@@ -25,14 +28,12 @@ tree to your PC:
|
||||
```bash
|
||||
$ mkdir ~/Projects; cd ~/Projects
|
||||
$ git clone https://github.com/kernelkit/infix.git
|
||||
..
|
||||
$ cd infix/
|
||||
$ git submodule update --init
|
||||
..
|
||||
```
|
||||
|
||||
> Please see the [Contributing](#contributing) section, below, for
|
||||
> details on how to fork and clone when contributing to Infix.
|
||||
|
||||
|
||||
### Customer Builds
|
||||
|
||||
Customer builds add product specific device trees, more OSS packages,
|
||||
@@ -57,6 +58,10 @@ Other caveats should be documented in the customer specific trees.
|
||||
Building
|
||||
--------
|
||||
|
||||
> [!TIP]
|
||||
> For more details, see the Getting Started and System Requirements
|
||||
> sections of the [excellent Buildroot manual][1].
|
||||
|
||||
Buildroot is almost stand-alone, it needs a few locally installed tools
|
||||
to bootstrap itself. The most common ones are usually part of the base
|
||||
install of the OS, but specific ones for building need the following.
|
||||
@@ -67,12 +72,10 @@ $ sudo apt install bc binutils build-essential bzip2 cpio \
|
||||
diffutils file findutils git gzip \
|
||||
libncurses-dev libssl-dev perl patch \
|
||||
python3 rsync sed tar unzip wget \
|
||||
autopoint bison flex autoconf automake
|
||||
autopoint bison flex autoconf automake \
|
||||
mtools
|
||||
```
|
||||
|
||||
> For details, see the Getting Started and System Requirements sections
|
||||
> of the [excellent manual][1].
|
||||
|
||||
To build an Infix image; select the target and then make:
|
||||
|
||||
make x86_64_defconfig
|
||||
@@ -95,12 +98,43 @@ and services are required on your system:
|
||||
```bash
|
||||
$ sudo apt install jq graphviz qemu-system-x86 qemu-system-arm \
|
||||
ethtool gdb-multiarch tcpdump tshark
|
||||
..
|
||||
```
|
||||
|
||||
To be able to build the test specification you also need:
|
||||
|
||||
```bash
|
||||
$ sudo apt-get install python3-graphviz ruby-asciidoctor-pdf
|
||||
..
|
||||
```
|
||||
|
||||
### Documentation
|
||||
|
||||
The documentation is written in Markdown, with GitHub extensions, and
|
||||
published using [MkDocs, material theme][11]. This means some features
|
||||
require MkDocs *hinting* which may not render fully when previewing on
|
||||
GitHub -- this is OK.
|
||||
|
||||
MkDocs is packaged and available to install via `apt`, but not all of
|
||||
the plugins and extensions we rely on are available, so instead we do
|
||||
recommend using `pipx` to install the necessary tooling:
|
||||
|
||||
```bash
|
||||
$ sudo apt install pipx
|
||||
$ pipx install mkdocs
|
||||
$ pipx inject mkdocs mkdocs-material pymdown-extensions mkdocs-callouts mike mkdocs-to-pdf
|
||||
```
|
||||
|
||||
The last two packages, `mike` and `mkdocs-to-pdf`, are used for online
|
||||
versioning and PDF generation by GitHub Actions, but since they are in
|
||||
the `mkdocs.yml` file, everyone who wants to preview the documentation
|
||||
have to install all the tooling.
|
||||
|
||||
Preview with:
|
||||
|
||||
```
|
||||
$ cd ~/src/infix/
|
||||
$ mkdocs serve
|
||||
```
|
||||
|
||||
|
||||
@@ -132,6 +166,14 @@ on Buildroot to finalize the target filesystem and generate the images.
|
||||
The final `run` argument is explained below.
|
||||
|
||||
|
||||
### YANG Model
|
||||
|
||||
When making changes to the `confd` and `statd` services, you will often
|
||||
need to update the YANG models. If you are adding a new YANG module,
|
||||
it's best to follow the structure of an existing one. However, before
|
||||
making any changes, **always discuss them with the Infix core team**.
|
||||
This helps avoid issues later in development and makes pull request
|
||||
reviews smoother.
|
||||
|
||||
### `confd`
|
||||
|
||||
@@ -211,174 +253,156 @@ To replay:
|
||||
This is especially useful when working in isolated environments or debugging
|
||||
issues without direct access to the DUT.
|
||||
|
||||
### Upgrading Packages
|
||||
|
||||
#### Buildroot
|
||||
## Upgrading Packages
|
||||
|
||||
Kernelkit maintains an internal [fork of
|
||||
Buildroot](https://github.com/kernelkit/buildroot), with branches
|
||||
following the naming scheme `YYYY.MM.patch-kkit`
|
||||
### Buildroot
|
||||
|
||||
The Kernelkit team maintains an internal [fork of Buildroot][9], with
|
||||
branches following the naming scheme `YYYY.MM.patch-kkit`
|
||||
e.g. `2025.02.1-kkit`, which means a new branch should be created
|
||||
whenever Buildroot is updated. These branches should contain **only**
|
||||
changes to existing packages (but no new patches), modifications to
|
||||
Buildroot itself or upstream backports.
|
||||
|
||||
KernelKit track the latest Buildroot LTS (Long-Term Support) release
|
||||
and updates. The upgrade of LTS minor releases is expected to have low
|
||||
impact and should be done as soon there is a patch release of
|
||||
Buildroot LTS is available.
|
||||
The team tracks the latest Buildroot LTS (Long-Term Support) release and
|
||||
updates. The impact of minor LTS release upgrades is expected to have a
|
||||
very low impact and should be done as soon there is a patch release of a
|
||||
Buildroot LTS available.
|
||||
|
||||
> **Depending on your setup, follow the appropriate steps below.**
|
||||
|
||||
🔁 If you **already have** the Buildroot repo locally
|
||||
#### Repo locally cloned already
|
||||
|
||||
1. Navigate to the Buildroot directory
|
||||
```bash
|
||||
$ cd buildroot
|
||||
```
|
||||
2. Pull the latest changes from KernelKit
|
||||
```bash
|
||||
$ git pull
|
||||
```
|
||||
3. Fetch the latest tags from upstream
|
||||
```bash
|
||||
$ git fetch upstream --tags
|
||||
```
|
||||
|
||||
cd buildroot/
|
||||
|
||||
🆕 If you don't have the repo locally
|
||||
1. Pull the latest changes from KernelKit
|
||||
|
||||
git pull
|
||||
|
||||
1. Fetch the latest tags from upstream
|
||||
|
||||
git fetch upstream --tags
|
||||
|
||||
#### No local repo yet
|
||||
|
||||
1. Clone the Kernelkit Buildroot repository
|
||||
```bash
|
||||
$ git clone git@github.com:kernelkit/buildroot.git
|
||||
```
|
||||
|
||||
2. Add the upstream remote
|
||||
```bash
|
||||
$ git remote add upstream https://gitlab.com/buildroot.org/buildroot.git
|
||||
```
|
||||
3. Checkout old KernelKit branch
|
||||
```bash
|
||||
$ git checkout 2025.02.1-kkit
|
||||
```
|
||||
git clone git@github.com:kernelkit/buildroot.git
|
||||
|
||||
1. Add the upstream remote
|
||||
|
||||
git remote add upstream https://gitlab.com/buildroot.org/buildroot.git
|
||||
|
||||
1. Checkout old KernelKit branch
|
||||
|
||||
git checkout 2025.02.1-kkit
|
||||
|
||||
> [!NOTE]
|
||||
> Below, it is **not** allowed to rebase the branch when bumped in Infix.
|
||||
|
||||
#### Continue Here
|
||||
|
||||
1. Create a new branch based on the **previous** KernelKit Buildroot
|
||||
release (e.g. `2025.02.1-kkit`) and name it according to the naming
|
||||
scheme (e.g. `2025.02.2-kkit`)
|
||||
|
||||
git checkout -b 2025.02.2-kkit
|
||||
|
||||
1. Rebase the new branch onto the corresponding upstream release
|
||||
|
||||
git rebase 2025.02.2
|
||||
|
||||
1. Push the new branch and tags
|
||||
|
||||
git push origin 2025.02.2-kkit --tags
|
||||
|
||||
1. In Infix, checkout new branch of Buildroot
|
||||
|
||||
cd buildroot
|
||||
git fetch
|
||||
git checkout 2025.02.2-kkit
|
||||
|
||||
1. Commit and push the changes. *Remember to update the ChangeLog!*
|
||||
|
||||
1. Create a pull request.
|
||||
|
||||
> [!NOTE]
|
||||
> Remember to set the pull request label to `ci:main` to ensure full CI
|
||||
> coverage.
|
||||
|
||||
|
||||
🛠 Continue from here (applies to both cases):
|
||||
### Linux kernel
|
||||
|
||||
4. Create a new branch based on the **previous** KernelKit Buildroot
|
||||
release (e.g. `2025.02.1-kkit`) and name it according to the naming scheme (e.g. `2025.02.2-kkit`)
|
||||
```bash
|
||||
$ git checkout -b 2025.02.2-kkit
|
||||
```
|
||||
5. Rebase the new branch onto the corresponding upstream release
|
||||
```bash
|
||||
$ git rebase 2025.02.2
|
||||
```
|
||||
> [!NOTE] It is **not** allowed to rebase the branch when bumped in Infix.
|
||||
The KernelKit team maintains an internal [fork of Linux kernel][10],
|
||||
with branches following the naming scheme `kkit-linux-[version].y`,
|
||||
e.g. `kkit-6.12.y`, which means a new branch should be created whenever
|
||||
the major kernel version is updated. This branch should contain *all*
|
||||
kernel patches used by Infix.
|
||||
|
||||
6. Push the new branch and tags
|
||||
```bash
|
||||
$ git push origin 2025.02.2-kkit --tags
|
||||
```
|
||||
7. In Infix, checkout new branch of Buildroot
|
||||
```bash
|
||||
$ cd buildroot
|
||||
$ git fetch
|
||||
$ git checkout 2025.02.2-kkit
|
||||
```
|
||||
8. Push changes
|
||||
Commit and push the changes. Don’t forget to update the changelog.
|
||||
The team tracks the latest Linux kernel LTS (Long-Term Support) release
|
||||
and updates. The upgrade of LTS minor releases is expected to have low
|
||||
impact and should be done as soon as a patch release of the LTS Linux
|
||||
kernel is available.
|
||||
|
||||
9. Create a pull request.
|
||||
|
||||
> [!NOTE] Remember to set the pull request label to `ci:main` to ensure full CI coverage.
|
||||
|
||||
|
||||
#### Linux kernel
|
||||
|
||||
KernelKit maintains an internal [fork of Linux
|
||||
kernel](https://github.com/kernelkit/linux), with branches following
|
||||
the naming scheme `kkit-linux-[version].y`, e.g. `kkit-6.12.y`, which
|
||||
means a new branch should be created whenever the major kernel version
|
||||
is updated. This branch should contain *all* kernel patches used by
|
||||
Infix.
|
||||
|
||||
KernelKit track the latest Linux kernel LTS (Long-Term Support)
|
||||
release and updates. The upgrade of LTS minor releases is expected to
|
||||
have low impact and should be done as soon as a patch release of the
|
||||
LTS Linux kernel is available.
|
||||
|
||||
|
||||
🔁 If you **already have** the Linux kernel repo locally
|
||||
#### Repo locally cloned already
|
||||
|
||||
1. Navigate to the Linux kernel directory
|
||||
```bash
|
||||
$ cd linux
|
||||
```
|
||||
2. Get latest changes from KernelKit
|
||||
```bash
|
||||
$ git pull
|
||||
```
|
||||
3. Fetch the latest tags from upstream
|
||||
```bash
|
||||
$ git fetch upstream --tags
|
||||
```
|
||||
|
||||
🆕 If you don't have the repo locally
|
||||
cd linux
|
||||
|
||||
1. Get latest changes from KernelKit
|
||||
|
||||
git pull
|
||||
|
||||
1. Fetch the latest tags from upstream
|
||||
|
||||
git fetch upstream --tags
|
||||
|
||||
#### No local repo yet
|
||||
|
||||
1. Clone the KernelKit Linux kernel repository
|
||||
```bash
|
||||
$ git clone git@github.com:kernelkit/linux.git
|
||||
```
|
||||
2. Add the upstream remote
|
||||
```bash
|
||||
$ git remote add upstream git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
|
||||
```
|
||||
|
||||
3. Checkout correct kernel branch
|
||||
```bash
|
||||
$ git checkout kkit-linux-6.12.y
|
||||
```
|
||||
git clone git@github.com:kernelkit/linux.git
|
||||
|
||||
🛠 Continue from here (applies to both cases)
|
||||
1. Add the upstream remote
|
||||
|
||||
git remote add upstream git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
|
||||
|
||||
4. Rebase on the upstream release
|
||||
```bash
|
||||
$ git rebase v6.12.29
|
||||
```
|
||||
1. Checkout correct kernel branch
|
||||
|
||||
6. Push changes and the tags
|
||||
```bash
|
||||
git checkout kkit-linux-6.12.y
|
||||
|
||||
$ git push -f origin kkit-linux-6.12.y --tags
|
||||
```
|
||||
#### Continue Here
|
||||
|
||||
**Move to your infix directory**
|
||||
1. Rebase on the upstream release
|
||||
|
||||
7. Generate patches
|
||||
```bash
|
||||
$ make x86_64_defconfig
|
||||
$ cd output
|
||||
$ ../utils/kernel-refresh.sh -k /path/to/linux -o 6.12.28 -t v6.12.29
|
||||
```
|
||||
> [!NOTE] See help of `kernel-refresh.sh` script for more information
|
||||
git rebase v6.12.29
|
||||
|
||||
1. Push changes and the tags
|
||||
|
||||
git push -f origin kkit-linux-6.12.y --tags
|
||||
|
||||
8. Push changes
|
||||
Commit and push the changes. Don’t forget to update the s:changelog:doc/ChangeLog.md.
|
||||
**Move to your Infix source tree**
|
||||
|
||||
9. Create a pull request.
|
||||
> [!NOTE] Remember to set the pull request label to `ci:main` to ensure full CI coverage.
|
||||
> [!NOTE]
|
||||
> See help of `kernel-refresh.sh` script for more information.
|
||||
|
||||
1. Generate patches
|
||||
|
||||
### Agree on YANG Model
|
||||
make x86_64_defconfig
|
||||
cd output
|
||||
../utils/kernel-refresh.sh -k /path/to/linux -o 6.12.28 -t v6.12.29
|
||||
|
||||
1. Commit and push the changes. Remember to update the ChangeLog
|
||||
1. Create a pull request
|
||||
|
||||
> [!NOTE]
|
||||
> Remember to set the pull request label to `ci:main` to ensure full CI
|
||||
> coverage.
|
||||
|
||||
When making changes to the `confd` and `statd` services, you will often need to update
|
||||
the YANG models. If you are adding a new YANG module, it's best to follow the
|
||||
structure of an existing one. However, before making any changes, **always discuss
|
||||
them with the Infix core team**. This helps avoid issues later in development and
|
||||
makes pull request reviews smoother.
|
||||
|
||||
|
||||
Testing
|
||||
@@ -392,8 +416,8 @@ work is done -- **much quicker** change-load-test cycles.
|
||||
|
||||
The Infix automated test suite is built around Qemu and [Qeneth][2], see:
|
||||
|
||||
* [Testing](testing.md)
|
||||
* [Docker Image](../test/docker/README.md)
|
||||
* [Regression Testing with Infamy](testing.md)
|
||||
* [Docker Image](https://github.com/kernelkit/infix/blob/main/test/docker/README.md)
|
||||
|
||||
With any new feature added to Infix, it is essential to include relevant
|
||||
test case(s). See the [Test Development](testing.md#test-development)
|
||||
@@ -403,14 +427,13 @@ section for guidance on adding test cases.
|
||||
Reviewing
|
||||
---------
|
||||
|
||||
While reviewing a pull request, you might find yourself wanting to
|
||||
play around with a VM running that _exact_ version. For such
|
||||
occations, [gh-dl-artifact.sh](../utils/gh-dl-artifact.sh) is your
|
||||
friend in need! It will use the [GitHub CLI
|
||||
(gh)](https://cli.github.com) to locate a prebuilt image from our CI
|
||||
While reviewing a pull request, you might find yourself wanting to play
|
||||
around with a VM running that _exact_ version. For such occasions,
|
||||
[gh-dl-artifact.sh][8] is your friend in need! It employs the [GitHub
|
||||
CLI (gh)](https://cli.github.com) to locate a prebuilt image from our CI
|
||||
workflow, download it, and prepare a local output directory from which
|
||||
you can launch both `make run` instances, and run regression tests
|
||||
with `make test` and friends.
|
||||
you can launch both `make run` instances, and run regression tests with
|
||||
`make test` and friends.
|
||||
|
||||
For example, if you are curious about how PR 666 behaves in some
|
||||
particular situation, you can use `gh` to switch to that branch, from
|
||||
@@ -422,10 +445,10 @@ corresponding image for execution with our normal tooling:
|
||||
cd x-artifact-a1b2c3d4-x86_64
|
||||
make run
|
||||
|
||||
> **Note:** CI artifacts are built from a merge commit of the source
|
||||
> and target branches. Therefore, the version in the Infix banner
|
||||
> will not match the SHA of the commit you have checked out.
|
||||
|
||||
> [!NOTE]
|
||||
> CI artifacts are built from a merge commit of the source and target
|
||||
> branches. Therefore, the version in the Infix banner will not match
|
||||
> the SHA of the commit you have checked out.
|
||||
|
||||
Contributing
|
||||
------------
|
||||
@@ -437,28 +460,32 @@ fork, and then use GitHub to create a *Pull Reqeuest*.
|
||||
For this to work as *painlessly as possible* for everyone involved:
|
||||
|
||||
1. Fork Infix to your own user or organization[^1]
|
||||
2. Fork all the Infix submodules, e.g., `kernelkit/buildroot` to your
|
||||
1. Fork all the Infix submodules, e.g., `kernelkit/buildroot` to your
|
||||
own user or organization as well
|
||||
3. Clone your fork of Infix to your laptop/workstation
|
||||
4. [Deactivate the Actions][6] you don't want in your fork
|
||||
5. Please read the [Contributing Guidelines][5] as well!
|
||||
1. Clone your fork of Infix to your laptop/workstation
|
||||
1. [Deactivate the Actions][6] you don't want in your fork
|
||||
1. Please read the [Contributing Guidelines][5] as well!
|
||||
|
||||
```bash
|
||||
$ cd ~/Projects
|
||||
$ git clone https://github.com/YOUR_USER_NAME/infix.git
|
||||
...
|
||||
$ cd infix/
|
||||
$ git submodule update --init
|
||||
...
|
||||
```
|
||||
> **Note:** when updating/synchronizing with upstream Infix changes you
|
||||
> may have to synchronize your forks as well. GitHub have a `Sync fork`
|
||||
> button in the GUI for your fork for this purpose. A cronjob on your
|
||||
> server of choice can do this for you with the [GitHub CLI tool][7].
|
||||
|
||||
> [!NOTE]
|
||||
> When updating/synchronizing with upstream Infix changes you may have
|
||||
> to synchronize your forks as well. GitHub have a `Sync fork` button
|
||||
> in the GUI for your fork for this purpose. A cronjob on your server
|
||||
> of choice can do this for you with the [GitHub CLI tool][7].
|
||||
|
||||
[^1]: Organizations should make sure to lock the `main` (or `master`)
|
||||
branch of their clones to ensure members do not accidentally merge
|
||||
changes there. Keeping these branches in sync with upstream Infix
|
||||
is highly recommended as a baseline and reference. For integration
|
||||
of local changes another company-specific branch can be used instead.
|
||||
of local changes another company-specific branch can be used instead.
|
||||
|
||||
[0]: https://github.com/kernelkit/infix/releases
|
||||
[1]: https://buildroot.org/downloads/manual/manual.html
|
||||
@@ -468,3 +495,7 @@ $ git submodule update --init
|
||||
[5]: https://github.com/kernelkit/infix/blob/main/.github/CONTRIBUTING.md
|
||||
[6]: https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/disabling-and-enabling-a-workflow
|
||||
[7]: https://cli.github.com/
|
||||
[8]: https://github.com/kernelkit/infix/blob/main/utils/gh-dl-artifact.sh
|
||||
[9]: https://github.com/kernelkit/buildroot
|
||||
[10]: https://github.com/kernelkit/linux
|
||||
[11]: https://squidfunk.github.io/mkdocs-material/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Discover Devices
|
||||
# Device Discovery
|
||||
|
||||
Infix advertises itself via the [mDNS-SD](#mdns-sd) and [LLDP](#lldp)
|
||||
discovery protocols. mDNS-SD has good client support in Windows, macOS
|
||||
@@ -8,9 +8,9 @@ An even simpler method is available when directly attached to an Infix
|
||||
device:
|
||||
|
||||
```
|
||||
.----. Ethernet .-------.
|
||||
| PC +---------------------+ Infix |
|
||||
'----' if1 e1 '-------'
|
||||
.----. Ethernet .--------.
|
||||
| PC +---------------------+ Device |
|
||||
'----' if1 e1 '--------'
|
||||
```
|
||||
|
||||
With IPv6 you can *ping the all-hosts* address (ff02::1), the device's
|
||||
|
||||
@@ -1,41 +1,19 @@
|
||||
# YANG to Ethtool Mapping
|
||||
# RMON Counters
|
||||
|
||||
This column contains the mapping between YANG and Linux / Ethtool counters.
|
||||
This document show the mapping between YANG and Linux / Ethtool counters.
|
||||
|
||||
```
|
||||
┌─────────────────────────────────┬──────────────────────────────────┐
|
||||
│ YANG │ Linux / Ethtool │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ in-total-octets │ FramesReceivedOK, │
|
||||
│ │ FrameCheckSequenceErrors │
|
||||
│ │ FramesLostDueToIntMACRcvError │
|
||||
│ │ AlignmentErrors │
|
||||
│ │ etherStatsOversizePkts │
|
||||
│ │ etherStatsJabbers │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ in-frames │ FramesReceivedOK │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ in-multicast-frames │ MulticastFramesReceivedOK │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ in-broadcast-frames │ BroadcastFramesReceivedOK │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ in-error-fcs-frames │ FrameCheckSequenceErrors │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ in-error-undersize-frames │ undersize_pkts │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
| in-error-oversize-frames | etherStatsJabbers, |
|
||||
| | etherStatsOversizePkts |
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ in-error-mac-internal-frames │ FramesLostDueToIntMACRcvError │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ out-frames │ FramesTransmittedOK │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ out-multicast-frames │ MulticastFramesXmittedOK │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ out-broadcast-frames │ BroadcastFramesXmittedOK │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ infix-eth:out-good-octets │ OctetsTransmittedOK │
|
||||
├─────────────────────────────────┼──────────────────────────────────┤
|
||||
│ infix-eth:in-good-octets │ OctetsReceivedOK │
|
||||
└─────────────────────────────────┴──────────────────────────────────┘
|
||||
```
|
||||
| **YANG** | **Linux / Ethtool** |
|
||||
|--------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `in-total-octets` | `FramesReceivedOK`, `FrameCheckSequenceErrors`, `FramesLostDueToIntMACRcvError`, `AlignmentErrors`, `etherStatsOversizePkts`, `etherStatsJabbers` |
|
||||
| `in-frames` | `FramesReceivedOK` |
|
||||
| `in-multicast-frames` | `MulticastFramesReceivedOK` |
|
||||
| `in-broadcast-frames` | `BroadcastFramesReceivedOK` |
|
||||
| `in-error-fcs-frames` | `FrameCheckSequenceErrors` |
|
||||
| `in-error-undersize-frames` | `undersize_pkts` |
|
||||
| `in-error-oversize-frames` | `etherStatsJabbers`, `etherStatsOversizePkts` |
|
||||
| `in-error-mac-internal-frames` | `FramesLostDueToIntMACRcvError` |
|
||||
| `out-frames` | `FramesTransmittedOK` |
|
||||
| `out-multicast-frames` | `MulticastFramesXmittedOK` |
|
||||
| `out-broadcast-frames` | `BroadcastFramesXmittedOK` |
|
||||
| `infix-eth:out-good-octets` | `OctetsTransmittedOK` |
|
||||
| `infix-eth:in-good-octets` | `OctetsReceivedOK` |
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
.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;
|
||||
}
|
||||
@@ -51,9 +51,10 @@ Linux to use.
|
||||
|
||||
### Configure USB port
|
||||
|
||||
> **Note:** You can only configure USB ports known to the system. See
|
||||
> `show hardware` in admin-exec context. (Use `do` prefix in configure
|
||||
> context.)
|
||||
> [!NOTE]
|
||||
> You can only configure USB ports known to the system. See the CLI
|
||||
> command `show hardware` in admin-exec context. (Use `do` prefix in
|
||||
> configure context.)
|
||||
|
||||
```
|
||||
admin@example:/> configure
|
||||
@@ -84,5 +85,4 @@ cached data to disk before returning the prompt:
|
||||
admin@example:~$ sudo umount /media/log
|
||||
```
|
||||
|
||||
|
||||
[1]: https://www.rfc-editor.org/rfc/rfc8348.html
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
# Introduction
|
||||
|
||||
{ align=right width="480" }
|
||||
|
||||
Welcome to Infix, your immutable, friendly, and secure operating system!
|
||||
On these pages you can find both user and developer documentation.
|
||||
|
||||
Most topics on configuring the system include CLI examples, but every
|
||||
setting, as well as status read-back from the operational datastore, is
|
||||
also possible to perform using NETCONF or RESTCONF. In fact, the Infix
|
||||
regression test system solely relies on NETCONF and RESTCONF.
|
||||
|
||||
> [!TIP]
|
||||
> The CLI documentation is also available from inside the CLI itself
|
||||
> using the `help` command in admin-exec mode.
|
||||
|
||||
This document provides an introduction of key concepts, details how
|
||||
the system boots, including failure modes, and provides links to
|
||||
other documents for further study.
|
||||
|
||||
## Command Line Interface
|
||||
|
||||
The command line interface (CLI, see-ell-i) is the traditional way of
|
||||
interacting with single network equipment like switches and routers.
|
||||
Today users have come to expect more advanced graphical GUIs, like a web
|
||||
interface, to manage a device or NETCONF-based tools that allow for
|
||||
managing entire fleets of installed equipment.
|
||||
|
||||
Nevertheless, when it comes to initial deployment and debugging, it
|
||||
is very useful to know how to navigate and use the CLI.
|
||||
|
||||
> [!INFO]
|
||||
> For more information, see the [CLI Introduction](cli/introduction.md)
|
||||
> and the [CLI Configuration Tutorial](cli/configure.md).
|
||||
|
||||
## Key Concepts
|
||||
|
||||
The two modes in the CLI are the admin-exec and the configure context.
|
||||
|
||||
However, when logging in to the system, from the console port or SSH,
|
||||
you land in a standard UNIX shell, Bash. This is for advanced users
|
||||
and remote scripting purposes (production equipment):
|
||||
|
||||
```
|
||||
Run the command 'cli' for interactive OAM
|
||||
|
||||
admin@example:~$
|
||||
```
|
||||
|
||||
To enter the CLI, follow the instructions, for interactive Operations,
|
||||
Administration, and Management (OAM), type:
|
||||
|
||||
```
|
||||
admin@example:~$ cli
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
The prompt, constructed from your username and the device's hostname,
|
||||
changes slightly. You are now in the admin-exec context of the CLI.
|
||||
Here you can inspect system status and do operations to debug networking
|
||||
issues, e.g. ping. You can also enter configure context by typing:
|
||||
`configure` followed by commands to `set`, `edit`, apply changes using
|
||||
`leave`, or `abort` and return to admin-exec.
|
||||
|
||||
> [!TIP]
|
||||
> If you haven't already, the [CLI Introduction](cli/introduction.md)
|
||||
> would be useful to skim through at this point.
|
||||
|
||||
## Datastores
|
||||
|
||||
The system has several datastores (or files):
|
||||
|
||||
- `factory-config` consists of a set of default configurations, some
|
||||
static and others generated per-device, e.g., a unique hostname and
|
||||
number of ports/interfaces. This file is generated at boot.
|
||||
- `failure-config` is also generated at boot, from the same YANG models
|
||||
as `factory-config`, and holds the system *Fail Secure Mode*
|
||||
- `startup-config` is created from `factory-config` at boot if it does
|
||||
not exist. It is loaded as the system configuration on each boot.
|
||||
- `running-config` is what is actively running on the system. If no
|
||||
changes have been made since the system booted, it is the same as
|
||||
`startup-config`.
|
||||
- `candidate-config` is created from `running-config` when entering the
|
||||
configure context. Any changes made here can be discarded (`abort`,
|
||||
`rollback`) or committed (`commit`, `leave`) to `running-config`.
|
||||
|
||||
> [!TIP]
|
||||
> Please see the [Branding & Releases](branding.md) document for more
|
||||
> in-depth information on how `factory-config` and `failure-config` can
|
||||
> be adapted to different customer requirements. Including how you can
|
||||
> override the generated versions of these files with plain per-product
|
||||
> ones -- this may even protect against some of the failure modes below.
|
||||
@@ -1,152 +0,0 @@
|
||||
# Introduction
|
||||
|
||||
This document provides an introduction of key concepts, details how
|
||||
the system boots, including failure modes, and provides links to
|
||||
other documents for further study.
|
||||
|
||||
## CLI
|
||||
|
||||
The command line interface (CLI, see-ell-i) is the traditional way of
|
||||
interacting with single network equipment like switches and routers.
|
||||
Today users have come to expect more advanced graphical GUIs, like a web
|
||||
interface, to manage a device or NETCONF-based tools that allow for
|
||||
managing entire fleets of installed equipment.
|
||||
|
||||
Nevertheless, when it comes to initial deployment and debugging, it
|
||||
is very useful to know how to navigate and use the CLI.
|
||||
|
||||
> Proceed to the [CLI Introduction](cli/introduction.md) or [CLI
|
||||
> Configuration Tutorial](cli/configure.md).
|
||||
|
||||
|
||||
## Key Concepts
|
||||
|
||||
The two modes in the CLI are the admin-exec and the configure context.
|
||||
|
||||
However, when logging in to the system, from the console port or SSH,
|
||||
you land in a standard UNIX shell, Bash. This is for advanced users
|
||||
and remote scripting purposes (production equipment):
|
||||
|
||||
Run the command 'cli' for interactive OAM
|
||||
|
||||
admin@example:~$
|
||||
|
||||
To enter the CLI, follow the instructions, for interactive Operations,
|
||||
Administration, and Management (OAM), type:
|
||||
|
||||
admin@example:~$ cli
|
||||
admin@example:/>
|
||||
|
||||
The prompt, constructed from your username and the device's hostname,
|
||||
changes slightly. You are now in the admin-exec context of the CLI.
|
||||
Here you can inspect system status and do operations to debug networking
|
||||
issues, e.g. ping. You can also enter configure context by typing:
|
||||
`configure` followed by commands to `set`, `edit`, apply changes using
|
||||
`leave`, or `abort` and return to admin-exec.
|
||||
|
||||
> The [CLI Introduction](cli/introduction.md) can be useful to skim
|
||||
> through at this point.
|
||||
|
||||
The system has several datastores (or files):
|
||||
|
||||
- `factory-config` consists of a set of default configurations, some
|
||||
static and others generated per-device, e.g., a unique hostname and
|
||||
number of ports/interfaces. This file is generated at boot.
|
||||
- `failure-config` is also generated at boot, from the same YANG models
|
||||
as `factory-config`, and holds the system *Fail Secure Mode*
|
||||
- `startup-config` is created from `factory-config` at boot if it does
|
||||
not exist. It is loaded as the system configuration on each boot.
|
||||
- `running-config` is what is actively running on the system. If no
|
||||
changes have been made since the system booted, it is the same as
|
||||
`startup-config`.
|
||||
- `candidate-config` is created from `running-config` when entering the
|
||||
configure context. Any changes made here can be discarded (`abort`,
|
||||
`rollback`) or committed (`commit`, `leave`) to `running-config`.
|
||||
|
||||
> Please see the [Branding & Releases](branding.md) document for more
|
||||
> in-depth information on how `factory-config` and `failure-config` can
|
||||
> be adapted to different customer requirements. Including how you can
|
||||
> override the generated versions of these files with plain per-product
|
||||
> ones -- this may even protect against some of the failure modes below.
|
||||
|
||||
|
||||
## System Boot
|
||||
|
||||
After the system firmware (BIOS or and [boot loader](boot.md) start
|
||||
Linux the following happens. The various failure modes, e.g., missing
|
||||
password in VPD, are detailed later in this section.
|
||||
|
||||

|
||||
|
||||
1. Before mounting `/cfg` and `/var` partitions, hosting read-writable
|
||||
data like `startup-config` and container images, the system first
|
||||
checks if a factory reset has been requested by the user, if so it
|
||||
wipes the contents of these partitions
|
||||
2. Linux boots with a device tree which is used for detecting generic
|
||||
make and model of the device, e.g., number of interfaces. It may
|
||||
also reference an EEPROM with [Vital Product Data](vpd.md). That is
|
||||
where the base MAC address and per-device password hash is stored.
|
||||
(Generic builds use the same MAC address and password)
|
||||
3. On every boot the system's `factory-config` and `failure-config` are
|
||||
generated from the YANG[^1] models of the current firmware version.
|
||||
This ensures that a factory reset device can always boot, and that
|
||||
there is a working fail safe, or rather *fail secure*, mode
|
||||
4. On first power-on, and after a factory reset, the system does not
|
||||
have a `startup-config`, in which case `factory-config` is copied
|
||||
to `startup-config` -- if a per-product specific version exists it
|
||||
is preferred over the generated one
|
||||
5. Provided the integrity of the `startup-config` is OK, a system
|
||||
service loads and activates the configuration
|
||||
|
||||
### Failure Modes
|
||||
|
||||
So, what happens if any of the steps above fail?
|
||||
|
||||
**VPD Fail**
|
||||
|
||||
The per-device password cannot be read, or is corrupt, so the system
|
||||
`factory-config` and `failure-config` are not generated:
|
||||
|
||||
1. First boot, or after factory reset: `startup-config` cannot be
|
||||
created or loaded, and `failure-config` cannot be loaded. The
|
||||
system ends up in an unrecoverable state, i.e., **RMA[^2] Mode**
|
||||
2. The system has booted (at least) once with correct VPD and password
|
||||
and already has a `startup-config`. Provided the `startup-config`
|
||||
is OK (see below), it is loaded and system boots successfully
|
||||
|
||||
In both cases, external factory reset modes/button will not help, and
|
||||
in the second case will cause the device to fail on the next boot.
|
||||
|
||||
> The second case does not yet have any warning or event that can be
|
||||
> detected from the outside. This is planned for a later release.
|
||||
|
||||
**Broken startup-config**
|
||||
|
||||
If loading `startup-config` fails for some reason, e.g., invalid JSON
|
||||
syntax, failed validation against the system's YANG model, or a bug in
|
||||
the system's `confd` service, the *Fail Secure Mode* is triggered and
|
||||
`failure-config` is loaded (unless VPD Failure, see above).
|
||||
|
||||
> Again, please see the [Branding & Releases](branding.md) document for
|
||||
> how to provide a per-product hard-coded `failure-config` to suit your
|
||||
> products preferences.
|
||||
|
||||
*Fail Secure Mode* is a fail-safe mode provided for debugging the
|
||||
system. The default[^3] creates a setup of isolated interfaces with
|
||||
communication only to the management CPU, SSH and console login using
|
||||
the device's factory reset password, IP connectivity only using IPv6
|
||||
link-local, and device discovery protocols: LLDP, mDNS-SD. The login
|
||||
and shell prompt are set to `failure-c0-ff-ee`, the last three octets of
|
||||
the device's base MAC address.
|
||||
|
||||
[^1]: YANG is a modeling language from IETF, replacing that used for
|
||||
SNMP (MIB), used to describe the subsystems and properties of
|
||||
the system.
|
||||
[^2]: Return Merchandise Authorization (RMA), i.e., broken beyond repair
|
||||
by end-user and eligible for return to manufacturer.
|
||||
[^3]: Customer specific builds can define their own `failure-config`.
|
||||
It may be the same as `factory-config`, with the hostname set to
|
||||
`failure`, or a dedicated configuration that isolates interfaces, or
|
||||
even disables ports, to ensure that the device does not cause any
|
||||
security problems on the network. E.g., start forwarding traffic
|
||||
between previously isolated VLANs.
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -1,5 +1,5 @@
|
||||
Origin & Licensing
|
||||
------------------
|
||||
==================
|
||||
|
||||
Infix is entirely built on Open Source components (packages). Most of
|
||||
them, as well as the build system with its helper scripts and tools, is
|
||||
|
||||
@@ -0,0 +1,312 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="489.27203mm"
|
||||
height="159.49489mm"
|
||||
viewBox="0 0 489.27202 159.49489"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="logo-large.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="0.57493546"
|
||||
inkscape:cx="104.35954"
|
||||
inkscape:cy="264.3775"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1385"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer6" />
|
||||
<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,118.15852,-263.46763)">
|
||||
<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(144.84863,-39.0695)">
|
||||
<g
|
||||
aria-label="Immutable . Friendly . Secure"
|
||||
transform="matrix(5.7077268,0,0,6.3072396,-498.93695,-594.0847)"
|
||||
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="../../../Pictures/logo-medium.svg"
|
||||
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.308367;stroke-linejoin:bevel"
|
||||
d="m -144.31598,174.51773 v -14.33904 h 0.9251 0.9251 v 14.33904 14.33901 h -0.9251 -0.9251 z"
|
||||
id="path1834" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.308367;stroke-linejoin:bevel"
|
||||
d="m -136.30031,181.22465 c -0.001,-4.1976 -0.0919,-8.78814 -0.20181,-10.20114 l -0.19998,-2.56908 0.89565,0.1023 c 0.8478,0.0966 0.90062,0.1887 0.98885,1.7211 0.0513,0.8904 0.20586,1.61892 0.34352,1.61892 0.13764,0 0.618,-0.53058 1.0674,-1.17906 1.45087,-2.09358 4.23746,-3.17568 6.56441,-2.5491 1.36671,0.36801 3.24026,2.05989 3.81345,3.44367 0.20532,0.49566 0.46053,0.89748 0.56716,0.89292 0.10668,-0.006 0.53985,-0.56889 0.96272,-1.25409 2.58453,-4.18785 8.33854,-4.38975 10.69125,-0.37515 1.35685,2.31528 1.63536,4.25529 1.64063,11.42817 l 0.005,6.55278 h -0.92514 -0.9251 v -6.12522 c 0,-6.42789 -0.25833,-8.71464 -1.18804,-10.51704 -1.54819,-3.00141 -5.32325,-3.35445 -7.81531,-0.73086 -1.64902,1.73601 -1.78946,2.54217 -1.78946,10.2708 v 7.10232 h -0.8975 -0.89747 l -0.11478,-7.63206 c -0.12399,-8.24403 -0.26391,-9.02502 -1.88595,-10.52016 -0.8482,-0.78183 -2.9732,-1.19196 -4.3655,-0.84252 -1.15129,0.2889 -3.25337,2.29635 -3.90658,3.73062 -0.49008,1.07607 -0.56263,2.12859 -0.56854,8.2488 l -0.006,7.01532 h -0.92514 -0.9251 z"
|
||||
id="path1836" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.308367;stroke-linejoin:bevel"
|
||||
d="m -103.02389,181.53305 c -0.0159,-4.02804 -0.12003,-8.6073 -0.23127,-10.17615 l -0.20232,-2.85249 0.84214,9e-5 c 0.91226,9e-5 1.08223,0.35814 1.23423,2.59995 l 0.0822,1.21224 0.90345,-1.30884 c 1.592469,-2.30697 4.454556,-3.48627 6.877557,-2.83383 1.285035,0.34605 3.171906,2.10468 3.846369,3.58494 0.18903,0.4149 0.425514,0.74997 0.525495,0.74463 0.10002,-0.006 0.549228,-0.61569 0.998349,-1.35624 1.190781,-1.9635 3.276012,-3.10278 5.681709,-3.10422 2.125218,-0.001 3.530028,0.73824 4.730481,2.49021 1.425795,2.0808 1.662396,3.54492 1.802493,11.15388 l 0.13191,7.16952 h -0.953946 -0.953958 l -0.0096,-5.4735 c -0.0111,-6.4119 -0.345123,-9.45564 -1.227219,-11.18469 -1.697829,-3.32802 -6.20544,-3.26967 -8.549655,0.1107 l -0.852249,1.22895 -0.09222,7.65927 -0.09222,7.6593 h -0.872124 -0.872127 l -0.13461,-7.47789 c -0.12207,-6.78261 -0.19539,-7.61328 -0.78783,-8.93439 -1.868358,-4.16616 -7.021416,-3.50571 -9.439975,1.20993 -0.42611,0.83082 -0.50616,2.11092 -0.50616,8.0946 v 7.10775 h -0.9251 -0.92509 z"
|
||||
id="path1838" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.308367;stroke-linejoin:bevel"
|
||||
d="m -65.528455,189.01025 c -0.678402,-0.24 -1.67559,-0.91593 -2.215989,-1.50231 -1.721088,-1.86762 -2.021112,-3.47595 -2.178735,-11.67969 l -0.14064,-7.32369 h 0.957168 0.957168 l 0.0048,5.01096 c 0.0063,6.21369 0.397179,10.10931 1.161543,11.59083 1.796637,3.48225 6.830331,3.36933 9.425844,-0.2115 l 0.970869,-1.33941 0.0924,-7.52544 0.0924,-7.52547 h 1.063956 1.063959 l 0.0078,8.71134 c 0.0048,4.79124 0.14874,9.324 0.321357,10.07277 0.24207,1.05027 0.22275,1.4202 -0.0846,1.61853 -0.877587,0.56631 -1.320246,0.0885 -1.745649,-1.88487 -0.390237,-1.81014 -0.463677,-1.92957 -0.851025,-1.3839 -2.309766,3.2538 -5.654358,4.52049 -8.902956,3.37182 z"
|
||||
id="path1840" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m -42.840682,189.54167 c -0.830898,-0.0516 -1.586373,-0.32814 -2.21226,-0.80976 -0.11286,-0.0867 -0.337599,-0.2976 -0.49935,-0.46863 -0.813387,-0.85929 -1.347882,-2.09901 -1.613787,-3.7431 l -0.08223,-0.50814 -0.0111,-6.97791 -0.0111,-6.97791 h -1.868187 -1.868187 v -0.88926 -0.88926 h 1.869252 1.869249 v -3.09453 -3.09453 l 1.070895,-0.53508 c 0.588993,-0.2943 1.078992,-0.53508 1.088883,-0.53508 0.0096,0 0.018,1.63332 0.018,3.62961 v 3.62961 h 2.994423 2.99442 v 0.88926 0.88926 h -2.995308 -2.995296 l 0.0111,7.03233 c 0.0126,7.55964 0.0048,7.20882 0.18975,8.02035 0.25452,1.11204 0.752538,1.8687 1.452594,2.20695 0.397431,0.192 0.639018,0.234 1.352916,0.2346 0.894777,7.5e-4 1.608678,-0.0864 2.103723,-0.2568 0.11145,-0.0381 0.20673,-0.0654 0.21195,-0.0603 0.0048,0.006 0.05667,0.40134 0.1143,0.88029 l 0.10479,0.87081 -0.07494,0.0441 c -0.12462,0.0735 -0.530289,0.2211 -0.818958,0.2979 -0.672816,0.1791 -1.614678,0.2637 -2.395539,0.2151 z"
|
||||
id="path1842" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m -31.281523,189.54041 c -2.117439,-0.1116 -4.0266,-1.30272 -4.90974,-3.0633 -0.382494,-0.76251 -0.552753,-1.49451 -0.57882,-2.48841 -0.0258,-0.98481 0.08034,-1.78161 0.342393,-2.57181 0.550053,-1.65828 1.703355,-2.91345 3.498849,-3.80796 1.8933,-0.94317 4.422204,-1.44672 7.615539,-1.51629 l 1.030845,-0.024 -0.0231,-0.58419 c -0.12114,-3.08307 -1.437594,-5.03694 -3.728196,-5.53323 -0.18975,-0.0411 -0.568755,-0.0933 -0.842232,-0.1161 -1.32177,-0.1101 -3.283998,0.2748 -5.922663,1.16184 -0.29799,0.1002 -0.545955,0.1779 -0.550989,0.1731 -0.0048,-0.006 -0.05937,-0.46629 -0.12081,-1.02495 -0.06129,-0.55869 -0.11985,-1.06599 -0.13002,-1.12737 l -0.0183,-0.1116 0.590262,-0.1863 c 1.911207,-0.60366 3.694686,-0.88557 5.635404,-0.89073 1.226661,-0.003 1.966944,0.0957 2.823465,0.37677 2.327178,0.76416 3.733878,2.60757 4.236099,5.55114 0.19122,1.12077 0.18897,1.05471 0.21954,6.47901 0.0159,2.7948 0.03777,5.13861 0.0489,5.20848 0.0111,0.0699 0.0462,0.37203 0.07794,0.67149 0.07383,0.69654 0.23166,1.62993 0.392748,2.32266 0.06954,0.2994 0.12129,0.54936 0.11493,0.55569 -0.0159,0.015 -1.847232,0.44229 -1.854438,0.4323 -0.0033,-0.006 -0.17214,-0.74271 -0.375747,-1.64103 -0.20358,-0.89835 -0.378585,-1.65783 -0.388872,-1.68777 -0.0144,-0.0411 -0.03825,-0.027 -0.0978,0.054 -0.396462,0.54423 -0.982011,1.17393 -1.476264,1.58757 -1.569006,1.31304 -3.44154,1.91388 -5.609082,1.7997 z m 1.47774,-2.04291 c 1.043211,-0.1572 2.05602,-0.55764 3.024108,-1.19553 1.290702,-0.85047 2.04543,-1.78962 2.365311,-2.94327 l 0.10065,-0.36297 0.0126,-2.46459 0.0126,-2.46462 -1.009095,0.024 c -5.651721,0.1266 -8.751711,1.62918 -9.249408,4.48323 -0.0708,0.40623 -0.07002,1.35084 0.0016,1.77069 0.29403,1.72404 1.366362,2.86329 2.968689,3.15396 0.360186,0.0654 1.342119,0.0657 1.774029,5.1e-4 z"
|
||||
id="path1844" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m -7.8875825,189.54161 c -1.538988,-0.0744 -2.9374805,-0.60105 -4.2103355,-1.58514 -0.65556,-0.50682 -1.496838,-1.44732 -2.046417,-2.2878 l -0.22209,-0.33963 -0.0078,0.2307 c -0.0048,0.1269 -0.0252,0.79425 -0.04539,1.48296 -0.0204,0.68871 -0.04764,1.41147 -0.06063,1.60611 l -0.0234,0.35388 h -0.994473 -0.994473 l 0.0216,-0.2088 c 0.09669,-0.93147 0.1035,-1.8627 0.11637,-15.98841 l 0.0126,-14.65452 h 1.087533 1.087548 l 0.0011,7.03233 c 9.21e-4,5.53779 0.0111,7.01928 0.04539,6.97074 0.0243,-0.0339 0.15033,-0.2355 0.28014,-0.44802 0.379557,-0.62154 0.777366,-1.12458 1.322769,-1.67265 1.260618,-1.26678 2.5565885,-1.90101 4.4120105,-2.15913 0.469743,-0.0654 1.713279,-0.0552 2.232201,0.018 2.097834,0.2973 3.715656,1.25979 5.01145196,2.98143 1.20858,1.60575 1.89528304,3.44268 2.16369904,5.78775 0.06396,0.55932 0.06462,2.90985 9.51e-4,3.50256 -0.19008,1.76865 -0.59969404,3.26412 -1.26256804,4.60959 -1.64027096,3.32937 -4.32204896,4.94199 -7.92795896,4.76736 z m 1.368312,-2.0466 c 2.796684,-0.36504 4.538139,-2.03373 5.306523,-5.08476 0.47731196,-1.89534 0.56147996,-4.59102 0.20358,-6.52143 -0.47136,-2.54259 -1.745583,-4.51794 -3.485817,-5.4039 -0.920607,-0.46869 -1.741026,-0.65262 -2.920761,-0.65481 -1.00611,-0.002 -1.613154,0.1107 -2.474007,0.45876 -0.9240365,0.37362 -1.9277015,1.15236 -2.6473175,2.05398 -0.710628,0.8904 -1.236075,2.02467 -1.4628,3.15777 -0.15747,0.78702 -0.17418,1.18113 -0.15843,3.73848 0.0159,2.6016 0.0165,2.60625 0.24939,3.48444 0.568038,2.14122 2.215881,3.91269 4.2321965,4.54965 0.25773,0.0813 0.876282,0.2127 1.190181,0.2529 0.313497,0.0399 1.575021,0.021 1.967196,-0.0312 z"
|
||||
id="path1846" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 12.038954,189.48929 c -1.380489,-0.2007 -2.5289035,-0.74685 -3.4593055,-1.64538 -1.650744,-1.59426 -2.5149,-4.11801 -2.710227,-7.91517 -0.0225,-0.43971 -0.03651,-4.69791 -0.03666,-11.24271 l -3.48e-4,-10.53492 h 1.087644 1.087644 l 0.0144,10.91604 c 0.0144,11.15352 0.0126,11.12724 0.15351,12.40416 0.16794,1.5306 0.555705,3.06945 0.985725,3.91164 0.709041,1.38867 1.7957965,2.07525 3.4244605,2.16342 l 0.41886,0.024 -0.10701,0.98907 -0.10701,0.98907 -0.20292,-0.003 c -0.1116,-0.002 -0.358092,-0.027 -0.547737,-0.054 z"
|
||||
id="path1848" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 24.488495,189.5423 c -1.316022,-0.0591 -2.562162,-0.366 -3.65757,-0.90096 -0.600471,-0.2931 -0.872235,-0.45927 -1.423875,-0.86988 -1.613886,-1.20126 -2.83002,-3.00558 -3.445749,-5.11236 -0.12336,-0.42213 -0.26172,-1.10259 -0.348948,-1.71612 -0.09144,-0.64314 -0.11256,-2.46267 -0.03777,-3.24603 0.18384,-1.92444 0.568215,-3.31806 1.321434,-4.79121 0.980265,-1.91715 2.435433,-3.40968 4.126182,-4.2321 1.230918,-0.59871 2.366169,-0.84465 3.883677,-0.84129 0.897063,0.002 1.51638,0.0747 2.251233,0.264 2.647791,0.68271 4.409805,2.70723 5.225415,6.00387 0.30423,1.22967 0.462249,2.45031 0.546609,4.22232 l 0.0228,0.48093 h -7.644861 -7.644861 l 0.0183,0.1725 c 0.0096,0.0948 0.0279,0.33576 0.03969,0.53538 0.10095,1.71342 0.604836,3.41064 1.388331,4.67724 0.498126,0.80532 1.268001,1.64076 1.96539,2.13282 0.885237,0.62463 1.959198,1.02819 3.134232,1.17774 0.593217,0.0756 2.155158,0.0561 2.848515,-0.0357 1.538922,-0.2034 3.239802,-0.66696 4.594113,-1.25232 0.09651,-0.0417 0.18762,-0.0759 0.20256,-0.0759 0.0285,0 0.20805,1.91424 0.18165,1.9362 -0.0078,0.006 -0.1785,0.0822 -0.378141,0.1671 -1.84893,0.78693 -3.835227,1.23453 -5.734782,1.29228 -0.339375,0.012 -0.674193,0.024 -0.744075,0.027 -0.06984,0.006 -0.38019,-0.003 -0.689628,-0.015 z m 6.279102,-12.88929 c -3.96e-4,-0.49158 -0.13002,-1.44957 -0.27408,-2.02635 -0.337248,-1.34979 -0.923781,-2.373 -1.893666,-3.30354 -0.946179,-0.9078 -2.048889,-1.37718 -3.490149,-1.48563 -2.248362,-0.1692 -4.144344,0.70395 -5.586063,2.5725 -0.829104,1.07454 -1.417035,2.45454 -1.657095,3.88956 -0.03174,0.1893 -0.06588,0.38112 -0.07587,0.42606 l -0.0183,0.0816 h 6.497685 6.497685 l -1.11e-4,-0.1542 z"
|
||||
id="path1850" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="M 70.403009,174.46616 V 159.9296 h 7.440693 7.440693 v 0.99816 0.99813 h -6.35181 -6.35181 v 5.5533 5.5533 h 5.916261 5.916264 v 0.99813 0.99813 h -5.916264 -5.916261 v 6.987 6.987 h -1.088883 -1.088883 z"
|
||||
id="path1852" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 89.675846,181.22633 c -3.96e-4,-8.42712 -0.0159,-9.27867 -0.20184,-10.95234 -0.06081,-0.54813 -0.20655,-1.46937 -0.28287,-1.78818 l -0.05001,-0.2094 0.929625,0.009 0.929622,0.009 0.11667,0.34482 c 0.24405,0.72153 0.38751,1.73133 0.438294,3.08502 l 0.0264,0.70767 0.17553,-0.4173 c 0.582486,-1.38471 1.378806,-2.47692 2.332371,-3.1989 0.355965,-0.2694 1.123425,-0.6519 1.556829,-0.77565 0.713328,-0.2037 1.640634,-0.2709 2.314305,-0.1677 l 0.31758,0.0486 v 0.97788 0.97788 l -0.13605,-0.03 c -0.22089,-0.0468 -1.025748,-0.021 -1.369377,0.0426 -0.976185,0.183 -1.774746,0.60066 -2.534016,1.32558 -1.109838,1.05963 -1.80732,2.38722 -2.146092,4.08492 -0.22383,1.12158 -0.21426,0.80616 -0.2286,7.5393 l -0.0126,6.16125 h -1.087404 -1.087407 z"
|
||||
id="path1854" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="M 101.65393,178.64024 V 168.2777 h 1.07073 1.07073 v 10.36254 10.36251 h -1.07073 -1.07073 z"
|
||||
id="path1856" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 117.20677,189.54065 c -1.9962,-0.0849 -3.77313,-0.72921 -5.28687,-1.91715 -0.39069,-0.3066 -1.11243,-1.02423 -1.42371,-1.41555 -1.60191,-2.01393 -2.34033,-4.45113 -2.25987,-7.45884 0.024,-0.84651 0.0549,-1.25475 0.1539,-1.94184 0.36663,-2.54832 1.4064,-4.76052 3.02607,-6.43812 1.344,-1.39212 2.97423,-2.20983 4.93761,-2.47665 0.61383,-0.0834 1.84362,-0.0825 2.48049,0.002 3.47037,0.4608 5.57949,2.73192 6.4251,6.91866 0.2106,1.04241 0.38616,2.72055 0.38616,3.69009 v 0.30006 h -7.62216 -7.62216 l 7.2e-4,0.2268 c 10e-4,0.30822 0.0912,1.21647 0.1638,1.65045 0.58707,3.50589 2.59434,5.95074 5.46024,6.65055 0.76488,0.1869 1.27044,0.2316 2.36031,0.2085 1.92048,-0.0402 3.57471,-0.38781 5.58582,-1.1736 0.3273,-0.1281 0.60087,-0.2268 0.60792,-0.2196 0.03,0.03 0.1878,1.89675 0.1626,1.92225 -0.0591,0.0594 -1.1994,0.50613 -1.73637,0.67998 -1.89084,0.61224 -3.82146,0.87579 -5.79948,0.79173 z m 6.24924,-13.21431 c -0.0957,-2.00139 -0.78849,-3.6687 -2.03955,-4.90902 -0.9795,-0.97116 -2.09058,-1.46088 -3.58356,-1.57962 -1.31247,-0.1044 -2.65083,0.192 -3.67557,0.81426 -1.09476,0.66462 -2.09601,1.78734 -2.742,3.07458 -0.42441,0.8457 -0.76491,1.95288 -0.88953,2.89242 l -0.024,0.1884 h 6.48912 6.48909 z"
|
||||
id="path1858" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 130.246,180.50039 c -0.012,-7.70118 -0.018,-8.57418 -0.0753,-9.26457 -0.0666,-0.80139 -0.2277,-2.49213 -0.2658,-2.78571 l -0.021,-0.1725 h 1.01796 1.01793 l 0.0744,0.31758 c 0.1575,0.67284 0.2772,1.6569 0.31812,2.61228 0.0345,0.80928 0.0366,0.81345 0.2283,0.46161 0.93858,-1.72203 2.27916,-2.93382 3.8508,-3.48087 1.75359,-0.61038 4.23234,-0.44265 5.8749,0.39753 1.41144,0.72198 2.43792,1.968 3.05133,3.70395 0.2595,0.7341 0.4899,1.80171 0.59922,2.7753 0.1071,0.95442 0.1269,2.20143 0.1275,8.04864 l 6.3e-4,5.88903 h -1.08726 -1.0872 l -0.015,-6.48792 c -0.015,-6.91569 -0.012,-6.74199 -0.1899,-7.78422 -0.44652,-2.59383 -1.69596,-4.18083 -3.70875,-4.71075 -0.79704,-0.2097 -1.92897,-0.258 -2.62404,-0.1113 -0.96021,0.2022 -1.78407,0.66915 -2.62653,1.48845 -1.14552,1.11399 -1.87053,2.382 -2.17077,3.79641 l -0.0843,0.39816 -0.009,6.70569 -0.009,6.70572 h -1.08687 -1.08687 z"
|
||||
id="path1860" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 158.71132,189.5417 c -2.91762,-0.1311 -5.18709,-1.59285 -6.66876,-4.29561 -0.60435,-1.10238 -1.08093,-2.50629 -1.31427,-3.8715 -0.51462,-3.01113 -0.2292,-6.08682 0.77988,-8.40225 1.14759,-2.63334 3.06033,-4.36614 5.44281,-4.93071 1.55871,-0.36936 3.38505,-0.27 4.80921,0.2616 1.45209,0.54207 2.69157,1.55238 3.68406,3.00291 0.1398,0.2043 0.31938,0.48798 0.39924,0.63057 0.0798,0.1425 0.1575,0.2598 0.1725,0.2601 0.015,4.5e-4 0.027,-3.15966 0.027,-7.02246 v -7.02327 h 1.08888 1.08888 l 9e-5,14.16453 c 9e-5,13.49286 0.012,15.33414 0.1038,16.38768 l 0.027,0.2994 h -0.98556 -0.98556 l -0.021,-0.1905 c -0.027,-0.2265 -0.096,-2.13246 -0.1071,-2.93091 l -0.009,-0.56259 -0.1773,0.2721 c -0.53577,0.82308 -1.42497,1.82859 -2.05977,2.32926 -1.32408,1.04424 -2.78742,1.57869 -4.47777,1.63542 -0.1596,0.006 -0.52722,-8.7e-4 -0.81666,-0.015 z m 2.15235,-2.09568 c 0.57033,-0.1161 0.99816,-0.2643 1.53171,-0.53058 0.59409,-0.2964 1.05009,-0.62085 1.55505,-1.10673 0.84591,-0.81402 1.46733,-1.83672 1.78131,-2.93163 0.2856,-0.99594 0.3213,-1.50216 0.30141,-4.27485 -0.018,-2.44896 -0.03,-2.61489 -0.2607,-3.51579 -0.35535,-1.38651 -1.02678,-2.50746 -2.13348,-3.56184 -0.95904,-0.91368 -2.00778,-1.43454 -3.29436,-1.63623 -0.50643,-0.0795 -1.58565,-0.0792 -2.10177,4.8e-4 -0.73497,0.1134 -1.47864,0.35451 -2.01039,0.6519 -1.78428,0.9978 -3.04128,3.1326 -3.43863,5.83986 -0.246,1.67523 -0.1632,3.98358 0.2037,5.68635 0.57291,2.6589 1.91361,4.38552 3.95682,5.09574 0.85908,0.2985 1.49043,0.38781 2.6463,0.37377 0.72558,-0.009 0.9366,-0.024 1.26309,-0.0906 z"
|
||||
id="path1862" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 180.18046,189.48815 c -2.2323,-0.3471 -3.81351,-1.50858 -4.84362,-3.55797 -0.64728,-1.28769 -1.01874,-2.74482 -1.26159,-4.94886 -0.057,-0.51579 -0.063,-1.48887 -0.0735,-11.6964 l -0.012,-11.13381 h 1.06932 1.06935 l 0.015,10.64382 c 0.015,10.83192 0.018,11.11626 0.1545,12.45861 0.2028,2.0022 0.65679,3.64941 1.26459,4.58895 0.2085,0.32232 0.69909,0.83706 0.97977,1.02795 0.60663,0.41262 1.51659,0.67965 2.31819,0.68025 0.198,1.5e-4 0.2814,0.012 0.2814,0.0447 0,0.0795 -0.1842,1.78593 -0.2019,1.87011 -0.015,0.0738 -0.0372,0.0813 -0.2253,0.0777 -0.1146,-0.002 -0.35499,-0.027 -0.53466,-0.0549 z"
|
||||
id="path1864" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 183.62242,198.44585 c -0.012,-0.0534 -0.1263,-0.47253 -0.2508,-0.93168 -0.1245,-0.45915 -0.2238,-0.8361 -0.2208,-0.83769 0.003,-0.002 0.2115,-0.0693 0.46311,-0.1503 1.79742,-0.57957 3.34176,-1.85958 4.61625,-3.82614 0.6873,-1.06047 1.37181,-2.48631 1.89687,-3.95127 0.1506,-0.42048 0.1638,-0.60156 0.0675,-0.93942 -0.0306,-0.1074 -1.7352,-4.36221 -3.78795,-9.4551 -2.05275,-5.09289 -3.80616,-9.44355 -3.89643,-9.66813 l -0.1641,-0.40833 h 1.13391 1.13394 l 1.88088,4.7094 c 1.03452,2.5902 2.61192,6.53874 3.50532,8.77458 0.89343,2.23584 1.6383,4.06152 1.65528,4.05705 0.018,-0.006 1.50456,-3.94716 3.3057,-8.76156 1.80114,-4.81443 3.28092,-8.75955 3.28833,-8.76699 0.009,-0.009 0.52716,-0.009 1.15491,-0.003 l 1.14138,0.009 -2.37141,5.95254 c -5.33205,13.38411 -6.05598,15.19422 -6.2784,15.69807 -2.06613,4.68051 -4.71939,7.51905 -7.94979,8.50488 l -0.2994,0.0915 z"
|
||||
id="path1866" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 241.59337,189.54203 c -2.30475,-0.0822 -4.35306,-0.70485 -6.02514,-1.83138 -0.2196,-0.1479 -0.4287,-0.2919 -0.46467,-0.31959 -0.0615,-0.0477 -0.0405,-0.1092 0.35664,-1.04307 0.2322,-0.54588 0.4281,-0.99852 0.43548,-1.00587 0.009,-0.009 0.1653,0.1008 0.35112,0.24 1.06728,0.80076 2.1348,1.31283 3.42627,1.64358 0.86898,0.2226 1.41873,0.2925 2.47128,0.31497 1.00587,0.021 1.46865,-0.012 2.17122,-0.1536 2.10912,-0.4272 3.73479,-1.73637 4.3308,-3.48762 0.2931,-0.86106 0.41376,-1.90122 0.33672,-2.90118 -0.1395,-1.80786 -0.6534,-2.93001 -1.76901,-3.86127 -0.97362,-0.81276 -2.03499,-1.38099 -3.75489,-2.01033 -2.0091,-0.73512 -3.25644,-1.37757 -4.4781,-2.30646 -0.44967,-0.34188 -1.30902,-1.19166 -1.6125,-1.59453 -1.03554,-1.37463 -1.51131,-2.91504 -1.44294,-4.67202 0.0846,-2.17602 0.82695,-3.77448 2.36478,-5.09244 1.02237,-0.87618 2.27838,-1.50102 3.58158,-1.78173 0.73059,-0.1572 1.05438,-0.1914 2.00802,-0.2106 1.70271,-0.0342 3.16122,0.1812 4.46778,0.65937 0.3816,0.1398 1.26171,0.5628 1.54623,0.74331 l 0.1704,0.108 -0.438,0.89952 c -0.2409,0.49476 -0.44949,0.91224 -0.46353,0.92778 -0.015,0.015 -0.1632,-0.048 -0.33123,-0.1413 -1.14852,-0.63687 -2.49195,-1.047 -3.86232,-1.17903 -0.56211,-0.054 -1.84353,-0.024 -2.3052,0.0564 -1.36629,0.2346 -2.43981,0.74907 -3.25305,1.55919 -0.66813,0.66558 -1.03581,1.36992 -1.23555,2.36694 -0.093,0.46467 -0.0933,1.6863 -2.7e-4,2.11788 0.30807,1.42977 1.06047,2.5218 2.45406,3.56166 0.80493,0.6006 1.77321,1.10781 3.28704,1.72188 2.76288,1.12068 4.2393,1.98141 5.40978,3.15372 0.69783,0.69894 1.08957,1.33416 1.39341,2.25948 0.33486,1.01973 0.45378,1.93737 0.42714,3.29625 -0.021,0.99504 -0.06,1.35537 -0.2304,2.05074 -0.44691,1.82274 -1.54683,3.32724 -3.24318,4.4361 -1.68516,1.10154 -3.59061,1.56384 -6.07959,1.47498 z"
|
||||
id="path1868" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 263.46175,189.54323 c -2.80899,-0.1308 -5.22276,-1.38135 -6.87114,-3.56007 -0.4245,-0.56109 -0.6738,-0.96681 -0.98814,-1.60818 -0.52932,-1.08 -0.84054,-2.14656 -1.0221,-3.50256 -0.0939,-0.70014 -0.0927,-2.75589 0.002,-3.53886 0.2937,-2.43396 1.01424,-4.32531 2.2989,-6.03567 0.36348,-0.48396 1.13139,-1.28982 1.55358,-1.63047 1.20624,-0.97314 2.58915,-1.55871 4.1922,-1.77507 0.54591,-0.0738 1.80054,-0.0825 2.34111,-0.015 2.5482,0.31149 4.38213,1.57836 5.51166,3.80742 0.85362,1.68453 1.29828,3.73545 1.42377,6.56667 l 0.024,0.5535 h -7.63599 -7.63602 l 0.027,0.49665 c 0.1689,3.18186 1.43247,5.72484 3.54882,7.14141 0.83019,0.55566 1.90509,0.93372 3.04812,1.07208 0.39846,0.0483 1.71624,0.0477 2.25129,-9.6e-4 1.60254,-0.1455 3.34935,-0.58182 4.92957,-1.23093 0.2058,-0.0846 0.3795,-0.1482 0.38568,-0.141 0.006,0.006 0.051,0.44307 0.0996,0.96903 l 0.0882,0.95631 -0.2019,0.0894 c -1.84176,0.81639 -3.96888,1.31205 -5.90028,1.37487 -0.31938,0.012 -0.65421,0.024 -0.74406,0.03 -0.0897,0.006 -0.41649,-0.002 -0.72591,-0.015 z m 6.27882,-12.94467 c -6e-4,-0.32358 -0.0996,-1.1841 -0.1848,-1.60608 -0.31341,-1.55172 -1.01139,-2.81103 -2.10477,-3.79752 -1.10712,-0.99891 -2.66208,-1.48497 -4.34538,-1.35828 -0.90084,0.0678 -1.52766,0.2337 -2.2752,0.60285 -0.63606,0.31395 -1.07013,0.63144 -1.63392,1.19508 -0.95667,0.95637 -1.56321,1.9479 -1.99737,3.2649 -0.1857,0.56301 -0.41574,1.55532 -0.41574,1.79244 v 0.1155 h 6.47883 6.47886 l -3.9e-4,-0.2088 z"
|
||||
id="path1870" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 284.44087,189.54212 c -3.24438,-0.1257 -5.8536,-1.54668 -7.52163,-4.09638 -0.30882,-0.47208 -0.76221,-1.37259 -0.96384,-1.91436 -0.57444,-1.54371 -0.85107,-3.38343 -0.79269,-5.27226 0.099,-3.20727 0.94287,-5.55774 2.68761,-7.48674 1.27536,-1.41003 2.92155,-2.3352 4.84833,-2.72475 2.16588,-0.43788 4.818,-0.2328 6.71478,0.51963 0.37071,0.147 1.10307,0.49998 1.32684,0.63945 l 0.111,0.069 -0.37239,0.97527 c -0.2049,0.5364 -0.37752,0.98043 -0.38382,0.98673 -0.006,0.006 -0.1254,-0.0627 -0.2649,-0.1539 -0.36555,-0.2385 -1.13112,-0.60219 -1.61448,-0.76683 -1.88151,-0.64089 -4.23801,-0.66975 -5.95125,-0.0729 -2.21205,0.77064 -3.92331,2.79354 -4.58943,5.42523 -0.2493,0.98457 -0.33003,1.73625 -0.32727,3.04332 0.003,1.14081 0.0474,1.64979 0.219,2.484 0.66186,3.21606 2.73378,5.52453 5.53848,6.17091 1.08297,0.2496 2.75193,0.2487 4.0035,-0.002 1.00905,-0.2022 2.0469,-0.61467 2.75373,-1.09416 0.1632,-0.1107 0.2199,-0.1335 0.2427,-0.0966 0.078,0.126 0.72657,1.86156 0.71097,1.90221 -0.0303,0.0783 -1.32156,0.69663 -1.78362,0.85386 -1.44879,0.49299 -2.84556,0.67896 -4.59144,0.61131 z"
|
||||
id="path1872" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 301.06447,189.54269 c -3.29796,-0.1524 -5.33844,-2.26452 -6.00708,-6.21795 -0.2553,-1.50936 -0.2715,-2.04396 -0.2718,-9.01284 l -3.6e-4,-6.0342 h 1.08729 1.08729 l 0.015,6.34275 c 0.015,6.81669 0.009,6.6264 0.2052,7.83087 0.33183,2.04864 1.04052,3.47316 2.14131,4.3041 0.35019,0.2643 0.91161,0.52767 1.40709,0.65994 0.42285,0.1128 0.43758,0.114 1.29882,0.1149 0.95967,6e-4 1.26414,-0.042 1.95999,-0.2739 1.55616,-0.5187 2.95113,-1.77549 3.72168,-3.35301 0.35256,-0.72171 0.55941,-1.45686 0.65067,-2.31246 0.024,-0.2295 0.0378,-2.61342 0.0378,-6.83271 v -6.4803 h 1.08804 1.08807 l 0.012,8.33904 c 0.012,7.66665 0.018,8.37378 0.0744,8.77035 0.1428,0.98406 0.39552,2.082 0.69543,3.02172 0.0879,0.2754 0.1566,0.50394 0.1527,0.5076 -0.003,0.003 -0.43185,0.1152 -0.95088,0.2481 -0.51903,0.1329 -0.96993,0.249 -1.002,0.2586 -0.1329,0.0384 -0.64872,-2.03064 -0.84747,-3.39957 -0.0498,-0.34338 -0.0975,-0.63111 -0.1056,-0.63945 -0.009,-0.009 -0.0678,0.0768 -0.132,0.1893 -0.30909,0.54027 -1.0674,1.49451 -1.52232,1.91568 -1.16817,1.08153 -2.46564,1.71837 -4.01253,1.96953 -0.47538,0.0771 -1.25811,0.1125 -1.86924,0.0843 z"
|
||||
id="path1874" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 316.34506,181.51667 c -3e-5,-8.6226 -0.024,-9.77421 -0.255,-11.5875 -0.0678,-0.53586 -0.2301,-1.47663 -0.2745,-1.59234 -0.021,-0.0537 0.0627,-0.0591 0.90414,-0.0591 h 0.92682 l 0.0792,0.2088 c 0.1203,0.31725 0.2739,0.95907 0.34128,1.42461 0.0558,0.38475 0.0864,0.78735 0.1572,2.05071 l 0.027,0.47187 0.105,-0.2721 c 0.1659,-0.43044 0.62172,-1.30971 0.8892,-1.71555 0.95484,-1.44867 2.16645,-2.28351 3.70614,-2.55366 0.42108,-0.0738 1.39458,-0.0777 1.74222,-0.006 l 0.2358,0.048 0.009,0.97368 0.009,0.97368 -0.1005,-0.021 c -0.41964,-0.0825 -1.16352,-0.0432 -1.70343,0.09 -1.25616,0.30921 -2.35041,1.12935 -3.21057,2.4063 -0.59457,0.88263 -0.99009,1.89357 -1.21293,3.10002 -0.1968,1.06509 -0.1983,1.1235 -0.1983,7.58067 v 5.9649 h -1.08888 -1.08888 l -3e-5,-7.48608 z"
|
||||
id="path1876" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0362961;stroke-linejoin:bevel"
|
||||
d="m 335.98129,189.54323 c -2.62656,-0.1134 -4.88073,-1.18362 -6.53217,-3.10116 -1.32438,-1.53783 -2.06556,-3.27531 -2.38359,-5.5878 -0.0924,-0.67071 -0.0936,-2.70963 -0.002,-3.46626 0.1236,-1.02396 0.2679,-1.73994 0.51606,-2.55945 0.8235,-2.72073 2.61351,-4.99845 4.80111,-6.1092 1.33455,-0.67758 2.90184,-0.98193 4.5321,-0.88008 1.7079,0.1068 3.00651,0.5583 4.1319,1.43682 0.32757,0.2559 0.8991,0.83427 1.14711,1.16121 1.1439,1.50795 1.8381,3.59547 2.1003,6.31554 0.0504,0.52383 0.1098,1.49682 0.1098,1.8057 l 1.2e-4,0.2451 h -7.6278 -7.6278 l 0.024,0.48375 c 0.075,1.56153 0.44094,3.03714 1.05954,4.27104 0.37419,0.74634 0.79491,1.35066 1.32336,1.90071 1.01376,1.05522 2.19021,1.68849 3.65853,1.96929 0.42336,0.081 0.62955,0.0978 1.37457,0.1134 0.52479,0.012 1.07097,0.001 1.3611,-0.024 1.61388,-0.1401 3.16101,-0.51303 4.7805,-1.15224 0.32652,-0.129 0.59898,-0.2292 0.60546,-0.2226 0.006,0.006 0.0453,0.38718 0.0864,0.84603 0.0411,0.45885 0.0822,0.88797 0.0912,0.95361 0.015,0.1149 0.009,0.1227 -0.1902,0.2121 -1.7916,0.80517 -3.98541,1.31487 -5.92326,1.37613 -0.3294,0.012 -0.65604,0.024 -0.72594,0.027 -0.0699,0.006 -0.38019,-0.002 -0.68961,-0.015 z m 6.23133,-13.18554 c -0.0591,-1.16901 -0.35121,-2.34747 -0.80586,-3.2526 -0.45792,-0.9117 -1.23573,-1.81122 -2.03418,-2.35245 -1.01961,-0.69114 -2.37819,-1.02192 -3.76728,-0.91722 -0.9042,0.0681 -1.58085,0.2487 -2.32809,0.62076 -0.58911,0.2934 -1.0392,0.62271 -1.5618,1.14261 -1.04076,1.03533 -1.72257,2.19609 -2.13825,3.64038 -0.1272,0.44184 -0.31065,1.31451 -0.31065,1.47759 v 0.0906 h 6.48444 6.48444 z"
|
||||
id="path1878" />
|
||||
<path
|
||||
style="fill:#ff7f2a;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.00620118;stroke-linejoin:bevel"
|
||||
d="m 50.862044,189.3734 c -0.303291,-0.024 -0.554784,-0.1056 -0.78756,-0.252 -0.11526,-0.0726 -0.21627,-0.1548 -0.33231,-0.2706 -0.22431,-0.2238 -0.366474,-0.43287 -0.476934,-0.70161 -0.18369,-0.44685 -0.20955,-1.00887 -0.06888,-1.4958 0.1251,-0.43269 0.40821,-0.85758 0.757158,-1.13604 0.412605,-0.32928 0.936354,-0.43947 1.454181,-0.30603 0.21978,0.0567 0.4365,0.1665 0.641811,0.32499 0.09129,0.0705 0.301623,0.2802 0.381936,0.38106 0.27891,0.34977 0.429213,0.70716 0.48114,1.14414 0.0111,0.0903 0.0111,0.39948 0,0.48987 -0.06159,0.51813 -0.26865,0.92478 -0.661704,1.29948 -0.326436,0.31116 -0.709485,0.48696 -1.133997,0.52047 -0.07446,0.006 -0.19752,0.006 -0.25488,0.002 z"
|
||||
id="path2003" />
|
||||
<path
|
||||
style="fill:#ff7f2a;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0109968;stroke-linejoin:bevel"
|
||||
d="m 216.94123,189.36752 c -0.51726,-0.0315 -0.97512,-0.2949 -1.32675,-0.76323 -0.2478,-0.32988 -0.37818,-0.68661 -0.4131,-1.12965 -0.0519,-0.65604 0.1791,-1.2891 0.64977,-1.78191 0.2568,-0.2688 0.57717,-0.44529 0.92586,-0.5097 0.1413,-0.027 0.42816,-0.027 0.57111,-6e-4 0.38352,0.0693 0.71907,0.2577 1.02084,0.5739 0.40176,0.42084 0.61104,0.9003 0.63585,1.45689 0.027,0.5913 -0.1734,1.12062 -0.58497,1.54935 -0.42063,0.43821 -0.91278,0.63957 -1.47861,0.60495 z"
|
||||
id="path2005" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0225439;stroke-linejoin:bevel"
|
||||
d="m 102.26473,163.77071 c -0.48993,-0.096 -0.86955,-0.37644 -1.06938,-0.7896 -0.174,-0.35997 -0.2061,-0.52104 -0.2055,-1.03449 4.5e-4,-0.38628 0.006,-0.46284 0.0522,-0.63123 0.1728,-0.64161 0.60519,-1.10346 1.17597,-1.2561 0.183,-0.0489 0.65316,-0.054 0.83415,-0.009 0.1815,0.045 0.46689,0.1851 0.6063,0.2973 0.31089,0.2505 0.5793,0.66225 0.68235,1.04703 0.0705,0.2631 0.0708,0.84519 5.4e-4,1.10466 -0.1764,0.65178 -0.62106,1.10604 -1.22382,1.25055 -0.2031,0.0486 -0.65523,0.06 -0.85272,0.021 z"
|
||||
id="path2161" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="heading"
|
||||
transform="translate(144.84863,-39.0695)">
|
||||
<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"
|
||||
transform="matrix(6,0,0,6,-498.93695,-594.0847)">
|
||||
<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(144.84863,-39.0695)">
|
||||
<path
|
||||
id="rect1698"
|
||||
style="fill:#f9f9f9;stroke:#5c5f5c;stroke-width:6.174;stroke-linejoin:round"
|
||||
inkscape:label="body"
|
||||
d="M -141.76163,48.090612 H -6.9369515 V 149.9153 H -141.76163 Z" />
|
||||
<path
|
||||
id="rect184-3"
|
||||
style="fill:#ff7f2a;stroke:#5c5f5c;stroke-width:6;stroke-linejoin:round"
|
||||
inkscape:label="foot-r"
|
||||
d="m -42.936952,125.9153 h 36.0000005 v 24 H -42.936952 Z" />
|
||||
<path
|
||||
id="rect184"
|
||||
style="fill:#ff7f2a;stroke:#5c5f5c;stroke-width:6;stroke-linejoin:round"
|
||||
inkscape:label="foot-l"
|
||||
d="m -141.76163,125.9153 h 36 v 24 h -36 z" />
|
||||
<path
|
||||
id="path11801"
|
||||
style="fill:#ff7f2a;stroke-width:6"
|
||||
inkscape:label="nose"
|
||||
inkscape:transform-center-y="2.9490877"
|
||||
d="M -74.349298,107.85026 -84.565276,90.155655 h 20.43195 z" />
|
||||
<path
|
||||
id="path6519-5"
|
||||
style="display:inline;fill:#5c5f5c;stroke-width:29.9999"
|
||||
inkscape:label="eye-r"
|
||||
d="m -56.67046,72.046755 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
|
||||
<path
|
||||
id="path6519"
|
||||
style="fill:#5c5f5c;stroke-width:29.9999"
|
||||
inkscape:label="eye-l"
|
||||
d="m -86.028172,72.046755 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 45 KiB |
@@ -0,0 +1,312 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="163.09068mm"
|
||||
height="53.164967mm"
|
||||
viewBox="0 0 163.09068 53.164966"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="logo-medium.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="1.4929971"
|
||||
inkscape:cx="304.08633"
|
||||
inkscape:cy="286.0019"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1385"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer6" />
|
||||
<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,-44.932163,-316.63259)">
|
||||
<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(-18.242052,-92.23446)">
|
||||
<g
|
||||
aria-label="Immutable . Friendly . Secure"
|
||||
transform="matrix(1.9025756,0,0,2.1024132,-99.78739,-118.81694)"
|
||||
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="../../../Pictures/logo-medium.svg"
|
||||
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.102789;stroke-linejoin:bevel"
|
||||
d="m 18.4196,137.38387 v -4.77968 h 0.308366 0.308367 v 4.77968 4.77967 H 18.727966 18.4196 Z"
|
||||
id="path1834" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.102789;stroke-linejoin:bevel"
|
||||
d="m 21.091489,139.61951 c -3.38e-4,-1.3992 -0.03064,-2.92938 -0.06727,-3.40038 l -0.06666,-0.85636 0.298551,0.0341 c 0.282601,0.0322 0.300207,0.0629 0.329618,0.5737 0.01709,0.2968 0.06862,0.53964 0.114506,0.53964 0.04588,0 0.205999,-0.17686 0.355801,-0.39302 0.483621,-0.69786 1.412484,-1.05856 2.188136,-0.8497 0.45557,0.12267 1.080087,0.68663 1.271148,1.14789 0.06844,0.16522 0.153512,0.29916 0.189056,0.29764 0.03556,-0.002 0.179948,-0.18963 0.320907,-0.41803 0.86151,-1.39595 2.779512,-1.46325 3.563747,-0.12505 0.452284,0.77176 0.545121,1.41843 0.546878,3.80939 l 0.0016,2.18426 H 29.829126 29.52076 v -2.04174 c 0,-2.14263 -0.08611,-2.90488 -0.396013,-3.50568 -0.516064,-1.00047 -1.774417,-1.11815 -2.605103,-0.24362 -0.549672,0.57867 -0.596487,0.84739 -0.596487,3.4236 v 2.36744 h -0.299165 -0.299159 l -0.03826,-2.54402 c -0.04133,-2.74801 -0.08797,-3.00834 -0.62865,-3.50672 -0.282733,-0.26061 -0.991065,-0.39732 -1.455166,-0.28084 -0.383762,0.0963 -1.084458,0.76545 -1.302194,1.24354 -0.163359,0.35869 -0.187542,0.70953 -0.189511,2.7496 l -0.0021,2.33844 H 21.40057 21.092204 Z"
|
||||
id="path1836" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.102789;stroke-linejoin:bevel"
|
||||
d="m 32.183632,139.72231 c -0.0053,-1.34268 -0.04001,-2.8691 -0.07709,-3.39205 l -0.06744,-0.95083 0.280712,3e-5 c 0.304086,3e-5 0.360744,0.11938 0.411411,0.86665 l 0.02741,0.40408 0.301149,-0.43628 c 0.530823,-0.76899 1.484852,-1.16209 2.292519,-0.94461 0.428345,0.11535 1.057302,0.70156 1.282123,1.19498 0.06301,0.1383 0.141838,0.24999 0.175165,0.24821 0.03334,-0.002 0.183076,-0.20523 0.332783,-0.45208 0.396927,-0.6545 1.092004,-1.03426 1.893903,-1.03474 0.708406,-4.2e-4 1.176676,0.24608 1.576827,0.83007 0.475265,0.6936 0.554132,1.18164 0.600831,3.71796 l 0.04397,2.38984 h -0.317982 -0.317986 l -0.0032,-1.8245 c -0.0037,-2.1373 -0.115041,-3.15188 -0.409073,-3.72823 -0.565943,-1.10934 -2.06848,-1.08989 -2.849885,0.0369 l -0.284083,0.40965 -0.03074,2.55309 -0.03074,2.5531 h -0.290708 -0.290709 l -0.04487,-2.49263 c -0.04069,-2.26087 -0.06513,-2.53776 -0.26261,-2.97813 -0.622786,-1.38872 -2.340472,-1.16857 -3.146657,0.40331 -0.142039,0.27694 -0.16872,0.70364 -0.16872,2.6982 v 2.36925 h -0.308367 -0.308366 z"
|
||||
id="path1838" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.102789;stroke-linejoin:bevel"
|
||||
d="m 44.682109,142.21471 c -0.226134,-0.08 -0.55853,-0.30531 -0.738663,-0.50077 -0.573696,-0.62254 -0.673704,-1.15865 -0.726245,-3.89323 l -0.04688,-2.44123 h 0.319056 0.319056 l 0.0016,1.67032 c 0.0021,2.07123 0.132393,3.36977 0.387181,3.86361 0.598879,1.16075 2.276777,1.12311 3.141948,-0.0705 l 0.323623,-0.44647 0.0308,-2.50848 0.0308,-2.50849 h 0.354652 0.354653 l 0.0026,2.90378 c 0.0016,1.59708 0.04958,3.108 0.107119,3.35759 0.08069,0.35009 0.07425,0.4734 -0.0282,0.53951 -0.292529,0.18877 -0.440082,0.0295 -0.581883,-0.62829 -0.130079,-0.60338 -0.154559,-0.64319 -0.283675,-0.4613 -0.769922,1.0846 -1.884786,1.50683 -2.967652,1.12394 z"
|
||||
id="path1840" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 52.2447,142.39185 c -0.276966,-0.0172 -0.528791,-0.10938 -0.73742,-0.26992 -0.03762,-0.0289 -0.112533,-0.0992 -0.16645,-0.15621 -0.271129,-0.28643 -0.449294,-0.69967 -0.537929,-1.2477 l -0.02741,-0.16938 -0.0037,-2.32597 -0.0037,-2.32597 h -0.622729 -0.622729 v -0.29642 -0.29642 h 0.623084 0.623083 v -1.03151 -1.03151 l 0.356965,-0.17836 c 0.196331,-0.0981 0.359664,-0.17836 0.362961,-0.17836 0.0032,0 0.006,0.54444 0.006,1.20987 v 1.20987 h 0.998141 0.99814 v 0.29642 0.29642 h -0.998436 -0.998432 l 0.0037,2.34411 c 0.0042,2.51988 0.0016,2.40294 0.06325,2.67345 0.08484,0.37068 0.250846,0.6229 0.484198,0.73565 0.132477,0.064 0.213006,0.078 0.450972,0.0782 0.298259,2.5e-4 0.536226,-0.0288 0.701241,-0.0856 0.03715,-0.0127 0.06891,-0.0218 0.07065,-0.0201 0.0016,0.002 0.01889,0.13378 0.0381,0.29343 l 0.03493,0.29027 -0.02498,0.0147 c -0.04154,0.0245 -0.176763,0.0737 -0.272986,0.0993 -0.224272,0.0597 -0.538226,0.0879 -0.798513,0.0717 z"
|
||||
id="path1842" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 56.097753,142.39143 c -0.705813,-0.0372 -1.3422,-0.43424 -1.63658,-1.0211 -0.127498,-0.25417 -0.184251,-0.49817 -0.19294,-0.82947 -0.0086,-0.32827 0.02678,-0.59387 0.114131,-0.85727 0.183351,-0.55276 0.567785,-0.97115 1.166283,-1.26932 0.6311,-0.31439 1.474068,-0.48224 2.538513,-0.50543 l 0.343615,-0.008 -0.0077,-0.19473 c -0.04038,-1.02769 -0.479198,-1.67898 -1.242732,-1.84441 -0.06325,-0.0137 -0.189585,-0.0311 -0.280744,-0.0387 -0.44059,-0.0367 -1.094666,0.0916 -1.974221,0.38728 -0.09933,0.0334 -0.181985,0.0593 -0.183663,0.0577 -0.0016,-0.002 -0.01979,-0.15543 -0.04027,-0.34165 -0.02043,-0.18623 -0.03995,-0.35533 -0.04334,-0.37579 l -0.0061,-0.0372 0.196754,-0.0621 c 0.637069,-0.20122 1.231562,-0.29519 1.878468,-0.29691 0.408887,-10e-4 0.655648,0.0319 0.941155,0.12559 0.775726,0.25472 1.244626,0.86919 1.412033,1.85038 0.06374,0.37359 0.06299,0.35157 0.07318,2.15967 0.0053,0.9316 0.01259,1.71287 0.0163,1.73616 0.0037,0.0233 0.0154,0.12401 0.02598,0.22383 0.02461,0.23218 0.07722,0.54331 0.130916,0.77422 0.02318,0.0998 0.04043,0.18312 0.03831,0.18523 -0.0053,0.005 -0.615744,0.14743 -0.618146,0.1441 -0.0011,-0.002 -0.05738,-0.24757 -0.125249,-0.54701 -0.06786,-0.29945 -0.126195,-0.55261 -0.129624,-0.56259 -0.0048,-0.0137 -0.01275,-0.009 -0.0326,0.018 -0.132154,0.18141 -0.327337,0.39131 -0.492088,0.52919 -0.523002,0.43768 -1.14718,0.63796 -1.869694,0.5999 z m 0.49258,-0.68097 c 0.347737,-0.0524 0.68534,-0.18588 1.008036,-0.39851 0.430234,-0.28349 0.68181,-0.59654 0.788437,-0.98109 l 0.03355,-0.12099 0.0042,-0.82153 0.0042,-0.82154 -0.336365,0.008 c -1.883907,0.0422 -2.917237,0.54306 -3.083136,1.49441 -0.0236,0.13541 -0.02334,0.45028 5.29e-4,0.59023 0.09801,0.57468 0.455454,0.95443 0.989563,1.05132 0.120062,0.0218 0.447373,0.0219 0.591343,1.7e-4 z"
|
||||
id="path1844" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 63.895733,142.39183 c -0.512996,-0.0248 -0.97916,-0.20035 -1.403445,-0.52838 -0.21852,-0.16894 -0.498946,-0.48244 -0.682139,-0.7626 l -0.07403,-0.11321 -0.0026,0.0769 c -0.0016,0.0423 -0.0084,0.26475 -0.01513,0.49432 -0.0068,0.22957 -0.01588,0.47049 -0.02021,0.53537 l -0.0078,0.11796 h -0.331491 -0.331491 l 0.0072,-0.0696 c 0.03223,-0.31049 0.0345,-0.6209 0.03879,-5.32947 l 0.0042,-4.88484 h 0.362511 0.362516 l 3.81e-4,2.34411 c 3.07e-4,1.84593 0.0037,2.33976 0.01513,2.32358 0.0081,-0.0113 0.05011,-0.0785 0.09338,-0.14934 0.126519,-0.20718 0.259122,-0.37486 0.440923,-0.55755 0.420206,-0.42226 0.852196,-0.63367 1.47067,-0.71971 0.156581,-0.0218 0.571093,-0.0184 0.744067,0.006 0.699278,0.0991 1.238552,0.41993 1.670484,0.99381 0.40286,0.53525 0.631761,1.14756 0.721233,1.92925 0.02132,0.18644 0.02154,0.96995 3.17e-4,1.16752 -0.06336,0.58955 -0.199898,1.08804 -0.420856,1.53653 -0.546757,1.10979 -1.440683,1.64733 -2.642653,1.58912 z m 0.456104,-0.6822 c 0.932228,-0.12168 1.512713,-0.67791 1.768841,-1.69492 0.159104,-0.63178 0.18716,-1.53034 0.06786,-2.17381 -0.15712,-0.84753 -0.581861,-1.50598 -1.161939,-1.8013 -0.306869,-0.15623 -0.580342,-0.21754 -0.973587,-0.21827 -0.33537,-5.3e-4 -0.537718,0.0369 -0.824669,0.15292 -0.308012,0.12454 -0.642567,0.38412 -0.882439,0.68466 -0.236876,0.2968 -0.412025,0.67489 -0.4876,1.05259 -0.05249,0.26234 -0.05806,0.39371 -0.05281,1.24616 0.0053,0.8672 0.0055,0.86875 0.08313,1.16148 0.189346,0.71374 0.738627,1.30423 1.410732,1.51655 0.08591,0.0271 0.292094,0.0709 0.396727,0.0843 0.104499,0.0133 0.525007,0.007 0.655732,-0.0104 z"
|
||||
id="path1846" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 70.537912,142.37439 c -0.460163,-0.0669 -0.842968,-0.24895 -1.153102,-0.54846 -0.550248,-0.53142 -0.8383,-1.37267 -0.903409,-2.63839 -0.0075,-0.14657 -0.01217,-1.56597 -0.01222,-3.74757 l -1.16e-4,-3.51164 h 0.362548 0.362548 l 0.0048,3.63868 c 0.0048,3.71784 0.0042,3.70908 0.05117,4.13472 0.05598,0.5102 0.185235,1.02315 0.328575,1.30388 0.236347,0.46289 0.598599,0.69175 1.141487,0.72114 l 0.13962,0.008 -0.03567,0.32969 -0.03567,0.32969 -0.06764,-10e-4 c -0.0372,-5.3e-4 -0.119364,-0.009 -0.182579,-0.018 z"
|
||||
id="path1848" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 74.687759,142.39206 c -0.438674,-0.0197 -0.854054,-0.122 -1.21919,-0.30032 -0.200157,-0.0977 -0.290745,-0.15309 -0.474625,-0.28996 -0.537962,-0.40042 -0.94334,-1.00186 -1.148583,-1.70412 -0.04112,-0.14071 -0.08724,-0.36753 -0.116316,-0.57204 -0.03048,-0.21438 -0.03752,-0.82089 -0.01259,-1.08201 0.06128,-0.64148 0.189405,-1.10602 0.440478,-1.59707 0.326755,-0.63905 0.811811,-1.13656 1.375394,-1.4107 0.410306,-0.19957 0.788723,-0.28155 1.294559,-0.28043 0.299021,5.3e-4 0.50546,0.0249 0.750411,0.088 0.882597,0.22757 1.469935,0.90241 1.741805,2.00129 0.10141,0.40989 0.154083,0.81677 0.182203,1.40744 l 0.0076,0.16031 h -2.548287 -2.548287 l 0.0061,0.0575 c 0.0032,0.0316 0.0093,0.11192 0.01323,0.17846 0.03365,0.57114 0.201612,1.13688 0.462777,1.55908 0.166042,0.26844 0.422667,0.54692 0.65513,0.71094 0.295079,0.20821 0.653066,0.34273 1.044744,0.39258 0.197739,0.0252 0.718386,0.0187 0.949505,-0.0119 0.512974,-0.0678 1.079934,-0.22232 1.531371,-0.41744 0.03217,-0.0139 0.06254,-0.0253 0.06752,-0.0253 0.0095,0 0.06935,0.63808 0.06055,0.6454 -0.0026,0.002 -0.0595,0.0274 -0.126047,0.0557 -0.61631,0.26231 -1.278409,0.41151 -1.911594,0.43076 -0.113125,0.004 -0.224731,0.008 -0.248025,0.009 -0.02328,0.002 -0.12673,-0.001 -0.229876,-0.005 z m 2.093034,-4.29643 c -1.32e-4,-0.16386 -0.04334,-0.48319 -0.09136,-0.67545 -0.112416,-0.44993 -0.307927,-0.791 -0.631222,-1.10118 -0.315393,-0.3026 -0.682963,-0.45906 -1.163383,-0.49521 -0.749454,-0.0564 -1.381448,0.23465 -1.862021,0.8575 -0.276368,0.35818 -0.472345,0.81818 -0.552365,1.29652 -0.01058,0.0631 -0.02196,0.12704 -0.02529,0.14202 l -0.0061,0.0272 h 2.165895 2.165895 l -3.7e-5,-0.0514 z"
|
||||
id="path1850" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 89.992597,137.36668 v -4.84552 h 2.480231 2.480231 v 0.33272 0.33271 h -2.11727 -2.11727 v 1.8511 1.8511 h 1.972087 1.972088 v 0.33271 0.33271 h -1.972088 -1.972087 v 2.329 2.329 h -0.362961 -0.362961 z"
|
||||
id="path1852" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 96.416876,139.62007 c -1.32e-4,-2.80904 -0.0053,-3.09289 -0.06728,-3.65078 -0.02027,-0.18271 -0.06885,-0.48979 -0.09429,-0.59606 l -0.01667,-0.0698 0.309875,0.003 0.309874,0.003 0.03889,0.11494 c 0.08135,0.24051 0.12917,0.57711 0.146098,1.02834 l 0.0088,0.23589 0.05851,-0.1391 c 0.194162,-0.46157 0.459602,-0.82564 0.777457,-1.0663 0.118655,-0.0898 0.374475,-0.2173 0.518943,-0.25855 0.237776,-0.0679 0.546878,-0.0903 0.771435,-0.0559 l 0.10586,0.0162 v 0.32596 0.32596 l -0.04535,-0.01 c -0.07363,-0.0156 -0.341916,-0.007 -0.456459,0.0142 -0.325395,0.061 -0.591582,0.20022 -0.844672,0.44186 -0.369946,0.35321 -0.60244,0.79574 -0.715364,1.36164 -0.07461,0.37386 -0.07142,0.26872 -0.0762,2.5131 l -0.0042,2.05375 h -0.362468 -0.362469 z"
|
||||
id="path1854" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 100.40957,138.75804 v -3.45418 h 0.35691 0.35691 v 3.45418 3.45417 h -0.35691 -0.35691 z"
|
||||
id="path1856" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 105.59385,142.39151 c -0.6654,-0.0283 -1.25771,-0.24307 -1.76229,-0.63905 -0.13023,-0.1022 -0.37081,-0.34141 -0.47457,-0.47185 -0.53397,-0.67131 -0.78011,-1.48371 -0.75329,-2.48628 0.008,-0.28217 0.0183,-0.41825 0.0513,-0.64728 0.12221,-0.84944 0.4688,-1.58684 1.00869,-2.14604 0.448,-0.46404 0.99141,-0.73661 1.64587,-0.82555 0.20461,-0.0278 0.61454,-0.0275 0.82683,5.3e-4 1.15679,0.1536 1.85983,0.91064 2.1417,2.30622 0.0702,0.34747 0.12872,0.90685 0.12872,1.23003 v 0.10002 h -2.54072 -2.54072 l 2.4e-4,0.0756 c 3.4e-4,0.10274 0.0304,0.40549 0.0546,0.55015 0.19569,1.16863 0.86478,1.98358 1.82008,2.21685 0.25496,0.0623 0.42348,0.0772 0.78677,0.0695 0.64016,-0.0134 1.19157,-0.12927 1.86194,-0.3912 0.1091,-0.0427 0.20029,-0.0756 0.20264,-0.0732 0.01,0.01 0.0626,0.63225 0.0542,0.64075 -0.0197,0.0198 -0.3998,0.16871 -0.57879,0.22666 -0.63028,0.20408 -1.27382,0.29193 -1.93316,0.26391 z m 2.08308,-4.40477 c -0.0319,-0.66713 -0.26283,-1.2229 -0.67985,-1.63634 -0.3265,-0.32372 -0.69686,-0.48696 -1.19452,-0.52654 -0.43749,-0.0348 -0.88361,0.064 -1.22519,0.27142 -0.36492,0.22154 -0.69867,0.59578 -0.914,1.02486 -0.14147,0.2819 -0.25497,0.65096 -0.29651,0.96414 l -0.008,0.0628 h 2.16304 2.16303 z"
|
||||
id="path1858" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 109.94026,139.37809 c -0.004,-2.56706 -0.006,-2.85806 -0.0251,-3.08819 -0.0222,-0.26713 -0.0759,-0.83071 -0.0886,-0.92857 l -0.007,-0.0575 h 0.33932 0.33931 l 0.0248,0.10586 c 0.0525,0.22428 0.0924,0.5523 0.10604,0.87076 0.0115,0.26976 0.0122,0.27115 0.0761,0.15387 0.31286,-0.57401 0.75972,-0.97794 1.2836,-1.16029 0.58453,-0.20346 1.41078,-0.14755 1.9583,0.13251 0.47048,0.24066 0.81264,0.656 1.01711,1.23465 0.0865,0.2447 0.1633,0.60057 0.19974,0.9251 0.0357,0.31814 0.0423,0.73381 0.0425,2.68288 l 2.1e-4,1.96301 h -0.36242 -0.3624 l -0.005,-2.16264 c -0.005,-2.30523 -0.004,-2.24733 -0.0633,-2.59474 -0.14884,-0.86461 -0.56532,-1.39361 -1.23625,-1.57025 -0.26568,-0.0699 -0.64299,-0.086 -0.87468,-0.0371 -0.32007,0.0674 -0.59469,0.22305 -0.87551,0.49615 -0.38184,0.37133 -0.62351,0.794 -0.72359,1.26547 l -0.0281,0.13272 -0.003,2.23523 -0.003,2.23524 h -0.36229 -0.36229 z"
|
||||
id="path1860" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 119.4287,142.39186 c -0.97254,-0.0437 -1.72903,-0.53095 -2.22292,-1.43187 -0.20145,-0.36746 -0.36031,-0.83543 -0.43809,-1.2905 -0.17154,-1.00371 -0.0764,-2.02894 0.25996,-2.80075 0.38253,-0.87778 1.02011,-1.45538 1.81427,-1.64357 0.51957,-0.12312 1.12835,-0.09 1.60307,0.0872 0.48403,0.18069 0.89719,0.51746 1.22802,1.00097 0.0466,0.0681 0.10646,0.16266 0.13308,0.21019 0.0266,0.0475 0.0525,0.0866 0.0575,0.0867 0.005,1.5e-4 0.009,-1.05322 0.009,-2.34082 v -2.34109 h 0.36296 0.36296 l 3e-5,4.72151 c 3e-5,4.49762 0.004,5.11138 0.0346,5.46256 l 0.009,0.0998 h -0.32852 -0.32852 l -0.007,-0.0635 c -0.009,-0.0755 -0.032,-0.71082 -0.0357,-0.97697 l -0.003,-0.18753 -0.0591,0.0907 c -0.17859,0.27436 -0.47499,0.60953 -0.68659,0.77642 -0.44136,0.34808 -0.92914,0.52623 -1.49259,0.54514 -0.0532,0.002 -0.17574,-2.9e-4 -0.27222,-0.005 z m 0.71745,-0.69856 c 0.19011,-0.0387 0.33272,-0.0881 0.51057,-0.17686 0.19803,-0.0988 0.35003,-0.20695 0.51835,-0.36891 0.28197,-0.27134 0.48911,-0.61224 0.59377,-0.97721 0.0952,-0.33198 0.1071,-0.50072 0.10047,-1.42495 -0.006,-0.81632 -0.01,-0.87163 -0.0869,-1.17193 -0.11845,-0.46217 -0.34226,-0.83582 -0.71116,-1.18728 -0.31968,-0.30456 -0.66926,-0.47818 -1.09812,-0.54541 -0.16881,-0.0265 -0.52855,-0.0264 -0.70059,1.6e-4 -0.24499,0.0378 -0.49288,0.11817 -0.67013,0.2173 -0.59476,0.3326 -1.01376,1.0442 -1.14621,1.94662 -0.082,0.55841 -0.0544,1.32786 0.0679,1.89545 0.19097,0.8863 0.63787,1.46184 1.31894,1.69858 0.28636,0.0995 0.49681,0.12927 0.8821,0.12459 0.24186,-0.003 0.3122,-0.008 0.42103,-0.0302 z"
|
||||
id="path1862" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 126.58508,142.37401 c -0.7441,-0.1157 -1.27117,-0.50286 -1.61454,-1.18599 -0.21576,-0.42923 -0.33958,-0.91494 -0.42053,-1.64962 -0.019,-0.17193 -0.021,-0.49629 -0.0245,-3.8988 l -0.004,-3.71127 h 0.35644 0.35645 l 0.005,3.54794 c 0.005,3.61064 0.006,3.70542 0.0515,4.15287 0.0676,0.6674 0.21893,1.21647 0.42153,1.52965 0.0695,0.10744 0.23303,0.27902 0.32659,0.34265 0.20221,0.13754 0.50553,0.22655 0.77273,0.22675 0.066,5e-5 0.0938,0.004 0.0938,0.0149 0,0.0265 -0.0614,0.59531 -0.0673,0.62337 -0.005,0.0246 -0.0124,0.0271 -0.0751,0.0259 -0.0382,-5.3e-4 -0.11833,-0.009 -0.17822,-0.0183 z"
|
||||
id="path1864" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 127.7324,145.35991 c -0.004,-0.0178 -0.0421,-0.15751 -0.0836,-0.31056 -0.0415,-0.15305 -0.0746,-0.2787 -0.0736,-0.27923 0.001,-5.3e-4 0.0705,-0.0231 0.15437,-0.0501 0.59914,-0.19319 1.11392,-0.61986 1.53875,-1.27538 0.2291,-0.35349 0.45727,-0.82877 0.63229,-1.31709 0.0502,-0.14016 0.0546,-0.20052 0.0225,-0.31314 -0.0102,-0.0358 -0.5784,-1.45407 -1.26265,-3.1517 -0.68425,-1.69763 -1.26872,-3.14785 -1.29881,-3.22271 l -0.0547,-0.13611 h 0.37797 0.37798 l 0.62696,1.5698 c 0.34484,0.8634 0.87064,2.17958 1.16844,2.92486 0.29781,0.74528 0.5461,1.35384 0.55176,1.35235 0.006,-0.002 0.50152,-1.31572 1.1019,-2.92052 0.60038,-1.60481 1.09364,-2.91985 1.09611,-2.92233 0.003,-0.003 0.17572,-0.003 0.38497,-0.001 l 0.38046,0.003 -0.79047,1.98418 c -1.77735,4.46137 -2.01866,5.06474 -2.0928,5.23269 -0.68871,1.56017 -1.57313,2.50635 -2.64993,2.83496 l -0.0998,0.0305 z"
|
||||
id="path1866" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 147.05605,142.39197 c -0.76825,-0.0274 -1.45102,-0.23495 -2.00838,-0.61046 -0.0732,-0.0493 -0.1429,-0.0973 -0.15489,-0.10653 -0.0205,-0.0159 -0.0135,-0.0364 0.11888,-0.34769 0.0774,-0.18196 0.1427,-0.33284 0.14516,-0.33529 0.003,-0.003 0.0551,0.0336 0.11704,0.08 0.35576,0.26692 0.7116,0.43761 1.14209,0.54786 0.28966,0.0742 0.47291,0.0975 0.82376,0.10499 0.33529,0.007 0.48955,-0.004 0.72374,-0.0512 0.70304,-0.1424 1.24493,-0.57879 1.4436,-1.16254 0.0977,-0.28702 0.13792,-0.63374 0.11224,-0.96706 -0.0465,-0.60262 -0.2178,-0.97667 -0.58967,-1.28709 -0.32454,-0.27092 -0.67833,-0.46033 -1.25163,-0.67011 -0.6697,-0.24504 -1.08548,-0.45919 -1.4927,-0.76882 -0.14989,-0.11396 -0.43634,-0.39722 -0.5375,-0.53151 -0.34518,-0.45821 -0.50377,-0.97168 -0.48098,-1.55734 0.0282,-0.72534 0.27565,-1.25816 0.78826,-1.69748 0.34079,-0.29206 0.75946,-0.50034 1.19386,-0.59391 0.24353,-0.0524 0.35146,-0.0638 0.66934,-0.0702 0.56757,-0.0114 1.05374,0.0604 1.48926,0.21979 0.1272,0.0466 0.42057,0.1876 0.51541,0.24777 l 0.0568,0.036 -0.146,0.29984 c -0.0803,0.16492 -0.14983,0.30408 -0.15451,0.30926 -0.005,0.005 -0.0544,-0.016 -0.11041,-0.0471 -0.38284,-0.21229 -0.83065,-0.349 -1.28744,-0.39301 -0.18737,-0.018 -0.61451,-0.008 -0.7684,0.0188 -0.45543,0.0782 -0.81327,0.24969 -1.08435,0.51973 -0.22271,0.22186 -0.34527,0.45664 -0.41185,0.78898 -0.031,0.15489 -0.0311,0.5621 -9e-5,0.70596 0.10269,0.47659 0.35349,0.8406 0.81802,1.18722 0.26831,0.2002 0.59107,0.36927 1.09568,0.57396 0.92096,0.37356 1.4131,0.66047 1.80326,1.05124 0.23261,0.23298 0.36319,0.44472 0.46447,0.75316 0.11162,0.33991 0.15126,0.64579 0.14238,1.09875 -0.007,0.33168 -0.02,0.45179 -0.0768,0.68358 -0.14897,0.60758 -0.51561,1.10908 -1.08106,1.4787 -0.56172,0.36718 -1.19687,0.52128 -2.02653,0.49166 z"
|
||||
id="path1868" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 154.34551,142.39237 c -0.93633,-0.0436 -1.74092,-0.46045 -2.29038,-1.18669 -0.1415,-0.18703 -0.2246,-0.32227 -0.32938,-0.53606 -0.17644,-0.36 -0.28018,-0.71552 -0.3407,-1.16752 -0.0313,-0.23338 -0.0309,-0.91863 5.3e-4,-1.17962 0.0979,-0.81132 0.33808,-1.44177 0.7663,-2.01189 0.12116,-0.16132 0.37713,-0.42994 0.51786,-0.54349 0.40208,-0.32438 0.86305,-0.51957 1.3974,-0.59169 0.18197,-0.0246 0.60018,-0.0275 0.78037,-0.005 0.8494,0.10383 1.46071,0.52612 1.83722,1.26914 0.28454,0.56151 0.43276,1.24515 0.47459,2.18889 l 0.008,0.1845 h -2.54533 -2.54534 l 0.009,0.16555 c 0.0563,1.06062 0.47749,1.90828 1.18294,2.38047 0.27673,0.18522 0.63503,0.31124 1.01604,0.35736 0.13282,0.0161 0.57208,0.0159 0.75043,-3.2e-4 0.53418,-0.0485 1.11645,-0.19394 1.64319,-0.41031 0.0686,-0.0282 0.1265,-0.0494 0.12856,-0.047 0.002,0.002 0.017,0.14769 0.0332,0.32301 l 0.0294,0.31877 -0.0673,0.0298 c -0.61392,0.27213 -1.32296,0.43735 -1.96676,0.45829 -0.10646,0.004 -0.21807,0.008 -0.24802,0.01 -0.0299,0.002 -0.13883,-5.3e-4 -0.24197,-0.005 z m 2.09294,-4.31489 c -2e-4,-0.10786 -0.0332,-0.3947 -0.0616,-0.53536 -0.10447,-0.51724 -0.33713,-0.93701 -0.70159,-1.26584 -0.36904,-0.33297 -0.88736,-0.49499 -1.44846,-0.45276 -0.30028,0.0226 -0.50922,0.0779 -0.7584,0.20095 -0.21202,0.10465 -0.35671,0.21048 -0.54464,0.39836 -0.31889,0.31879 -0.52107,0.6493 -0.66579,1.0883 -0.0619,0.18767 -0.13858,0.51844 -0.13858,0.59748 v 0.0385 h 2.15961 2.15962 l -1.3e-4,-0.0696 z"
|
||||
id="path1870" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 161.33855,142.392 c -1.08146,-0.0419 -1.9512,-0.51556 -2.50721,-1.36546 -0.10294,-0.15736 -0.25407,-0.45753 -0.32128,-0.63812 -0.19148,-0.51457 -0.28369,-1.12781 -0.26423,-1.75742 0.033,-1.06909 0.31429,-1.85258 0.89587,-2.49558 0.42512,-0.47001 0.97385,-0.7784 1.61611,-0.90825 0.72196,-0.14596 1.606,-0.0776 2.23826,0.17321 0.12357,0.049 0.36769,0.16666 0.44228,0.21315 l 0.037,0.023 -0.12413,0.32509 c -0.0683,0.1788 -0.12584,0.32681 -0.12794,0.32891 -0.002,0.002 -0.0418,-0.0209 -0.0883,-0.0513 -0.12185,-0.0795 -0.37704,-0.20073 -0.53816,-0.25561 -0.62717,-0.21363 -1.41267,-0.22325 -1.98375,-0.0243 -0.73735,0.25688 -1.30777,0.93118 -1.52981,1.80841 -0.0831,0.32819 -0.11001,0.57875 -0.10909,1.01444 0.001,0.38027 0.0158,0.54993 0.073,0.828 0.22062,1.07202 0.91126,1.84151 1.84616,2.05697 0.36099,0.0832 0.91731,0.0829 1.3345,-5.3e-4 0.33635,-0.0674 0.6823,-0.20489 0.91791,-0.36472 0.0544,-0.0369 0.0733,-0.0445 0.0809,-0.0322 0.026,0.042 0.24219,0.62052 0.23699,0.63407 -0.0101,0.0261 -0.44052,0.23221 -0.59454,0.28462 -0.48293,0.16433 -0.94852,0.22632 -1.53048,0.20377 z"
|
||||
id="path1872" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 166.87975,142.39219 c -1.09932,-0.0508 -1.77948,-0.75484 -2.00236,-2.07265 -0.0851,-0.50312 -0.0905,-0.68132 -0.0906,-3.00428 l -1.2e-4,-2.0114 h 0.36243 0.36243 l 0.005,2.11425 c 0.005,2.27223 0.003,2.2088 0.0684,2.61029 0.11061,0.68288 0.34684,1.15772 0.71377,1.4347 0.11673,0.0881 0.30387,0.17589 0.46903,0.21998 0.14095,0.0376 0.14586,0.038 0.43294,0.0383 0.31989,2e-4 0.42138,-0.014 0.65333,-0.0913 0.51872,-0.1729 0.98371,-0.59183 1.24056,-1.11767 0.11752,-0.24057 0.18647,-0.48562 0.21689,-0.77082 0.008,-0.0765 0.0126,-0.87114 0.0126,-2.27757 v -2.1601 h 0.36268 0.36269 l 0.004,2.77968 c 0.004,2.55555 0.006,2.79126 0.0248,2.92345 0.0476,0.32802 0.13184,0.694 0.23181,1.00724 0.0293,0.0918 0.0522,0.16798 0.0509,0.1692 -0.001,0.001 -0.14395,0.0384 -0.31696,0.0827 -0.17301,0.0443 -0.32331,0.083 -0.334,0.0862 -0.0443,0.0128 -0.21624,-0.67688 -0.28249,-1.13319 -0.0166,-0.11446 -0.0325,-0.21037 -0.0352,-0.21315 -0.003,-0.003 -0.0226,0.0256 -0.044,0.0631 -0.10303,0.18009 -0.3558,0.49817 -0.50744,0.63856 -0.38939,0.36051 -0.82188,0.57279 -1.33751,0.65651 -0.15846,0.0257 -0.41937,0.0375 -0.62308,0.0281 z"
|
||||
id="path1874" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 171.97328,139.71685 c -10e-6,-2.8742 -0.008,-3.25807 -0.085,-3.8625 -0.0226,-0.17862 -0.0767,-0.49221 -0.0915,-0.53078 -0.007,-0.0179 0.0209,-0.0197 0.30138,-0.0197 h 0.30894 l 0.0264,0.0696 c 0.0401,0.10575 0.0913,0.31969 0.11376,0.47487 0.0186,0.12825 0.0288,0.26245 0.0524,0.68357 l 0.009,0.15729 0.035,-0.0907 c 0.0553,-0.14348 0.20724,-0.43657 0.2964,-0.57185 0.31828,-0.48289 0.72215,-0.76117 1.23538,-0.85122 0.14036,-0.0246 0.46486,-0.0259 0.58074,-0.002 l 0.0786,0.016 0.003,0.32456 0.003,0.32456 -0.0335,-0.007 c -0.13988,-0.0275 -0.38784,-0.0144 -0.56781,0.03 -0.41872,0.10307 -0.78347,0.37645 -1.07019,0.8021 -0.19819,0.29421 -0.33003,0.63119 -0.40431,1.03334 -0.0656,0.35503 -0.0661,0.3745 -0.0661,2.52689 v 1.9883 h -0.36296 -0.36296 l -1e-5,-2.49536 z"
|
||||
id="path1876" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.0120987;stroke-linejoin:bevel"
|
||||
d="m 178.51869,142.39237 c -0.87552,-0.0378 -1.62691,-0.39454 -2.17739,-1.03372 -0.44146,-0.51261 -0.68852,-1.09177 -0.79453,-1.8626 -0.0308,-0.22357 -0.0312,-0.90321 -5.3e-4,-1.15542 0.0412,-0.34132 0.0893,-0.57998 0.17202,-0.85315 0.2745,-0.90691 0.87117,-1.66615 1.60037,-2.0364 0.44485,-0.22586 0.96728,-0.32731 1.5107,-0.29336 0.5693,0.0356 1.00217,0.1861 1.3773,0.47894 0.10919,0.0853 0.2997,0.27809 0.38237,0.38707 0.3813,0.50265 0.6127,1.19849 0.7001,2.10518 0.0168,0.17461 0.0366,0.49894 0.0366,0.6019 l 4e-5,0.0817 h -2.5426 -2.5426 l 0.008,0.16125 c 0.025,0.52051 0.14698,1.01238 0.35318,1.42368 0.12473,0.24878 0.26497,0.45022 0.44112,0.63357 0.33792,0.35174 0.73007,0.56283 1.21951,0.65643 0.14112,0.027 0.20985,0.0326 0.45819,0.0378 0.17493,0.004 0.35699,3.9e-4 0.4537,-0.008 0.53796,-0.0467 1.05367,-0.17101 1.5935,-0.38408 0.10884,-0.043 0.19966,-0.0764 0.20182,-0.0742 0.002,0.002 0.0151,0.12906 0.0288,0.28201 0.0137,0.15295 0.0274,0.29599 0.0304,0.31787 0.005,0.0383 0.003,0.0409 -0.0634,0.0707 -0.5972,0.26839 -1.32847,0.43829 -1.97442,0.45871 -0.1098,0.004 -0.21868,0.008 -0.24198,0.009 -0.0233,0.002 -0.12673,-5.3e-4 -0.22987,-0.005 z m 2.07711,-4.39518 c -0.0197,-0.38967 -0.11707,-0.78249 -0.26862,-1.0842 -0.15264,-0.3039 -0.41191,-0.60374 -0.67806,-0.78415 -0.33987,-0.23038 -0.79273,-0.34064 -1.25576,-0.30574 -0.3014,0.0227 -0.52695,0.0829 -0.77603,0.20692 -0.19637,0.0978 -0.3464,0.20757 -0.5206,0.38087 -0.34692,0.34511 -0.57419,0.73203 -0.71275,1.21346 -0.0424,0.14728 -0.10355,0.43817 -0.10355,0.49253 v 0.0302 h 2.16148 2.16148 z"
|
||||
id="path1878" />
|
||||
<path
|
||||
style="fill:#ff7f2a;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.00206706;stroke-linejoin:bevel"
|
||||
d="m 83.478942,142.33576 c -0.101097,-0.008 -0.184928,-0.0352 -0.26252,-0.084 -0.03842,-0.0242 -0.07209,-0.0516 -0.11077,-0.0902 -0.07477,-0.0746 -0.122158,-0.14429 -0.158978,-0.23387 -0.06123,-0.14895 -0.06985,-0.33629 -0.02296,-0.4986 0.0417,-0.14423 0.13607,-0.28586 0.252386,-0.37868 0.137535,-0.10976 0.312118,-0.14649 0.484727,-0.10201 0.07326,0.0189 0.1455,0.0555 0.213937,0.10833 0.03043,0.0235 0.100541,0.0934 0.127312,0.12702 0.09297,0.11659 0.143071,0.23572 0.16038,0.38138 0.0037,0.0301 0.0037,0.13316 0,0.16329 -0.02053,0.17271 -0.08955,0.30826 -0.220568,0.43316 -0.108812,0.10372 -0.236495,0.16232 -0.377999,0.17349 -0.02482,0.002 -0.06584,0.002 -0.08496,5.3e-4 z"
|
||||
id="path2003" />
|
||||
<path
|
||||
style="fill:#ff7f2a;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.00366559;stroke-linejoin:bevel"
|
||||
d="m 138.83867,142.3338 c -0.17242,-0.0105 -0.32504,-0.0983 -0.44225,-0.25441 -0.0826,-0.10996 -0.12606,-0.22887 -0.1377,-0.37655 -0.0173,-0.21868 0.0597,-0.4297 0.21659,-0.59397 0.0856,-0.0896 0.19239,-0.14843 0.30862,-0.1699 0.0471,-0.009 0.14272,-0.009 0.19037,-2e-4 0.12784,0.0231 0.23969,0.0859 0.34028,0.1913 0.13392,0.14028 0.20368,0.3001 0.21195,0.48563 0.009,0.1971 -0.0578,0.37354 -0.19499,0.51645 -0.14021,0.14607 -0.30426,0.21319 -0.49287,0.20165 z"
|
||||
id="path2005" />
|
||||
<path
|
||||
style="fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-width:0.00751464;stroke-linejoin:bevel"
|
||||
d="m 100.61317,133.80153 c -0.16331,-0.032 -0.28985,-0.12548 -0.35646,-0.2632 -0.058,-0.11999 -0.0687,-0.17368 -0.0685,-0.34483 1.5e-4,-0.12876 0.002,-0.15428 0.0174,-0.21041 0.0576,-0.21387 0.20173,-0.36782 0.39199,-0.4187 0.061,-0.0163 0.21772,-0.018 0.27805,-0.003 0.0605,0.015 0.15563,0.0617 0.2021,0.0991 0.10363,0.0835 0.1931,0.22075 0.22745,0.34901 0.0235,0.0877 0.0236,0.28173 1.8e-4,0.36822 -0.0588,0.21726 -0.20702,0.36868 -0.40794,0.41685 -0.0677,0.0162 -0.21841,0.02 -0.28424,0.007 z"
|
||||
id="path2161" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="heading"
|
||||
transform="translate(-18.242052,-92.23446)">
|
||||
<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"
|
||||
transform="matrix(2,0,0,2,-99.78739,-118.81694)">
|
||||
<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(-18.242052,-92.23446)">
|
||||
<path
|
||||
id="rect1698"
|
||||
style="fill:#f9f9f9;stroke:#5c5f5c;stroke-width:2.058;stroke-linejoin:round"
|
||||
inkscape:label="body"
|
||||
d="M 19.271052,95.241499 H 64.21261 V 129.18306 H 19.271052 Z" />
|
||||
<path
|
||||
id="rect184-3"
|
||||
style="fill:#ff7f2a;stroke:#5c5f5c;stroke-width:2;stroke-linejoin:round"
|
||||
inkscape:label="foot-r"
|
||||
d="m 52.21261,121.18306 h 12 v 8 h -12 z" />
|
||||
<path
|
||||
id="rect184"
|
||||
style="fill:#ff7f2a;stroke:#5c5f5c;stroke-width:2;stroke-linejoin:round"
|
||||
inkscape:label="foot-l"
|
||||
d="m 19.271052,121.18306 h 12 v 8 h -12 z" />
|
||||
<path
|
||||
id="path11801"
|
||||
style="fill:#ff7f2a;stroke-width:2"
|
||||
inkscape:label="nose"
|
||||
inkscape:transform-center-y="0.98302844"
|
||||
d="m 41.741828,115.16138 -3.405326,-5.8982 h 6.81065 z" />
|
||||
<path
|
||||
id="path6519-5"
|
||||
style="display:inline;fill:#5c5f5c;stroke-width:9.99998"
|
||||
inkscape:label="eye-r"
|
||||
d="m 47.634774,103.22688 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z" />
|
||||
<path
|
||||
id="path6519"
|
||||
style="fill:#5c5f5c;stroke-width:9.99998"
|
||||
inkscape:label="eye-l"
|
||||
d="m 37.84887,103.22688 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,338 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,187 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 210 297"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="logo2.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="5.1481021"
|
||||
inkscape:cx="371.01052"
|
||||
inkscape:cy="472.98985"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1385"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs2">
|
||||
<rect
|
||||
x="505.95288"
|
||||
y="579.6032"
|
||||
width="127.6438"
|
||||
height="127.94966"
|
||||
id="rect1266" />
|
||||
<rect
|
||||
x="309.92126"
|
||||
y="404.51989"
|
||||
width="483.77954"
|
||||
height="358.02926"
|
||||
id="rect600" />
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect5591"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
</defs>
|
||||
<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,-26.690111,-224.39813)">
|
||||
<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">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77333px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke:#5c5f5c;stroke-width:0;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="85.018883"
|
||||
y="131.54915"
|
||||
id="text9503"
|
||||
inkscape:label="linux-netconf"
|
||||
inkscape:export-filename="logo.png"
|
||||
inkscape:export-xdpi="191.95932"
|
||||
inkscape:export-ydpi="191.95932"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan9519"
|
||||
x="85.018883"
|
||||
y="131.54915"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77333px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-opacity:1"
|
||||
id="tspan11822">Linux</tspan> <tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77333px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#ff7f2a;fill-opacity:1;stroke:#5c5f5c;stroke-opacity:1"
|
||||
id="tspan9929">♥</tspan> <tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77333px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5c5f5c;fill-opacity:1;stroke:#5c5f5c;stroke-opacity:1"
|
||||
id="tspan11824">NETCONF</tspan></tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="heading">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.4px;font-family:'URW Bookman';-inkscape-font-specification:'URW Bookman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5c5f5c;stroke-width:1.029;fill-opacity:1"
|
||||
x="84.745331"
|
||||
y="124.1693"
|
||||
id="text1160"
|
||||
inkscape:label="infix"
|
||||
inkscape:export-filename="logo-plain.png"
|
||||
inkscape:export-xdpi="191.95932"
|
||||
inkscape:export-ydpi="191.95932"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1272"
|
||||
x="84.745331"
|
||||
y="124.1693">Infix</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="tux"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:inline">
|
||||
<rect
|
||||
style="fill:#f9f9f9;stroke:#5c5f5c;stroke-width:1.029;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
|
||||
id="rect1698"
|
||||
width="22.470779"
|
||||
height="16.970779"
|
||||
x="59.529221"
|
||||
y="107.02922"
|
||||
inkscape:label="body"
|
||||
inkscape:export-filename="jack.png"
|
||||
inkscape:export-xdpi="191.95932"
|
||||
inkscape:export-ydpi="191.95932" />
|
||||
<rect
|
||||
style="fill:#ff7f2a;stroke:#5c5f5c;stroke-width:1;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect184-3"
|
||||
width="6"
|
||||
height="4"
|
||||
x="76"
|
||||
y="120"
|
||||
inkscape:label="foot-r" />
|
||||
<rect
|
||||
style="fill:#ff7f2a;stroke:#5c5f5c;stroke-width:1;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect184"
|
||||
width="6"
|
||||
height="4"
|
||||
x="59.529221"
|
||||
y="120"
|
||||
inkscape:label="foot-l" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ff7f2a;stroke:none;stroke-width:1;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path11801"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="42.414055"
|
||||
sodipodi:cy="98.701302"
|
||||
sodipodi:r1="1.9660654"
|
||||
sodipodi:r2="0.9830327"
|
||||
sodipodi:arg1="1.5707963"
|
||||
sodipodi:arg2="2.6179939"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 42.414055,100.66737 -1.702663,-2.949101 3.405325,0 z"
|
||||
inkscape:transform-center-y="0.49151511"
|
||||
transform="translate(28.350554,16.321792)"
|
||||
inkscape:label="nose" />
|
||||
<circle
|
||||
style="display:inline;fill:#5c5f5c;stroke:none;stroke-width:4.99999;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
|
||||
id="path6519-5"
|
||||
cx="73.211082"
|
||||
cy="111.02191"
|
||||
r="0.5"
|
||||
inkscape:label="eye-r" />
|
||||
<circle
|
||||
style="fill:#5c5f5c;stroke:none;stroke-width:4.99999;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
|
||||
id="path6519"
|
||||
cx="68.31813"
|
||||
cy="111.02191"
|
||||
r="0.5"
|
||||
inkscape:label="eye-l" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.1 KiB |
@@ -0,0 +1,359 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 210 297"
|
||||
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">
|
||||
<rect
|
||||
x="505.95288"
|
||||
y="579.6032"
|
||||
width="127.6438"
|
||||
height="127.94966"
|
||||
id="rect1266" />
|
||||
<rect
|
||||
x="309.92126"
|
||||
y="404.51989"
|
||||
width="483.77954"
|
||||
height="358.02926"
|
||||
id="rect600" />
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect5591"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
</defs>
|
||||
<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,-26.690111,-224.39813)">
|
||||
<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">
|
||||
<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">
|
||||
<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">
|
||||
<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 3.405325,0 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>
|
||||
|
After Width: | Height: | Size: 46 KiB |
@@ -1,4 +1,4 @@
|
||||
# Management
|
||||
# System Management
|
||||
|
||||
The system utilizes YANG models for keeping configuration and operational
|
||||
data. These databases can be managed through different interfaces such
|
||||
@@ -194,10 +194,6 @@ admin@example:/config/web/restconf/> no enabled
|
||||
admin@example:/config/web/restconf/>
|
||||
```
|
||||
|
||||
# System Upgrade
|
||||
## System Upgrade
|
||||
|
||||
See [upgrading procedures and boot order][1] for information on
|
||||
upgrading.
|
||||
|
||||
|
||||
[1]: system.md#upgrade-procedures-and-boot-order
|
||||
See [Upgrade & Boot Order](upgrade.md) for information on upgrading.
|
||||
|
||||
@@ -238,7 +238,7 @@ Multicast filtering in the bridge is handled by the bridge itself. It
|
||||
can filter both IP multicast and MAC multicast. For IP multicast it
|
||||
also supports "snooping", i.e., IGMP and MLD, to automatically reduce
|
||||
the broadcast effects of multicast. See the next section for a summary
|
||||
of the [terminology used](#terminology--abbreviations).
|
||||
of the [terminology used](#terminology-abbreviations).
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Currently there is no way to just enable multicast filtering without
|
||||
@@ -1253,7 +1253,7 @@ router 192.168.1.1, using the highest possible distance:
|
||||
admin@example:/>
|
||||
|
||||
> [!TIP]
|
||||
> Remember to enable [IPv4 forwarding](#IPv4-forwarding) for the
|
||||
> Remember to enable [IPv4 forwarding](#ipv4-forwarding) for the
|
||||
> interfaces you want to route between.
|
||||
|
||||
|
||||
@@ -1277,7 +1277,7 @@ enable OSPF and set one active interface in area 0:
|
||||
admin@example:/>
|
||||
|
||||
> [!TIP]
|
||||
> Remember to enable [IPv4 forwarding](#IPv4-forwarding) for all the
|
||||
> Remember to enable [IPv4 forwarding](#ipv4-forwarding) for all the
|
||||
> interfaces you want to route between.
|
||||
|
||||
|
||||
|
||||
@@ -2,9 +2,11 @@ Package Override
|
||||
================
|
||||
|
||||
This guide demonstrates how the `local.mk` file is utilized to override
|
||||
a Linux Buildroot package. As an example we use `tcpdump` to illustrate
|
||||
this process.
|
||||
a Buildroot package, which can be very useful when fixing bugs, adding
|
||||
features, or evaluating new releases of packages. As an example we use
|
||||
`tcpdump` to illustrate this process.
|
||||
|
||||
> [!TIP]
|
||||
> For a comprehensive guide to utilizing Buildroot during development,
|
||||
> including the `<pkg>_OVERRIDE_SRCDIR` mechanism, shown below, please
|
||||
> see [Using Buildroot during development][1] in the official docs.
|
||||
@@ -67,9 +69,10 @@ drwxr-xr-x 7 group user 12288 Nov 10 18:28 tcpdump-custom/
|
||||
As long as your local override is in place, Buildroot will use your
|
||||
custom version.
|
||||
|
||||
> **Remember:** the build directory is ephemeral, so be careful to
|
||||
> change any of the files therein. It can be useful though during
|
||||
> debugging, but just make sure to learn the difference between the
|
||||
> various Buildroot commands to build, clean, reconfigure, etc.
|
||||
> [!NOTE]
|
||||
> Remember, the build directory is ephemeral, so be careful to change
|
||||
> any of the files therein. It can be useful though during debugging,
|
||||
> but just make sure to learn the difference between the various
|
||||
> Buildroot commands to build, clean, reconfigure, etc.
|
||||
|
||||
[1]: https://buildroot.org/downloads/manual/manual.html#_using_buildroot_during_development
|
||||
|
||||
@@ -0,0 +1,354 @@
|
||||
# Scripting for Production Tests
|
||||
|
||||
This document shows how to set up and remotely script devices with a
|
||||
focus on production testing.
|
||||
|
||||
## VLAN Snake
|
||||
|
||||
As part of production tests, verification of Ethernet ports is usually
|
||||
expected. A common way for devices with multiple bridged Ethernet ports
|
||||
is to connect a test PC to two ports and send a *ping* traversing all
|
||||
ports. This can be achieved by using VLANs, on the switch, as described
|
||||
in this section. The resulting configuration file can be applied to the
|
||||
running configuration of the produced unit, e.g, use config file restore
|
||||
as [described previously][2].
|
||||
|
||||
In this example we assume a 10 port switch, with ports e1-e10. The
|
||||
following VLAN configuration and cable connections will be used:
|
||||
|
||||
| VLAN & Ports | Connect |
|
||||
|:------------------|:----------|
|
||||
| VLAN 10: e1 & e2 | e2 <=> e3 |
|
||||
| VLAN 20: e3 & e4 | e4 <=> e5 |
|
||||
| VLAN 30: e5 & e6 | e6 <=> e7 |
|
||||
| VLAN 40: e7 & e8 | e8 <=> e9 |
|
||||
| VLAN 50: e9 & e10 | |
|
||||
|
||||
The test PC is connected to e1 and e10 via different interfaces
|
||||
(alternatively, two different PCs are used).
|
||||
|
||||
> [!TIP]
|
||||
> Configuration here is done via console. When configuring remotely
|
||||
> over SSH, remember to keep one IP address (the one used for the SSH
|
||||
> connection)! I.e., set a static IP address first, then perform the
|
||||
> VLAN configuration step.
|
||||
|
||||
## Configuration at Start
|
||||
|
||||
Starting out, we assume a configuration where all ports are network
|
||||
interfaces (possibly with IPv6 enabled).
|
||||
|
||||
```
|
||||
admin@example:/> show interfaces
|
||||
lo ethernet UP 00:00:00:00:00:00
|
||||
ipv4 127.0.0.1/8 (static)
|
||||
ipv6 ::1/128 (static)
|
||||
e1 ethernet LOWER-DOWN 00:53:00:06:11:01
|
||||
e2 ethernet LOWER-DOWN 00:53:00:06:11:02
|
||||
e3 ethernet LOWER-DOWN 00:53:00:06:11:03
|
||||
e4 ethernet LOWER-DOWN 00:53:00:06:11:04
|
||||
e5 ethernet LOWER-DOWN 00:53:00:06:11:05
|
||||
e6 ethernet LOWER-DOWN 00:53:00:06:11:06
|
||||
e7 ethernet LOWER-DOWN 00:53:00:06:11:07
|
||||
e8 ethernet LOWER-DOWN 00:53:00:06:11:08
|
||||
e9 ethernet LOWER-DOWN 00:53:00:06:11:09
|
||||
e10 ethernet UP 00:53:00:06:11:0a
|
||||
ipv6 fe80::0053:00ff:fe06:110a/64 (link-layer)
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
## Creating Bridge and Adding Ports
|
||||
|
||||
The following example [creates a bridge][8] and adds all Ethernet ports
|
||||
to it. On a device with layer-2 offloading (switch fabric), this sets
|
||||
all ports in the same VLAN. The next section sets up VLAN isolation.
|
||||
|
||||
```
|
||||
admin@example:/> configure
|
||||
admin@example:/config/> edit interface br0
|
||||
admin@example:/config/interface/br0/> end
|
||||
admin@example:/config/> set interface e1 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e2 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e3 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e4 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e5 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e6 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e7 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e8 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e9 bridge-port bridge br0
|
||||
admin@example:/config/> set interface e10 bridge-port bridge br0
|
||||
admin@example:/config/>
|
||||
```
|
||||
|
||||
The interface status can be viewed using `show interfaces` after leaving
|
||||
configuration context. When configuring via SSH, first assign an IP
|
||||
address to `br0` *before leaving* configuration context, e.g.
|
||||
|
||||
```
|
||||
admin@example:/config/> set interface br0 ipv6 enabled
|
||||
```
|
||||
|
||||
This enables IPv6 SLAAC, auto-configured address. Or skip `leave` and
|
||||
stay in configuration context until you have completed all the device
|
||||
setup, including [setting IP address](#set-ip-address).
|
||||
|
||||
```
|
||||
admin@example:/config/> leave
|
||||
admin@example:/>
|
||||
admin@example:/> show interfaces
|
||||
INTERFACE PROTOCOL STATE DATA
|
||||
br0 bridge
|
||||
│ ethernet UP 00:53:00:06:11:01
|
||||
├ e1 bridge LOWER-DOWN
|
||||
├ e2 bridge LOWER-DOWN
|
||||
├ e3 bridge LOWER-DOWN
|
||||
├ e4 bridge LOWER-DOWN
|
||||
├ e5 bridge LOWER-DOWN
|
||||
├ e6 bridge LOWER-DOWN
|
||||
├ e7 bridge LOWER-DOWN
|
||||
├ e8 bridge LOWER-DOWN
|
||||
├ e9 bridge LOWER-DOWN
|
||||
└ e10 bridge FORWARDING
|
||||
lo ethernet UP 00:00:00:00:00:00
|
||||
ipv4 127.0.0.1/8 (static)
|
||||
ipv6 ::1/128 (static)
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
## Assign VLANs to Ports
|
||||
|
||||
Now, configure VLANs as outlined [previously](#vlan-snake): default VID
|
||||
for ingress (PVID), which is done per port, and egress mode (untagged),
|
||||
which is done at the bridge level. See the [VLAN bridges][9] section for
|
||||
more information.
|
||||
|
||||
```
|
||||
admin@example:/>
|
||||
admin@example:/> configure
|
||||
admin@example:/config/> set interface e1 bridge-port pvid 10
|
||||
admin@example:/config/> set interface e2 bridge-port pvid 10
|
||||
admin@example:/config/> set interface e3 bridge-port pvid 20
|
||||
admin@example:/config/> set interface e4 bridge-port pvid 20
|
||||
admin@example:/config/> set interface e5 bridge-port pvid 30
|
||||
admin@example:/config/> set interface e6 bridge-port pvid 30
|
||||
admin@example:/config/> set interface e7 bridge-port pvid 40
|
||||
admin@example:/config/> set interface e8 bridge-port pvid 40
|
||||
admin@example:/config/> set interface e9 bridge-port pvid 50
|
||||
admin@example:/config/> set interface e10 bridge-port pvid 50
|
||||
admin@example:/config/> edit interface br0
|
||||
admin@example:/config/interface/br0/> edit bridge vlans
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 10 untagged e1
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 10 untagged e2
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 20 untagged e3
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 20 untagged e4
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 30 untagged e5
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 30 untagged e6
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 40 untagged e7
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 40 untagged e8
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 50 untagged e9
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 50 untagged e10
|
||||
admin@example:/config/interface/br0/bridge/vlans/> leave
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
Interface status would now should something like the following
|
||||
|
||||
```
|
||||
admin@example:/> show interfaces
|
||||
INTERFACE PROTOCOL STATE DATA
|
||||
br0 bridge
|
||||
│ ethernet UP 00:53:00:06:11:01
|
||||
├ e1 bridge LOWER-DOWN vlan:10u pvid:10
|
||||
├ e2 bridge LOWER-DOWN vlan:10u pvid:10
|
||||
├ e3 bridge LOWER-DOWN vlan:20u pvid:20
|
||||
├ e4 bridge LOWER-DOWN vlan:20u pvid:20
|
||||
├ e5 bridge LOWER-DOWN vlan:30u pvid:30
|
||||
├ e6 bridge LOWER-DOWN vlan:30u pvid:30
|
||||
├ e7 bridge LOWER-DOWN vlan:40u pvid:40
|
||||
├ e8 bridge LOWER-DOWN vlan:40u pvid:40
|
||||
├ e9 bridge LOWER-DOWN vlan:50u pvid:50
|
||||
└ e10 bridge FORWARDING vlan:50u pvid:50
|
||||
lo ethernet UP 00:00:00:00:00:00
|
||||
ipv4 127.0.0.1/8 (static)
|
||||
ipv6 ::1/128 (static)
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
## Connect Cables and Test
|
||||
|
||||
We can now connect the PC to e1 and e10, while the other ports are
|
||||
patched according to [above](#vlan-snake). We should see link up and
|
||||
*FORWARDING* on all ports in the bridge.
|
||||
|
||||
```
|
||||
admin@example:/> show interfaces
|
||||
INTERFACE PROTOCOL STATE DATA
|
||||
br0 bridge
|
||||
│ ethernet UP 00:53:00:06:11:01
|
||||
├ e1 bridge FORWARDING vlan:10u pvid:10
|
||||
├ e2 bridge FORWARDING vlan:10u pvid:10
|
||||
├ e3 bridge FORWARDING vlan:20u pvid:20
|
||||
├ e4 bridge FORWARDING vlan:20u pvid:20
|
||||
├ e5 bridge FORWARDING vlan:30u pvid:30
|
||||
├ e6 bridge FORWARDING vlan:30u pvid:30
|
||||
├ e7 bridge FORWARDING vlan:40u pvid:40
|
||||
├ e8 bridge FORWARDING vlan:40u pvid:40
|
||||
├ e9 bridge FORWARDING vlan:50u pvid:50
|
||||
└ e10 bridge FORWARDING vlan:50u pvid:50
|
||||
lo ethernet UP 00:00:00:00:00:00
|
||||
ipv4 127.0.0.1/8 (static)
|
||||
ipv6 ::1/128 (static)
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
Here we use IPv6 ping all hosts (ff02::1) on PC interface eth1 to
|
||||
check reachability to the other interface of the PC.
|
||||
|
||||
> [!TIP]
|
||||
> We recommend using network namespaces (Linux only) on the PC to ensure
|
||||
> that traffic is actually sent out to the switch, rather than being
|
||||
> looped back internally. Alternatively, use two separate PCs.
|
||||
|
||||
```
|
||||
~ $ ping -L ff02::1%eth1
|
||||
PING ff02::1%eth1(ff02::1%eth1) 56 data bytes
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=1 ttl=64 time=0.496 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=2 ttl=64 time=0.514 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=3 ttl=64 time=0.473 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=4 ttl=64 time=0.736 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=5 ttl=64 time=0.563 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=6 ttl=64 time=0.507 ms
|
||||
^C
|
||||
--- ff02::1%eth1 ping statistics ---
|
||||
6 packets transmitted, 6 received, 0% packet loss, time 5108ms
|
||||
rtt min/avg/max/mdev = 0.473/0.548/0.736/0.088 ms
|
||||
~ $
|
||||
```
|
||||
|
||||
We can verify that traffic goes through the switch by disconnecting
|
||||
one of the patch cables, e.g., between e4 and e5
|
||||
|
||||
```
|
||||
~ $ ping -L ff02::1%eth1
|
||||
PING ff02::1%eth1(ff02::1%eth1) 56 data bytes
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=1 ttl=64 time=0.510 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=2 ttl=64 time=0.448 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=3 ttl=64 time=0.583 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=4 ttl=64 time=0.515 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=5 ttl=64 time=0.521 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=6 ttl=64 time=0.495 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=7 ttl=64 time=0.743 ms
|
||||
... Disconnecting patch cable, thus losing packets
|
||||
... and reconnecting again. Connectivity resumes.
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=16 ttl=64 time=0.961 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=17 ttl=64 time=0.513 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=18 ttl=64 time=0.794 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=19 ttl=64 time=0.755 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=20 ttl=64 time=0.779 ms
|
||||
^C
|
||||
--- ff02::1%eth1 ping statistics ---
|
||||
20 packets transmitted, 12 received, 40% packet loss, time 19432ms
|
||||
rtt min/avg/max/mdev = 0.448/0.634/0.961/0.156 ms
|
||||
~ $
|
||||
```
|
||||
|
||||
## Set IP Address
|
||||
|
||||
The configuration so far does not provide a means to connect to the
|
||||
switch management via SSH or NETCONF, as the switch has no IP address.
|
||||
The example below shows how to add the switch to VLAN 10 (as used for
|
||||
ports e1 and e2) and enables IPv6.
|
||||
|
||||
```
|
||||
admin@example:/config/> edit interface vlan10
|
||||
admin@example:/config/interface/vlan10/> set vlan lower-layer-if br0
|
||||
admin@example:/config/interface/vlan10/> set ipv6 enabled
|
||||
admin@example:/config/interface/vlan10/> show
|
||||
type vlan;
|
||||
ipv6 {
|
||||
enabled true;
|
||||
}
|
||||
vlan {
|
||||
tag-type c-vlan;
|
||||
id 10;
|
||||
lower-layer-if br0;
|
||||
}
|
||||
admin@example:/config/interface/vlan10/>
|
||||
admin@example:/config/interface/vlan10/> end
|
||||
admin@example:/config/> edit interface br0 bridge vlans
|
||||
admin@example:/config/interface/br0/bridge/vlans/> set vlan 10 tagged br0
|
||||
admin@example:/config/interface/br0/bridge/vlans/> leave
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
Interface *vlan10* with an auto-configured IPv6 address should appear.
|
||||
|
||||
```
|
||||
admin@example:/> show interfaces
|
||||
INTERFACE PROTOCOL STATE DATA
|
||||
br0 bridge vlan:10t
|
||||
│ ethernet UP 00:53:00:06:11:01
|
||||
├ e1 bridge FORWARDING vlan:10u pvid:10
|
||||
├ e2 bridge FORWARDING vlan:10u pvid:10
|
||||
├ e3 bridge FORWARDING vlan:20u pvid:20
|
||||
├ e4 bridge FORWARDING vlan:20u pvid:20
|
||||
├ e5 bridge FORWARDING vlan:30u pvid:30
|
||||
├ e6 bridge FORWARDING vlan:30u pvid:30
|
||||
├ e7 bridge FORWARDING vlan:40u pvid:40
|
||||
├ e8 bridge FORWARDING vlan:40u pvid:40
|
||||
├ e9 bridge FORWARDING vlan:50u pvid:50
|
||||
└ e10 bridge FORWARDING vlan:50u pvid:50
|
||||
lo ethernet UP 00:00:00:00:00:00
|
||||
ipv4 127.0.0.1/8 (static)
|
||||
ipv6 ::1/128 (static)
|
||||
vlan10 ethernet UP 00:53:00:06:11:01
|
||||
│ ipv6 fe80::0053:00ff:fe06:1101/64 (link-layer)
|
||||
└ br0 ethernet UP 00:53:00:06:11:01
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
When pinging "IPv6 all hosts" from the PC, there should be two
|
||||
responses for every ping, one from the switch and one from the PC
|
||||
attached to e10.
|
||||
|
||||
```
|
||||
~ $ ping -L ff02::1%eth1
|
||||
PING ff02::1%eth1(ff02::1%eth1) 56 data bytes
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=1 ttl=64 time=0.508 ms
|
||||
64 bytes from fe80::0053:00ff:fe06:1101%eth1: icmp_seq=1 ttl=64 time=0.968 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=2 ttl=64 time=0.866 ms
|
||||
64 bytes from fe80::0053:00ff:fe06:1101%eth1: icmp_seq=2 ttl=64 time=0.867 ms
|
||||
64 bytes from fe80::0053:00ff:fe06:1101%eth1: icmp_seq=3 ttl=64 time=0.467 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=3 ttl=64 time=0.469 ms
|
||||
64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=4 ttl=64 time=0.452 ms
|
||||
64 bytes from fe80::0053:00ff:fe06:1101%eth1: icmp_seq=4 ttl=64 time=0.453 ms
|
||||
^C
|
||||
--- ff02::1%eth1 ping statistics ---
|
||||
4 packets transmitted, 4 received, +4 duplicates, 0% packet loss, time 3031ms
|
||||
rtt min/avg/max/mdev = 0.452/0.631/0.968/0.211 ms
|
||||
~ $
|
||||
```
|
||||
|
||||
It should now be possible to access the switch from the PC via SSH (or NETCONF).
|
||||
|
||||
```
|
||||
~ $ ssh admin@fe80::0053:00ff:fe06:1101%eth1
|
||||
admin@fe80::0053:00ff:fe06:1101%eth1's password:
|
||||
.-------.
|
||||
| . . | Infix OS — Immutable.Friendly.Secure
|
||||
|-. v .-| https://kernelkit.org
|
||||
'-'---'-'
|
||||
|
||||
Run the command 'cli' for interactive OAM
|
||||
|
||||
admin@example:~$ exit
|
||||
~ $
|
||||
```
|
||||
|
||||
See previous sections on [backup][1] and [restore][2] of
|
||||
the created configuration.
|
||||
|
||||
[1]: scripting-sysrepocfg.md#backup-configuration
|
||||
[2]: scripting-sysrepocfg.md#restore-configuration
|
||||
[8]: networking.md#bridging
|
||||
[9]: networking.md#vlan-filtering-bridge
|
||||
@@ -0,0 +1,82 @@
|
||||
# Examples using RESTCONF
|
||||
|
||||
## Factory Reset
|
||||
|
||||
```
|
||||
~$ curl -kX POST -u admin:admin \
|
||||
-H "Content-Type: application/yang-data+json" \
|
||||
https://example.local/restconf/operations/ietf-factory-default:factory-reset
|
||||
curl: (56) OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0
|
||||
```
|
||||
|
||||
## System Reboot
|
||||
|
||||
```
|
||||
~$ curl -kX POST -u admin:admin \
|
||||
-H "Content-Type: application/yang-data+json" \
|
||||
https://example.local/restconf/operations/ietf-system:system-restart
|
||||
```
|
||||
|
||||
## Set Date and Time
|
||||
|
||||
Here's an example of an RPC that takes input/argument:
|
||||
|
||||
```
|
||||
~$ curl -kX POST -u admin:admin \
|
||||
-H "Content-Type: application/yang-data+json" \
|
||||
-d '{"ietf-system:input": {"current-datetime": "2024-04-17T13:48:02-01:00"}}' \
|
||||
https://example.local/restconf/operations/ietf-system:set-current-datetime
|
||||
```
|
||||
|
||||
You can verify that the changes took by a remote SSH command:
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'date'
|
||||
Wed Apr 17 14:48:12 UTC 2024
|
||||
~$
|
||||
```
|
||||
|
||||
## Read Hostname
|
||||
|
||||
Example of fetching JSON configuration data to stdout:
|
||||
|
||||
```
|
||||
~$ curl -kX GET -u admin:admin \
|
||||
-H 'Accept: application/yang-data+json' \
|
||||
https://example.local/restconf/data/ietf-system:system/hostname
|
||||
{
|
||||
"ietf-system:system": {
|
||||
"hostname": "foo"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Set Hostname
|
||||
|
||||
Example of inline JSON data:
|
||||
|
||||
```
|
||||
~$ curl -kX PATCH -u admin:admin \
|
||||
-H 'Content-Type: application/yang-data+json' \
|
||||
-d '{"ietf-system:system":{"hostname":"bar"}}' \
|
||||
https://example.local/restconf/data/ietf-system:system
|
||||
```
|
||||
|
||||
## Copy Running to Startup
|
||||
|
||||
No copy command available yet to copy between datastores, and the
|
||||
Rousette back-end also does not support "write-through" to the
|
||||
startup datastore.
|
||||
|
||||
To save running-config to startup-config, use the following example to
|
||||
fetch running to a local file and then update startup with it:
|
||||
|
||||
```
|
||||
~$ curl -kX GET -u admin:admin -o running-config.json \
|
||||
-H 'Accept: application/yang-data+json' \
|
||||
https://example.local/restconf/ds/ietf-datastores:running
|
||||
|
||||
~$ curl -kX PUT -u admin:admin -d @running-config.json \
|
||||
-H 'Content-Type: application/yang-data+json' \
|
||||
https://example.local/restconf/ds/ietf-datastores:startup
|
||||
```
|
||||
@@ -0,0 +1,467 @@
|
||||
> [!NOTE]
|
||||
> This method is a legacy "simple and human-friendly" way to manage the
|
||||
> system. These days we strongly recommend using [RESTCONF][1] instead.
|
||||
|
||||
# Legacy Scripting
|
||||
|
||||
Although not the primary interface for Infix, it is possible to interact
|
||||
with the system using raw [sysrepocfg][0] commands. This way you get to
|
||||
interact directly with the YANG models when logged in to Infix. Thus, a
|
||||
*set config*, *read config*, *read status* and an *RPC* can be conducted
|
||||
using `sysrepocfg` for any supported YANG model.
|
||||
|
||||
See [sysrepocfg][0] for more information. Examples below will utilize:
|
||||
|
||||
- `sysrepocfg -I FILE -fjson -d DATABASE` to import/write a JSON
|
||||
formatted configuration file to the specified database.
|
||||
- `sysrepocfg -E FILE -fjson -d DATABASE` to edit/merge JSON formatted
|
||||
configuration in FILE with the specified database.
|
||||
- `sysrepocfg -R FILE -fjson` to execute remote procedure call (RPC)
|
||||
defined in FILE (JSON formatted).
|
||||
- `sysrepocfg -X -fjson -d DATABASE -x xpath` to read configuration or
|
||||
status from specified database.
|
||||
|
||||
For importing (-I) and editing (-E), `-d running` is typically used in
|
||||
examples below. Specify `-d startup` to apply changes to startup
|
||||
configuration. Exporting (-X) could operate on configuration (e.g.,
|
||||
`-d running`) or status (`-d operational`).
|
||||
|
||||
Some commands require a file as input. In the examples below we assume
|
||||
it has been transferred to the device in advance, e.g. using `scp`:
|
||||
|
||||
```
|
||||
~$ cat file.json
|
||||
{
|
||||
"ietf-factory-default:factory-reset": {
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$
|
||||
```
|
||||
|
||||
## Factory Reset
|
||||
|
||||
```
|
||||
~$ cat file.json
|
||||
{
|
||||
"ietf-factory-default:factory-reset": {
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$ ssh admin@example.local 'sysrepocfg -fjson -R /tmp/file.json'
|
||||
^C
|
||||
~$
|
||||
```
|
||||
|
||||
See [Factory Reset](scripting.md#factory-reset) for another (simpler)
|
||||
alternative.
|
||||
|
||||
If it is only wished to copy factory config to running config the
|
||||
following RPC is available
|
||||
|
||||
```
|
||||
~$ cat file.json
|
||||
{
|
||||
"infix-factory-default:factory-default": {
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$ ssh admin@example.local 'sysrepocfg -fjson -R /tmp/file.json'
|
||||
^C
|
||||
~$
|
||||
```
|
||||
|
||||
## System Reboot
|
||||
|
||||
```
|
||||
~$ cat /tmp/file.json
|
||||
{
|
||||
"ietf-system:system-restart": {
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$ ssh admin@example.local 'sysrepocfg -fjson -R /tmp/file.json'
|
||||
~$
|
||||
```
|
||||
|
||||
See [System Reboot](scripting.md#system-reboot) for another (simpler)
|
||||
alternative.
|
||||
|
||||
## Set Date and Time
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'date'
|
||||
Sun Nov 20 10:20:23 UTC 2005
|
||||
~$ cat file.json
|
||||
{
|
||||
"ietf-system:set-current-datetime": {
|
||||
"current-datetime": "2024-04-17T13:48:02-01:00"
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$ ssh admin@example.local 'sysrepocfg -fjson -R /tmp/file.json'
|
||||
~$ ssh admin@example.local 'date'
|
||||
Wed Apr 17 14:48:12 UTC 2024
|
||||
~$
|
||||
```
|
||||
|
||||
See [Set Date and Time](scripting.md#set-date-and-time) for another
|
||||
(simpler) alternative.
|
||||
|
||||
## Remote Control of Ethernet Ports
|
||||
|
||||
Reading administrative status of interface *e0* of running configuration.
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'sysrepocfg -X -fjson -d running -e report-all \
|
||||
-x \"/ietf-interfaces:interfaces/interface[name='e0']/enabled\"'
|
||||
{
|
||||
"ietf-interfaces:interfaces": {
|
||||
"interface": [
|
||||
{
|
||||
"name": "e0",
|
||||
"enabled": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
~$
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Without `-e report-all` argument the line `"enabled: true` would not
|
||||
> be shown as `true` is default.
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local "sysrepocfg -X -fjson -d running \
|
||||
-x \"/ietf-interfaces:interfaces/interface[name='e0']/enabled\""
|
||||
{
|
||||
"ietf-interfaces:interfaces": {
|
||||
"interface": [
|
||||
{
|
||||
"name": "e0"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
~$
|
||||
```
|
||||
|
||||
Setting the administrative status of interface *e0* of running configuration.
|
||||
|
||||
```
|
||||
$ cat file.json
|
||||
{
|
||||
"ietf-interfaces:interfaces": {
|
||||
"interface": [
|
||||
{
|
||||
"name": "e0",
|
||||
"enabled": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$ ssh admin@example.local 'sysrepocfg -E /tmp/file.json -fjson -d running'
|
||||
~$
|
||||
```
|
||||
|
||||
## Enable/Disable DHCPv4 client
|
||||
|
||||
Enabling DHCPv4 client on interface *e0*, with current default options.
|
||||
|
||||
```
|
||||
~$ cat /tmp/file.json
|
||||
{
|
||||
"infix-dhcp-client:dhcp-client": {
|
||||
"enabled": true,
|
||||
"client-if": [
|
||||
{
|
||||
"if-name": "e0"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$ ssh admin@example.local 'sysrepocfg -E /tmp/file.json -fjson -d running'
|
||||
~$
|
||||
```
|
||||
|
||||
Disabling DHCPv4 client.
|
||||
|
||||
```
|
||||
~$ cat /tmp/file.json
|
||||
{
|
||||
"infix-dhcp-client:dhcp-client": {
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$ ssh admin@example.local 'sysrepocfg -E /tmp/file.json -fjson -d running'
|
||||
~$
|
||||
```
|
||||
|
||||
Configuration for client interface *e0* remains, but does not apply as
|
||||
DHCPv4 is disabled.
|
||||
|
||||
```
|
||||
admin@example:~$ sysrepocfg -X -fjson -d running -x "/infix-dhcp-client:dhcp-client"
|
||||
{
|
||||
"infix-dhcp-client:dhcp-client": {
|
||||
"enabled": false,
|
||||
"client-if": [
|
||||
{
|
||||
"if-name": "e0"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
admin@example:~$
|
||||
```
|
||||
|
||||
To fully remove the DHCPv4 client configuration or a specific
|
||||
*client-if* with sysrepocfg, one would need to read out the full
|
||||
configuration, remove relevant parts and read back.
|
||||
|
||||
## Enable/Disable IPv6
|
||||
|
||||
IPv6 is typically enabled on all interfaces by default. The example
|
||||
below shows IPv4 and IPv6 addresses assigned on *e0*.
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'ip addr show dev e0'
|
||||
2: e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
|
||||
link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
|
||||
inet 10.0.2.15/24 scope global proto dhcp e0
|
||||
valid_lft forever preferred_lft forever
|
||||
inet6 fec0::ff:fe00:0/64 scope site dynamic mngtmpaddr proto kernel_ra
|
||||
valid_lft 86380sec preferred_lft 14380sec
|
||||
inet6 fe80::ff:fe00:0/64 scope link proto kernel_ll
|
||||
valid_lft forever preferred_lft forever
|
||||
~$
|
||||
```
|
||||
|
||||
IPv6 is enabled/disabled per interface. The example below disables IPv6
|
||||
on interface *e0*.
|
||||
|
||||
```
|
||||
~$ cat /tmp/file.json
|
||||
{
|
||||
"ietf-interfaces:interfaces": {
|
||||
"interface": [
|
||||
{
|
||||
"name": "e0",
|
||||
"ietf-ip:ipv6": {
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
~$ scp file.json admin@example.local:/tmp/file.json
|
||||
~$ ssh admin@example.local 'sysrepocfg -E /tmp/file.json -fjson -d running'
|
||||
~$ ssh admin@example.local 'ip addr show dev e0'
|
||||
2: e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
|
||||
link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
|
||||
inet 10.0.2.15/24 scope global proto dhcp e0
|
||||
valid_lft forever preferred_lft forever
|
||||
~$
|
||||
```
|
||||
|
||||
## Change a Binary Setting
|
||||
|
||||
A YANG `binary` type setting is Base64 encoded and requires a little bit
|
||||
more tricks. We take the opportunity to showcase a shell script helper:
|
||||
`/usr/bin/text-editor`, which works just like the `text-editor` command
|
||||
in the CLI, but this one takes an XPath argument to the binary leaf to
|
||||
edit.
|
||||
|
||||
Stripped down, it looks something like this:
|
||||
|
||||
```bash
|
||||
if tmp=$(sysrepocfg -G "$xpath"); then
|
||||
file=$(mktemp)
|
||||
|
||||
echo "$tmp" | base64 -d > "$file"
|
||||
if edit "$file"; then
|
||||
tmp=$(base64 -w0 < "$file")
|
||||
sysrepocfg -S "$xpath" -u "$tmp"
|
||||
fi
|
||||
|
||||
rm -f "$file"
|
||||
else
|
||||
echo "Failed to retrieve value for $xpath"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
An example container configuration, with an embedded file that is
|
||||
mounted to `/var/www/index.html` can look like this:
|
||||
|
||||
```json
|
||||
"infix-containers:containers": {
|
||||
"container": [
|
||||
{
|
||||
"name": "web",
|
||||
"image": "oci-archive:/lib/oci/curios-httpd-latest.tar.gz",
|
||||
"hostname": "web",
|
||||
"network": {
|
||||
"interface": [
|
||||
{
|
||||
"name": "veth-sys0"
|
||||
}
|
||||
]
|
||||
},
|
||||
"mount": [
|
||||
{
|
||||
"name": "index.html",
|
||||
"content": "PCFET0NUWVBFIGh0bWwjibberish.shortened.down==",
|
||||
"target": "/var/www/index.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
The command to edit this file, and restart the container with the new
|
||||
contents, look like this:
|
||||
|
||||
```
|
||||
admin@infix:~$ cfg edit "/infix-containers:containers/container[name='web']/mount[name='index.html']/content"
|
||||
```
|
||||
|
||||
## Backup Configuration
|
||||
|
||||
Displaying running or startup configuration is possible with
|
||||
`sysrepocfg -X`, as shown below.
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'sysrepocfg -X -fjson -d running'
|
||||
{
|
||||
"ieee802-dot1ab-lldp:lldp": {
|
||||
"infix-lldp:enabled": true
|
||||
...
|
||||
~$
|
||||
```
|
||||
|
||||
An example for backing up startup configuration from remote PC.
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'sysrepocfg -X -fjson -d startup > /tmp/backup.json'
|
||||
~$ scp admin@example.local:/tmp/backup.json .
|
||||
~$
|
||||
```
|
||||
|
||||
Or possibly skip intermediate storage of file
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'sysrepocfg -X -fjson -d startup' > backup.json
|
||||
~$
|
||||
```
|
||||
|
||||
A final example is to only use `scp`. This is simpler, but only works to
|
||||
backup the startup configuration (not running).
|
||||
|
||||
```
|
||||
~$ scp admin@example.local:/cfg/startup-config.cfg backup.json
|
||||
~$
|
||||
```
|
||||
|
||||
## Restore Configuration
|
||||
|
||||
To restore a backup configuration to startup, the simplest way is to use
|
||||
`scp` and reboot as shown below
|
||||
|
||||
```
|
||||
~$ scp admin@example.local:/cfg/startup-config.cfg backup.json
|
||||
~$ ssh admin@example.local 'reboot'
|
||||
Connection to switch.local closed by remote host.
|
||||
~$
|
||||
```
|
||||
|
||||
An alternative method to restore a backup configuration is to use the
|
||||
`sysrepocfg -I FILE` (import) command.
|
||||
|
||||
The example below imports the backup configuration to startup, and
|
||||
reboots the unit.
|
||||
|
||||
```
|
||||
~$ scp backup.json admin@example.local:/tmp/
|
||||
~$ ssh admin@example.local 'sudo sysrepocfg -I /tmp/backup.json -fjson -d startup'
|
||||
~$ ssh admin@example.local 'reboot'
|
||||
Connection to switch.local closed by remote host.
|
||||
~$
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> The login credentials (hash) for the `admin` user are stored as part
|
||||
> of the configuration file. When replacing a switch and applying the
|
||||
> backed up configuration from the former switch, the password on the
|
||||
> replacement unit will also change.
|
||||
|
||||
## Copy Running to Startup
|
||||
|
||||
The following command reads out the running config via `sysrepocfg -X`
|
||||
and writes the result to the startup configuration.
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'sysrepocfg -X -fjson -d running > /cfg/startup-config.cfg'
|
||||
~$
|
||||
```
|
||||
|
||||
An alternative is to write it to a temporary file, and use `sysrepocfg
|
||||
-I` to import it to startup.
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'sysrepocfg -X -fjson -d running > /tmp/running.json'
|
||||
~$ ssh admin@example.local 'sysrepocfg -I /tmp/running.json -fjson -d startup'
|
||||
~$
|
||||
```
|
||||
|
||||
## Read Hardware Information
|
||||
|
||||
The IETF Hardware YANG model has been augmented for ONIE formatted
|
||||
production data stored in EEPROMs, if available. For details, see the
|
||||
[VPD documentation][2] and the *ietf-hardware* and *infix-hardware*
|
||||
YANG models.
|
||||
|
||||
```
|
||||
~$ ssh admin@example.local 'sysrepocfg -X -fjson -d operational -x /ietf-hardware:hardware'
|
||||
{
|
||||
"ietf-hardware:hardware": {
|
||||
"component": [
|
||||
{
|
||||
"name": "product",
|
||||
"class": "infix-hardware:vpd",
|
||||
"serial-num": "12345",
|
||||
"model-name": "Switch2010",
|
||||
"mfg-date": "2024-01-30T16:42:37+00:00",
|
||||
"infix-hardware:vpd-data": {
|
||||
"product-name": "Switch2010",
|
||||
"part-number": "ABC123-001",
|
||||
"serial-number": "007",
|
||||
"mac-address": "00:53:00:01:23:45",
|
||||
"manufacture-date": "01/30/2024 16:42:37",
|
||||
"num-macs": 11,
|
||||
"manufacturer": "ACME Production",
|
||||
"vendor": "SanFran Networks"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "USB",
|
||||
"class": "infix-hardware:usb",
|
||||
"state": {
|
||||
"admin-state": "unlocked",
|
||||
"oper-state": "enabled"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
~$
|
||||
```
|
||||
|
||||
[0]: https://netopeer.liberouter.org/doc/sysrepo/libyang1/html/sysrepocfg.html
|
||||
[1]: scripting-restconf.md
|
||||
[2]: vpd.md
|
||||
@@ -1,4 +1,4 @@
|
||||
## Syslog Support
|
||||
# Syslog Support
|
||||
|
||||
The system comes with native logging to internal storage, `/var/log/`,
|
||||
or `/log` for a shortcut. Depending on the device, this may be a RAM
|
||||
@@ -8,12 +8,12 @@ details how to log to external media or remote syslog servers.
|
||||
It is also possible to set up the device to act as a syslog server (log
|
||||
sink), this is covered briefly at the very end of this document.
|
||||
|
||||
> **Note:** the native logging cannot be modified, only the log file
|
||||
> rotation can be changed. Please see the `dir` admin-exec command for
|
||||
> a listing of existing native log files.
|
||||
> [!NOTE]
|
||||
> The default logging setup in the system cannot be modified, only the
|
||||
> log file rotation. Please see the `dir` admin-exec command for a
|
||||
> listing of existing log files.
|
||||
|
||||
|
||||
### Log to File
|
||||
## Log to File
|
||||
|
||||
Logging to a local file is useful when combined with an external media.
|
||||
E.g., a USB stick with a log partition (named/labeled: "log"). Below is
|
||||
@@ -21,7 +21,7 @@ an example.
|
||||
|
||||
For a list of available log facilities, see the table in a later section.
|
||||
|
||||
```bash
|
||||
```
|
||||
admin@example:/> configure
|
||||
admin@example:/config/> edit syslog
|
||||
admin@example:/config/syslog/> edit actions log-file file:/media/log/mylog
|
||||
@@ -37,13 +37,13 @@ admin@example:/config/syslog/actions/log-file/file:/media/log/mylog/> leave
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
> **Note:** the `log-file` syntax requires the leading prefix `file:`.
|
||||
> If the path is not absolute, e.g., `file:mylog`, the file is saved to
|
||||
> the system default path, i.e., `/log/mylog`. In this case, verify
|
||||
> that the filename is not already in use.
|
||||
> [!IMPORTANT]
|
||||
> The `log-file` syntax requires the leading prefix `file:`. If the
|
||||
> path is not absolute, e.g., `file:mylog`, the file is saved to the
|
||||
> system default path, i.e., `/log/mylog`. In this case, verify that
|
||||
> the filename is not already in use.
|
||||
|
||||
|
||||
### Log Rotation
|
||||
## Log Rotation
|
||||
|
||||
By default log files are allowed to grow to a size of 1 MiB after which
|
||||
they are "rotated". The whole reason for this is to not fill up the
|
||||
@@ -51,13 +51,16 @@ disk with outdated logs. A rotated file is saved in stages and older
|
||||
ones are also compressed (using `gzip`). Use the `show log` command in
|
||||
admin-exec context to start the log file viewer:
|
||||
|
||||
admin@example:/config/syslog/> do show log
|
||||
log log.0 log.1.gz log.2.gz log.3.gz log.4.gz log.5.gz
|
||||
admin@example:/config/syslog/> do show log log.1.gz
|
||||
```
|
||||
admin@example:/config/syslog/> do show log
|
||||
log log.0 log.1.gz log.2.gz log.3.gz log.4.gz log.5.gz
|
||||
admin@example:/config/syslog/> do show log log.1.gz
|
||||
```
|
||||
|
||||
> **Tip:** use the Tab key on your keyboard list available log files.
|
||||
> The `do` prefix is also very useful in configure context to access
|
||||
> commands from admin-exec context.
|
||||
> [!TIP]
|
||||
> Use the Tab key on your keyboard list available log files. The `do`
|
||||
> prefix is also very useful in configure context to access commands
|
||||
> from admin-exec context.
|
||||
|
||||
By default 10 compressed older files are saved. Here the oldest is
|
||||
`log.5.gz` and the most recently rotated one is `log.0`.
|
||||
@@ -66,8 +69,8 @@ Log file rotation can be configured both globally and per log file.
|
||||
Here we show the global settings, the set up is the same for per log
|
||||
file, which if unset inherit the global settings:
|
||||
|
||||
```bash
|
||||
admin@example:/> configure
|
||||
```
|
||||
admin@example:/> configure
|
||||
admin@example:/config/> edit syslog file-rotation
|
||||
admin@example:/config/syslog/file-rotation/> show
|
||||
admin@example:/config/syslog/file-rotation/>
|
||||
@@ -76,7 +79,7 @@ admin@example:/config/syslog/file-rotation/>
|
||||
The defaults are not shown. We can inspect them by asking the YANG
|
||||
model for the help texts:
|
||||
|
||||
```bash
|
||||
```
|
||||
admin@example:/config/syslog/file-rotation/> help
|
||||
max-file-size number-of-files
|
||||
admin@example:/config/syslog/file-rotation/> help max-file-size
|
||||
@@ -102,18 +105,17 @@ DEFAULT
|
||||
To change the defaults to something smaller, 512 kiB and 20 (remember
|
||||
everything after .0 is compressed, and text compresses well):
|
||||
|
||||
```bash
|
||||
```
|
||||
admin@example:/config/syslog/file-rotation/> set max-file-size 512
|
||||
admin@example:/config/syslog/file-rotation/> set number-of-files 20
|
||||
admin@example:/config/syslog/file-rotation/> show
|
||||
number-of-files 20;
|
||||
max-file-size 512;
|
||||
admin@example:/config/syslog/file-rotation/> leave
|
||||
admin@example:/>
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
|
||||
### Log Format
|
||||
## Log Format
|
||||
|
||||
There are three major syslog log formats, the default is [RFC3164][] for
|
||||
log files and BSD for remote logging. Depending on time synchronization
|
||||
@@ -121,9 +123,11 @@ and remote log server capabilities, or policies, the [RFC5424][] format
|
||||
is often preferred since it not only has better time resolution but also
|
||||
supports structured logging:
|
||||
|
||||
BSD : myproc[8710]: Kilroy was here.
|
||||
RFC3164 : Aug 24 05:14:15 192.0.2.1 myproc[8710]: Kilroy was here.
|
||||
RFC5424 : 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - Kilroy was here.
|
||||
```
|
||||
BSD : myproc[8710]: Kilroy was here.
|
||||
RFC3164 : Aug 24 05:14:15 192.0.2.1 myproc[8710]: Kilroy was here.
|
||||
RFC5424 : 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - Kilroy was here.
|
||||
```
|
||||
|
||||
The BSD format is only applicable to remote logging. It remains the
|
||||
default for compatibility reasons, and is recommended since the device
|
||||
@@ -132,7 +136,7 @@ perform time stamping at the time of arrival.
|
||||
|
||||
Configuring the log format is the same for log files and remotes:
|
||||
|
||||
```bash
|
||||
```
|
||||
admin@example:/config/> edit syslog actions log-file file:foobar
|
||||
admin@example:/config/syslog/actions/log-file/file:foobar/> set log-format
|
||||
bsd rfc3164 rfc5424
|
||||
@@ -141,10 +145,7 @@ admin@example:/config/syslog/actions/log-file/file:foobar/> leave
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
[RFC3164]: https://datatracker.ietf.org/doc/html/rfc3164
|
||||
[RFC5424]: https://datatracker.ietf.org/doc/html/rfc5424
|
||||
|
||||
### Log to Remote Server
|
||||
## Log to Remote Server
|
||||
|
||||
Logging to a remote syslog server is the recommended way of supervising
|
||||
the system. This way all login attempts (console, SSH, or web) and any
|
||||
@@ -158,7 +159,7 @@ remote syslog servers do not support receiving time stamped log messages
|
||||
-- this is of course entirely dependent on how the remote server is set
|
||||
up, as well as local policy.
|
||||
|
||||
```bash
|
||||
```
|
||||
admin@example:/config/> edit syslog
|
||||
actions file-rotation server
|
||||
admin@example:/config/> edit syslog actions destination moon
|
||||
@@ -172,16 +173,16 @@ admin@example:/config/syslog/actions/destination/moon/> leave
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
> **Note:** the alternatives shown below each prompt in the example
|
||||
> above can be found by tapping the Tab key.
|
||||
> [!TIP]
|
||||
> The alternatives shown below each prompt in the example above can be
|
||||
> found by tapping the Tab key.
|
||||
|
||||
|
||||
### Acting as a Log Server
|
||||
## Acting as a Log Server
|
||||
|
||||
The syslog server can act as a log sink for other devices on a LAN. For
|
||||
this to work you need a static IP address, here we use 10.0.0.1/24.
|
||||
|
||||
```bash
|
||||
```
|
||||
admin@example:/> configure
|
||||
admin@example:/config/> edit syslog server
|
||||
admin@example:/config/syslog/server/> set enabled true
|
||||
@@ -194,7 +195,6 @@ See the above [Log to File](#log-to-file) section on how to set up
|
||||
filtering of received logs to local files. Please note, filtering based
|
||||
on property, e.g., hostname, is not supported yet.
|
||||
|
||||
|
||||
### Facilities
|
||||
|
||||
| **Code** | **Facility** | **Description** |
|
||||
@@ -225,3 +225,6 @@ on property, e.g., hostname, is not supported yet.
|
||||
| 23 | web* | local7, reserved for nginx web server |
|
||||
|
||||
Facilities marked `*` are local augments to the model.
|
||||
|
||||
[RFC3164]: https://datatracker.ietf.org/doc/html/rfc3164
|
||||
[RFC5424]: https://datatracker.ietf.org/doc/html/rfc5424
|
||||
|
||||
@@ -323,439 +323,7 @@ reference ID, stratum, time offsets, frequency, and root delay.
|
||||
> The system uses `chronyd` Network Time Protocol (NTP) daemon. The
|
||||
> output shown here is best explained in the [Chrony documentation][4].
|
||||
|
||||
## Upgrade procedures and boot order
|
||||
|
||||
For resilience purposes, Infix maintains two software
|
||||
images referred to as the _primary_ and _secondary_ partition image.
|
||||
In addition, some bootloaders support [netbooting][6].
|
||||
|
||||
The _boot order_ defines which image is tried first, and is listed
|
||||
with the CLI `show software` command. It also shows Infix version
|
||||
installed per partition, and which image was used when booting (`STATE
|
||||
booted`).
|
||||
|
||||
```
|
||||
admin@example:/> show software
|
||||
BOOT ORDER
|
||||
primary secondary net
|
||||
|
||||
NAME STATE VERSION DATE
|
||||
primary booted v25.01.0 2025-04-25T10:15:00+00:00
|
||||
secondary inactive v25.01.0 2025-04-25T10:07:20+00:00
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
YANG support for upgrading Infix, inspecting and _modifying_ the
|
||||
boot-order, is defined in [infix-system-software][5].
|
||||
|
||||
|
||||
### Upgrading Infix
|
||||
|
||||
Upgrading Infix is done one partition at a time. If the system has
|
||||
booted from one partition, an `upgrade` will apply to the other
|
||||
(inactive) partition.
|
||||
|
||||
1. Download and unpack the release to install. Make the image *pkg*
|
||||
bundle available at some URL[^10]
|
||||
2. (Optional) Backup the startup configuration
|
||||
3. Assume the unit has booted the `primary` image. Then running the
|
||||
`upgrade` command installs a new image on the `secondary`
|
||||
partition
|
||||
4. As part of a successful upgrade, the boot-order is implictly
|
||||
changed to boot the newly installed image
|
||||
5. Reboot the unit
|
||||
6. The unit now runs the new image. To upgrade the remaining partition
|
||||
(`primary`), run the same upgrade command again, and (optionally)
|
||||
reboot to verify the upgrade
|
||||
|
||||
> [!CAUTION]
|
||||
> During boot (step 5), the unit may
|
||||
> [migrate](#configuration-migration) the startup configuration for
|
||||
> any syntax changes. It is therefore important that you make sure to
|
||||
> upgrade the other partition as well after reboot, of course after
|
||||
> having verified your setup.
|
||||
|
||||
The CLI example below shows steps 2-5.
|
||||
|
||||
*Backup startup configuration:* It is recommended to backup the
|
||||
startup configuration before performing an upgrade. The backup is
|
||||
useful if the upgrade fails, and makes a later
|
||||
[downgrade](#downgrading-infix) smoother to conduct.
|
||||
|
||||
```
|
||||
admin@example:/> dir /cfg
|
||||
/cfg directory
|
||||
backup/ ssl/ startup-config.cfg
|
||||
|
||||
admin@example:/> copy /cfg/startup-config.cfg /cfg/v25.01.0-startup-config.cfg
|
||||
admin@example:/> dir /cfg
|
||||
/cfg directory
|
||||
backup/ ssl/ startup-config.cfg v25.01.0-startup-config.cfg
|
||||
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Upgrade:* Here the image *pkg bundle* was made available via TFTP.
|
||||
|
||||
```
|
||||
admin@example:/> upgrade tftp://198.18.117.1/infix-aarch64-25.03.1.pkg
|
||||
installing
|
||||
0% Installing
|
||||
0% Determining slot states
|
||||
10% Determining slot states done.
|
||||
...
|
||||
98% Copying image to rootfs.1
|
||||
99% Copying image to rootfs.1
|
||||
99% Copying image to rootfs.1 done.
|
||||
99% Updating slots done.
|
||||
100% Installing done.
|
||||
Installing `tftp://198.18.117.1/infix-aarch64-25.03.1.pkg` succeeded
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Reboot:* The unit will boot on the other partition, with the newly
|
||||
installed image. The `Loading startup-config` step conducts migration
|
||||
of startup configuration if applicable.
|
||||
|
||||
```
|
||||
admin@example:/> reboot
|
||||
[ OK ] Stopping Static routing daemon
|
||||
[ OK ] Stopping Zebra routing daemon
|
||||
...
|
||||
[ OK ] Loading startup-config
|
||||
[ OK ] Verifying self-signed https certificate
|
||||
[ OK ] Update DNS configuration
|
||||
[ OK ] Starting Status daemon
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v25.03.1 (ttyS0)
|
||||
example login: admin
|
||||
Password:
|
||||
.-------.
|
||||
| . . | Infix OS — Immutable.Friendly.Secure
|
||||
|-. v .-| https://kernelkit.org
|
||||
'-'---'-'
|
||||
|
||||
Run the command 'cli' for interactive OAM
|
||||
|
||||
admin@example:~$ cli
|
||||
|
||||
See the 'help' command for an introduction to the system
|
||||
|
||||
admin@example:/> show software
|
||||
BOOT ORDER
|
||||
secondary primary net
|
||||
|
||||
NAME STATE VERSION DATE
|
||||
primary inactive v25.01.0 2025-04-25T10:15:00+00:00
|
||||
secondary booted v25.03.1 2025-04-25T10:24:31+00:00
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
As shown, the *boot order* has been updated, so that *secondary* is
|
||||
now the preferred boot source.
|
||||
|
||||
To upgrade the remaining partition (`primary`), run the `upgrade URL`
|
||||
command again, and (optionally) reboot.
|
||||
|
||||
### Configuration Migration
|
||||
|
||||
The example above illustrated an upgrade from Infix v25.01.0 to
|
||||
v25.03.1. Inbetween these versions, YANG configuration definitions
|
||||
changed slightly (more details given below).
|
||||
|
||||
During boot, Infix inspects the `version` meta information within the
|
||||
startup configuration file to determine if configuration migration is
|
||||
needed. In this specific case, the configuration file has version
|
||||
`1.4` while the booted software expects version `1.5` (the
|
||||
configuration version numbering differs from the Infix image version
|
||||
numbering). The startup configuration is migrated to `1.5`
|
||||
definitions and stored, while a backup previous startup configuration
|
||||
is stored in directory `/cfg/backup/`.
|
||||
|
||||
```
|
||||
admin@example:/> dir /cfg/backup/
|
||||
/cfg/backup/ directory
|
||||
startup-config-1.4.cfg
|
||||
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
The modifications made to the startup configuration can be viewed by
|
||||
comparing the files from the *shell*. An example is shown below.
|
||||
|
||||
```
|
||||
admin@example:/> exit
|
||||
admin@example:~$ diff /cfg/backup/startup-config-1.4.cfg /cfg/startup-config.cfg
|
||||
--- /cfg/backup/startup-config-1.4.cfg
|
||||
+++ /cfg/startup-config.cfg
|
||||
...
|
||||
- "public-key-format": "ietf-crypto-types:ssh-public-key-format",
|
||||
+ "public-key-format": "infix-crypto-types:ssh-public-key-format",
|
||||
...
|
||||
- "private-key-format": "ietf-crypto-types:rsa-private-key-format",
|
||||
+ "private-key-format": "infix-crypto-types:rsa-private-key-format",
|
||||
...
|
||||
- "version": "1.4"
|
||||
+ "version": "1.5"
|
||||
...
|
||||
admin@example:~$
|
||||
```
|
||||
|
||||
### Downgrading Infix
|
||||
|
||||
Downgrading to an earlier Infix version is possible, however,
|
||||
downgrading is **not** guaranteed to work smoothly. In particular,
|
||||
when the unit boots up with the downgraded version, it may fail to
|
||||
apply the *startup config*, and instead apply its [failure config][7].
|
||||
|
||||
We consider two cases: downgrading with or without applying a backup
|
||||
startup configuration before rebooting.
|
||||
|
||||
In both cases we start out with a unit running Infix v25.03.1, and
|
||||
wish to downgrade to v25.01.0.
|
||||
|
||||
```
|
||||
admin@example:/> show software
|
||||
BOOT ORDER
|
||||
primary secondary net
|
||||
|
||||
NAME STATE VERSION DATE
|
||||
primary booted v25.03.1 2025-04-25T11:36:26+00:00
|
||||
secondary inactive v25.03.1 2025-04-25T10:24:31+00:00
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
#### Downgrading when applying a backup startup configuration
|
||||
|
||||
This is the recommended approach to downgrade, given that you have a
|
||||
backup configuration available. The objective is to avoid ending up
|
||||
with the unit in *failure config*.
|
||||
|
||||
1. Find the backup configuration file.
|
||||
2. Run `upgrade URL` to install Infix image to downgrade to.
|
||||
3. Copy backup startup configuration to current startup configuration
|
||||
(from shell).
|
||||
4. Reboot.
|
||||
|
||||
*Find the backup configuration file:*
|
||||
|
||||
Assume you have a backup startup config for the Infix version to
|
||||
downgrade to (here Infix v25.01.0, config `version 1.4`).
|
||||
|
||||
The preferred approach is to use a startup configuration backed up
|
||||
when running Infix v25.01.0 on the unit. See the section on [upgrading
|
||||
Infix](#upgrading-infix) above for more information. In the example
|
||||
below, there is a backup file available named
|
||||
*v25.01.0-startup-config.cfg*
|
||||
|
||||
```
|
||||
admin@example:/> dir /cfg
|
||||
/cfg directory
|
||||
backup/ ssl/ startup-config.cfg v25.01.0-startup-config.cfg
|
||||
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
The alternative is to use a startup config implicitly backed up by the
|
||||
system as part of [configuration migration](#configuration-migration).
|
||||
|
||||
```
|
||||
admin@example:/> dir /cfg/backup/
|
||||
/cfg/backup/ directory
|
||||
startup-config-1.4.cfg
|
||||
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
> [!CAUTION] Using a backup configuration file stored when the unit
|
||||
> was running the old version (e.g., v25.01.0-startup-config.cfg) is
|
||||
> preferred. Although backup files stored due to configuration
|
||||
> migration (e.g., startup-config-1.4.cfg) usually works too if the
|
||||
> configuration file version (`1.4`) matches, there are
|
||||
> situations when the system may fail to apply it as described below.
|
||||
|
||||
The *configuration file version* (`1.4`) is only incremented when
|
||||
changes in YANG configuration syntax mandates it to handle
|
||||
*upgrading*. Say the next Infix version includes a new feature
|
||||
setting, it can still have version `1.4`, as upgrading to it would not
|
||||
need migration. If a user then enables the new feature setting, the
|
||||
new configuration will no longer be compatible with the previous *Infix
|
||||
version*. A downgrade after enabling new features risks ending up with
|
||||
the unit in *failure config*.
|
||||
|
||||
|
||||
*Use `upgrade` command to downgrade:*
|
||||
|
||||
```
|
||||
admin@example:/> upgrade tftp://198.18.117.1/infix-aarch64-25.01.0.pkg
|
||||
installing
|
||||
0% Installing
|
||||
0% Determining slot states
|
||||
10% Determining slot states done.
|
||||
...
|
||||
99% Copying image to rootfs.1 done.
|
||||
99% Updating slots done.
|
||||
100% Installing done.
|
||||
Installing `tftp://198.18.117.1/infix-aarch64-25.01.0.pkg` succeeded
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Apply the backup configuration file:*
|
||||
|
||||
It is recommended to use a backup configuration file for the Infix version to
|
||||
downgrade to, if there is one available.
|
||||
|
||||
```
|
||||
admin@example:/> copy /cfg/v25.01.0-startup-config.cfg /cfg/startup-config.cfg
|
||||
Overwrite existing file /cfg/startup-config.cfg (y/N)? y
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
An alternative is to use a backup file stored when the system
|
||||
conducted a [configuration migration](#configuration-migration). See
|
||||
the *caution* note above.
|
||||
|
||||
```
|
||||
admin@example:/> copy /cfg/backup/startup-config-1.4.cfg /cfg/startup-config.cfg
|
||||
Overwrite existing file /cfg/startup-config.cfg (y/N)? y
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Reboot:*
|
||||
|
||||
The unit will come up with the applied backup configuration.
|
||||
|
||||
```
|
||||
admin@example:/> reboot
|
||||
[ OK ] Saving system clock to file
|
||||
[ OK ] Stopping Software update service
|
||||
[ OK ] Stopping Status daemon
|
||||
...
|
||||
[ OK ] Bootstrapping YANG datastore
|
||||
[ OK ] Starting Configuration daemon
|
||||
[ OK ] Loading startup-config
|
||||
[ OK ] Update DNS configuration
|
||||
[ OK ] Verifying self-signed https certificate
|
||||
[ OK ] Starting Status daemon
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v25.01.0 (ttyS0)
|
||||
example login:
|
||||
```
|
||||
> [!NOTE]
|
||||
> If the unit despite these measures ends up in *failure config*, see
|
||||
> the next section for more information on how to recover.
|
||||
|
||||
#### Downgrading without applying a backup startup configuration
|
||||
|
||||
This procedure assumes you have access to the unit's console port and
|
||||
its default login credentials[^9].
|
||||
|
||||
1. Downgrade
|
||||
2. Reboot
|
||||
3. Login with unit's default credentials
|
||||
4. Conduct factory reset
|
||||
5. (Then go on configure the unit as you wish)
|
||||
|
||||
*Use `upgrade` command to downgrade:*
|
||||
|
||||
```
|
||||
admin@example:/> upgrade tftp://198.18.117.1/infix-aarch64-25.01.0.pkg
|
||||
installing
|
||||
0% Installing
|
||||
0% Determining slot states
|
||||
10% Determining slot states done.
|
||||
...
|
||||
99% Copying image to rootfs.1 done.
|
||||
99% Updating slots done.
|
||||
100% Installing done.
|
||||
Installing `tftp://198.18.117.1/infix-aarch64-25.01.0.pkg` succeeded
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Reboot:*
|
||||
|
||||
Conduct a reboot. During boot, the unit fails to apply the existing
|
||||
startup configuration (config version `1.5` while software expects
|
||||
version `1.4` or earlier), and instead applies its [failure
|
||||
config][7]. This is what is seen on the console when this situation
|
||||
occurs. Note that the login prompt displays `failed` as part of the
|
||||
*hostname*.
|
||||
|
||||
```
|
||||
admin@example:/> reboot
|
||||
[ OK ] Saving system clock to file
|
||||
[ OK ] Stopping Software update service
|
||||
[ OK ] Stopping Status daemon
|
||||
...
|
||||
[ OK ] Verifying SSH host keys
|
||||
[ OK ] Bootstrapping YANG datastore
|
||||
[ OK ] Starting Configuration daemon
|
||||
[FAIL] Loading startup-config
|
||||
[ OK ] Loading failure-config
|
||||
[ OK ] Verifying self-signed https certificate
|
||||
[ OK ] Starting Status daemon
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v25.01.0 (ttyS0)
|
||||
|
||||
ERROR: Corrupt startup-config, system has reverted to default login credentials
|
||||
failed-00-00-00 login:
|
||||
```
|
||||
|
||||
To remedy a situation like this, you can login with the unit's *default
|
||||
login credentials*, preferrably via a [console port][8].
|
||||
The unit's default credentials are typically printed on a sticker on
|
||||
the unit.
|
||||
|
||||
```
|
||||
failed-00-00-00 login: admin
|
||||
Password:
|
||||
|
||||
Run the command 'cli' for interactive OAM
|
||||
|
||||
admin@failed-00-00-00:~$
|
||||
```
|
||||
|
||||
When it is *safe* from a network operations perspective, you can
|
||||
conduct a factory reset and reboot. It is recommended to remove the
|
||||
unit from any production network before doing this, as a factory reset
|
||||
may enable undesired connectivity between the unit's ports.
|
||||
|
||||
```
|
||||
admin@failed-00-00-00:~$ factory
|
||||
Factory reset device (y/N)? y
|
||||
factory: scheduled factory reset on next boot.
|
||||
Reboot now to perform reset, (y/N)? y
|
||||
[ OK ] Saving system time (UTC) to RTC
|
||||
[ OK ] Stopping mDNS alias advertiser
|
||||
...
|
||||
[ OK ] Starting Configuration daemon
|
||||
[ OK ] Loading startup-config
|
||||
[ OK ] Update DNS configuration
|
||||
[ OK ] Verifying self-signed https certificate
|
||||
[ OK ] Starting Status daemon
|
||||
[ OK ] Starting Status daemon
|
||||
|
||||
|
||||
Please press Enter to activate this console.
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v25.01.0 (ttyS0)
|
||||
example login:
|
||||
```
|
||||
|
||||
Continued configuration is done as with any unit after factory reset.
|
||||
|
||||
[1]: https://www.rfc-editor.org/rfc/rfc7317
|
||||
[2]: https://github.com/kernelkit/infix/blob/main/src/confd/yang/infix-system%402024-02-29.yang
|
||||
[3]: https://www.rfc-editor.org/rfc/rfc8341
|
||||
[4]: https://chrony-project.org/doc/4.6.1/chronyc.html
|
||||
[5]: https://github.com/kernelkit/infix/blob/main/src/confd/yang/confd/infix-system-software.yang
|
||||
[6]: netboot.md
|
||||
[7]: introduction.md#system-boot
|
||||
[8]: management.md#console-port
|
||||
[^9]: In failure config, Infix puts all Ethernet ports as individual
|
||||
interfaces. With direct access, one can connect with e.g., SSH,
|
||||
using link local IPv6 addresses. This as an alternative to
|
||||
connecting via a console port.
|
||||
[^10]: Set up an FTP/TFTP/SFTP or HTTP/HTTPS server on the same LAN.
|
||||
|
||||
[11]: scripting.md#-backup-configuration-using-sysrepocfg-and-scp
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<article id="doc-cover">
|
||||
{% if cover_logo is defined %}
|
||||
<div class="wrapper upper">
|
||||
<img src="{{ cover_logo | to_url }}" alt="Logo" class="logo">
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="wrapper"></div>
|
||||
{% endif %}
|
||||
|
||||
<div class="wrapper">
|
||||
<h2>{{ cover_subtitle | e }}</h2>
|
||||
<div class="divider"></div>
|
||||
<h1>{{ cover_title | e }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="properties">
|
||||
<address>
|
||||
{% if copyright is defined %}
|
||||
<p id="copyright">{{ copyright | e }}</p>
|
||||
{% endif %}
|
||||
</address>
|
||||
</div>
|
||||
</article>
|
||||
@@ -0,0 +1,148 @@
|
||||
// Override plugin defaults with !important to ensure our styles take precedence
|
||||
article#doc-cover {
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
height: 100vh !important;
|
||||
text-align: center !important;
|
||||
padding: 20px !important;
|
||||
}
|
||||
|
||||
article#doc-cover > .wrapper.upper {
|
||||
flex: 0 0 120px !important;
|
||||
text-align: center !important;
|
||||
margin-bottom: 20px !important;
|
||||
max-height: none !important;
|
||||
}
|
||||
|
||||
// Simple img tag approach for centered logo
|
||||
article#doc-cover > .wrapper.upper > img.logo {
|
||||
width: 360px !important;
|
||||
height: auto !important; // Maintains aspect ratio automatically
|
||||
display: block !important;
|
||||
margin: 250px auto 0 auto !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
article#doc-cover > .wrapper h1 {
|
||||
font-size: 52px !important;
|
||||
margin: 0 auto 0 auto !important;
|
||||
color: #808080 !important;
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
// Copyright text on cover page should match logo grey color
|
||||
article#doc-cover .properties address p#copyright {
|
||||
color: #808080 !important;
|
||||
}
|
||||
|
||||
article#doc-cover > .wrapper h2 {
|
||||
font-size: 28px !important;
|
||||
color: #808080 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
article#doc-cover .divider {
|
||||
width: 150px !important;
|
||||
height: 3px !important;
|
||||
background: #ff7f2a !important;
|
||||
margin: 20px auto !important;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
// Proper heading hierarchy for 12pt base text (print standards)
|
||||
h1 {
|
||||
color: black !important;
|
||||
font-size: 24pt !important; // 2.0x base text
|
||||
line-height: 1.2 !important;
|
||||
margin-top: 24pt !important;
|
||||
margin-bottom: 12pt !important;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: black !important;
|
||||
font-size: 20pt !important; // 1.67x base text
|
||||
line-height: 1.3 !important;
|
||||
margin-top: 20pt !important;
|
||||
margin-bottom: 10pt !important;
|
||||
}
|
||||
|
||||
h3 {
|
||||
color: black !important;
|
||||
font-size: 16pt !important; // 1.33x base text
|
||||
line-height: 1.3 !important;
|
||||
margin-top: 16pt !important;
|
||||
margin-bottom: 8pt !important;
|
||||
}
|
||||
|
||||
h4 {
|
||||
color: black !important;
|
||||
font-size: 14pt !important; // 1.17x base text
|
||||
line-height: 1.4 !important;
|
||||
margin-top: 14pt !important;
|
||||
margin-bottom: 7pt !important;
|
||||
}
|
||||
|
||||
h5, h6 {
|
||||
color: black !important;
|
||||
font-size: 13pt !important; // 1.08x base text
|
||||
line-height: 1.4 !important;
|
||||
margin-top: 12pt !important;
|
||||
margin-bottom: 6pt !important;
|
||||
}
|
||||
|
||||
article h1 {
|
||||
border-bottom: 2px solid #ff7f2a;
|
||||
}
|
||||
|
||||
article h2 {
|
||||
border-bottom: 1px solid #ff7f2a;
|
||||
}
|
||||
|
||||
article h3 {
|
||||
border-bottom: 0.5px solid #ff7f2a;
|
||||
}
|
||||
|
||||
// Set base font size to 12pt for all content
|
||||
body, article {
|
||||
font-size: 12pt !important;
|
||||
line-height: 1.6 !important;
|
||||
}
|
||||
|
||||
// Ensure paragraphs use 12pt
|
||||
p {
|
||||
font-size: 12pt !important;
|
||||
line-height: 1.6 !important;
|
||||
}
|
||||
|
||||
// Code blocks and inline code should be 10pt
|
||||
pre, code, var, samp, kbd, tt {
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
|
||||
// Override any nested code font sizes
|
||||
pre code, pre var, pre samp, pre kbd, pre tt {
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
|
||||
// Lists should also use 12pt
|
||||
ul, ol, li {
|
||||
font-size: 12pt !important;
|
||||
}
|
||||
|
||||
// Table content can be smaller to fit all details
|
||||
table, td, th {
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
|
||||
// Override the tiny @page header/footer fonts to be more readable
|
||||
@page {
|
||||
@top-right {
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
@bottom-center {
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
@bottom-right {
|
||||
font-size: 10pt !important;
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,16 @@
|
||||
Regression Testing with Infamy
|
||||
==============================
|
||||
# Regression Testing with Infamy
|
||||
|
||||
Infix comes with a test suite that is intended to provide end-to-end
|
||||
verification of supported features. Generally speaking, this means
|
||||
that one or more DUTs are configured over NETCONF; the resulting
|
||||
verification of supported features. Generally speaking, this means that
|
||||
one or more DUTs are configured over NETCONF or RESTCONF; the resulting
|
||||
network is then black-box tested by injecting and inspecting network
|
||||
traffic at various points.
|
||||
|
||||
This document is intended to be a practical guide on how to run,
|
||||
develop and debug tests. There is a separate document describing the
|
||||
[Test System Architecture](test-arch.md).
|
||||
This document is intended to be a practical guide on how to run, develop
|
||||
and debug tests. There is a separate document describing the [Test
|
||||
System Architecture](test-arch.md).
|
||||
|
||||
|
||||
Modes of Testing
|
||||
----------------
|
||||
## Modes of Testing
|
||||
|
||||
### Virtual Devices
|
||||
|
||||
@@ -21,23 +18,33 @@ By default, tests are run on a topology made up of virtual Infix nodes
|
||||
using [Qeneth][]. To run the full regression test suite: build Infix
|
||||
for `x86_64`:
|
||||
|
||||
$ make x86_64_defconfig
|
||||
$ make
|
||||
$ make test
|
||||
```
|
||||
$ make x86_64_defconfig
|
||||
...
|
||||
$ make
|
||||
...
|
||||
$ make test
|
||||
...
|
||||
```
|
||||
|
||||
### Physical Devices
|
||||
|
||||
To run the tests on a preexisting topology from the host's network
|
||||
namespace, specify the `host` `TEST_MODE`:
|
||||
|
||||
$ make TEST_MODE=host test
|
||||
```
|
||||
$ make TEST_MODE=host test
|
||||
...
|
||||
```
|
||||
|
||||
This typically used when testing on physical hardware. By default the
|
||||
topology will be sourced from `/etc/infamy.dot`, but this can be
|
||||
overwritten by setting the `TOPOLOGY` variable:
|
||||
|
||||
$ make TEST_MODE=host TOPOLOGY=~/my-topology.dot test
|
||||
|
||||
```
|
||||
$ make TEST_MODE=host TOPOLOGY=~/my-topology.dot test
|
||||
...
|
||||
```
|
||||
|
||||
### `make run` Devices
|
||||
|
||||
@@ -48,26 +55,29 @@ instance is configured to use TAP networking.
|
||||
When the instance is running, you can open a separate terminal and run
|
||||
the subset of the test suite that can be mapped to it:
|
||||
|
||||
$ make TEST_MODE=run test
|
||||
```
|
||||
$ make TEST_MODE=run test
|
||||
...
|
||||
```
|
||||
|
||||
|
||||
Interactive Usage
|
||||
-----------------
|
||||
## Interactive Usage
|
||||
|
||||
When developing and debugging tests, the overhead of repeatedly
|
||||
setting up and tearing down the test environment can quickly start to
|
||||
weigh you down. In these situation, you can start an interactive test
|
||||
environment:
|
||||
|
||||
$ make test-sh
|
||||
Info: Generating topology
|
||||
Info: Generating node YAML
|
||||
Info: Generating executables
|
||||
Info: Launching dut1
|
||||
Info: Launching dut2
|
||||
Info: Launching dut3
|
||||
Info: Launching dut4
|
||||
11:42:52 infamy0:test #
|
||||
```
|
||||
$ make test-sh
|
||||
Info: Generating topology
|
||||
Info: Generating node YAML
|
||||
Info: Generating executables
|
||||
Info: Launching dut1
|
||||
Info: Launching dut2
|
||||
Info: Launching dut3
|
||||
Info: Launching dut4
|
||||
11:42:52 infamy0:test #
|
||||
```
|
||||
|
||||
The example above uses the default mode (`qeneth`), but the `host` and
|
||||
`run` modes also support the `test-sh` target.
|
||||
@@ -77,22 +87,27 @@ inside the container running Infamy. It's a very limited environment,
|
||||
but it has enough to easily run single tests, connect to the virtual
|
||||
devices, and *step* your code.
|
||||
|
||||
|
||||
### Running Subsets of Tests
|
||||
|
||||
Each test case is a separate executable, which can be run without
|
||||
arguments:
|
||||
|
||||
11:42:53 infamy0:test # ./case/infix_dhcp/dhcp_basic.py
|
||||
```
|
||||
11:42:53 infamy0:test # ./case/infix_dhcp/dhcp_basic.py
|
||||
```
|
||||
|
||||
To run a suite of tests, e.g., only the DHCP client tests, pass the
|
||||
suite as an argument to [9PM][]:
|
||||
|
||||
11:42:53 infamy0:test # ./9pm/9pm.py case/infix_dhcp/infix_dhcp.yaml
|
||||
```
|
||||
11:42:53 infamy0:test # ./9pm/9pm.py case/infix_dhcp/infix_dhcp.yaml
|
||||
```
|
||||
|
||||
To run the suite of all tests:
|
||||
|
||||
11:42:53 infamy0:test # ./9pm/9pm.py case/all.yaml
|
||||
```
|
||||
11:42:53 infamy0:test # ./9pm/9pm.py case/all.yaml
|
||||
```
|
||||
|
||||
### Connecting to Infamy
|
||||
|
||||
@@ -100,65 +115,76 @@ The test system runs in a Docker container, so to get a shell prompt in
|
||||
*another terminal* you need to connect to that container. Infamy comes
|
||||
with a helper script for this:
|
||||
|
||||
$ ./test/shell
|
||||
11:42:53 infamy0:test #
|
||||
```
|
||||
$ ./test/shell
|
||||
11:42:53 infamy0:test #
|
||||
```
|
||||
|
||||
By default it connect to the latest started Infamy instance. If you for
|
||||
some reason run multiple instances of Infamy the `shell` script takes an
|
||||
optional argument "system", which is the hostname of the container you
|
||||
want to connect to:
|
||||
|
||||
$ ./test/shell infamy2
|
||||
11:42:53 infamy2:test #
|
||||
|
||||
```
|
||||
$ ./test/shell infamy2
|
||||
11:42:53 infamy2:test #
|
||||
```
|
||||
|
||||
### Connecting to a DUT
|
||||
|
||||
> [!TIP]
|
||||
> The `console` script uses `telnet` to connect to a port forwarded to
|
||||
> `localhost` by the Docker container. To exit Telnet, use Ctrl-] and
|
||||
> then 'q' followed by enter. This can be customized in `~/.telnetrc`
|
||||
|
||||
All DUTs in a virtual Infamy topology are emulated in Qemu instances
|
||||
managed by qeneth. If you want to watch what's happening on one of the
|
||||
target systems, e.g., tail a log file or run `tcpdump` during the test,
|
||||
there is another helper script in Infamy for this:
|
||||
|
||||
$ ./test/console 1
|
||||
Trying 127.0.0.1...
|
||||
Connected to 127.0.0.1.
|
||||
```
|
||||
$ ./test/console 1
|
||||
Trying 127.0.0.1...
|
||||
Connected to 127.0.0.1.
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v23.11.0-226-g0c144da (console)
|
||||
infix-00-00-00 login: admin
|
||||
Password:
|
||||
.-------.
|
||||
| . . | Infix OS — Immutable.Friendly.Secure
|
||||
|-. v .-| https://kernelkit.org
|
||||
'-'---'-'
|
||||
Infix OS — Immutable.Friendly.Secure v23.11.0-226-g0c144da (console)
|
||||
infix-00-00-00 login: admin
|
||||
Password:
|
||||
.-------.
|
||||
| . . | Infix OS — Immutable.Friendly.Secure
|
||||
|-. v .-| https://kernelkit.org
|
||||
'-'---'-'
|
||||
|
||||
Run the command 'cli' for interactive OAM
|
||||
Run the command 'cli' for interactive OAM
|
||||
|
||||
admin@infix-00-00-00:~$
|
||||
admin@infix-00-00-00:~$
|
||||
```
|
||||
|
||||
From here we can observe `dut1` freely while running tests.
|
||||
|
||||
> The `console` script uses `telnet` to connect to a port forwarded to
|
||||
> `localhost` by the Docker container. To exit Telnet, use Ctrl-] and
|
||||
> then 'q' followed by enter. This can be customized in `~/.telnetrc`
|
||||
|
||||
Like the `shell` script, `console` takes an optional "system" argument
|
||||
in case you run multiple instances of Infamy:
|
||||
|
||||
$ ./test/console 1 infamy2
|
||||
```
|
||||
$ ./test/console 1 infamy2
|
||||
...
|
||||
```
|
||||
|
||||
You can also connect to the console of a DUT from within a `shell`:
|
||||
|
||||
$ ./test/shell
|
||||
11:42:54 infamy0:test # qeneth status
|
||||
11:42:54 infamy0:test # qeneth console dut1
|
||||
login: admin
|
||||
password: *****
|
||||
admin@infix-00-00-00:~$
|
||||
|
||||
> **Note:** disconnect from the qeneth console by using bringing up the
|
||||
> old Telnet "menu" using Ctrl-], compared to standard Telnet this is
|
||||
> the BusyBox version so you press 'e' + enter instead of 'q' to quit.
|
||||
```
|
||||
$ ./test/shell
|
||||
11:42:54 infamy0:test # qeneth status
|
||||
11:42:54 infamy0:test # qeneth console dut1
|
||||
login: admin
|
||||
password: *****
|
||||
admin@infix-00-00-00:~$
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> Disconnect from the qeneth console by bringing up the old Telnet
|
||||
> "menu" using Ctrl-], compared to standard Telnet this is the BusyBox
|
||||
> version so you press 'e' + enter instead of 'q' to quit.
|
||||
|
||||
### Attaching to MACVLANs
|
||||
|
||||
@@ -171,27 +197,32 @@ interactively inject traffic into the test setup.
|
||||
|
||||
First, connect to the Infamy instance in question:
|
||||
|
||||
$ ./test/shell
|
||||
11:43:19 infamy0:test #
|
||||
```
|
||||
$ ./test/shell
|
||||
11:43:19 infamy0:test #
|
||||
```
|
||||
|
||||
Then, attach to the MACVLAN namespace by running the `nsenter` helper
|
||||
script from the test directory, supplying the base interface name as
|
||||
the first argument:
|
||||
|
||||
11:43:19 infamy0:test # ./nsenter d1b
|
||||
11:43:20 infamy0(d1b):test #
|
||||
```
|
||||
11:43:19 infamy0:test # ./nsenter d1b
|
||||
11:43:20 infamy0(d1b):test #
|
||||
```
|
||||
|
||||
By default, an interactive shell is started, but you can also supply
|
||||
another command:
|
||||
|
||||
11:43:19 infamy0:test # ./nsenter d1b ip -br addr
|
||||
lo UNKNOWN 127.0.0.1/8 ::1/128
|
||||
iface@if7 UP 10.0.0.1/24 fe80::38d0:88ff:fe77:b7cd/64
|
||||
```
|
||||
11:43:19 infamy0:test # ./nsenter d1b ip -br addr
|
||||
lo UNKNOWN 127.0.0.1/8 ::1/128
|
||||
iface@if7 UP 10.0.0.1/24 fe80::38d0:88ff:fe77:b7cd/64
|
||||
```
|
||||
|
||||
You can now freely debug the network activity of your test and the
|
||||
responses from the DUT.
|
||||
|
||||
|
||||
### Using the Python Debugger
|
||||
|
||||
The built in `breakpoint()` function in Python is very useful when you
|
||||
@@ -202,13 +233,15 @@ Simply insert a call to `breakpoint()` at the point of interest in
|
||||
your test and run it as normal. Once Python executes the call, it will
|
||||
drop you into the Python debugger:
|
||||
|
||||
11:42:58 infamy0:test # ./case/infix_dhcp/dhcp_basic.py
|
||||
# Starting (2024-02-10 11:42:59)
|
||||
# Probing dut1 on port d1a for IPv6LL mgmt address ...
|
||||
# Connecting to mgmt IP fe80::ff:fe00:0%d1a:830 ...
|
||||
ok 1 - Initialize
|
||||
> /home/jocke/src/infix/test/case/infix_dhcp/dhcp_basic.py(44)<module>()
|
||||
(Pdb)
|
||||
```
|
||||
11:42:58 infamy0:test # ./case/infix_dhcp/dhcp_basic.py
|
||||
# Starting (2024-02-10 11:42:59)
|
||||
# Probing dut1 on port d1a for IPv6LL mgmt address ...
|
||||
# Connecting to mgmt IP fe80::ff:fe00:0%d1a:830 ...
|
||||
ok 1 - Initialize
|
||||
> /home/jocke/src/infix/test/case/infix_dhcp/dhcp_basic.py(44)<module>()
|
||||
(Pdb)
|
||||
```
|
||||
|
||||
At this point you have full access to the test's state, but it is also
|
||||
an opportunity to inspect the state of the DUTs (e.g. via their
|
||||
@@ -218,8 +251,9 @@ It is also possible to run a test under Pdb from the get-go, if you
|
||||
want to setup breakpoints without modifying the source, or simply step
|
||||
through the code:
|
||||
|
||||
11:42:58 infamy0:test # python -m pdb case/infix_dhcp/dhcp_basic.py
|
||||
|
||||
```
|
||||
11:42:58 infamy0:test # python -m pdb case/infix_dhcp/dhcp_basic.py
|
||||
```
|
||||
|
||||
### Deterministic Topology Mappings
|
||||
|
||||
@@ -230,34 +264,40 @@ between phyical nodes. In such cases, supplying a `PYTHONHASHSEED`
|
||||
variable (set to any 32-bit unsigned integer) when launching the test
|
||||
environment will make sure that topology mappings are deterministic:
|
||||
|
||||
$ make PYTHONHASHSEED=0 test-sh
|
||||
```
|
||||
$ make PYTHONHASHSEED=0 test-sh
|
||||
```
|
||||
|
||||
If a seed is not supplied, a random value is chosen. This seed is
|
||||
logged by the `meta/reproducible.py` test case when running a test
|
||||
suite:
|
||||
|
||||
$ make test
|
||||
Info: Generating topology
|
||||
Info: Generating node YAML
|
||||
Info: Generating executables
|
||||
Info: Launching dut1
|
||||
Info: Launching dut2
|
||||
Info: Launching dut3
|
||||
Info: Launching dut4
|
||||
9PM - Simplicity is the ultimate sophistication
|
||||
```
|
||||
$ make test
|
||||
Info: Generating topology
|
||||
Info: Generating node YAML
|
||||
Info: Generating executables
|
||||
Info: Launching dut1
|
||||
Info: Launching dut2
|
||||
Info: Launching dut3
|
||||
Info: Launching dut4
|
||||
9PM - Simplicity is the ultimate sophistication
|
||||
|
||||
Starting test 0002-reproducible.py
|
||||
2024-05-03 10:40:30 # Starting (2024-05-03 10:40:30)
|
||||
2024-05-03 10:40:30 # Specify PYTHONHASHSEED=3773822171 to reproduce this test environment
|
||||
2024-05-03 10:40:30 ok 1 - $PYTHONHASHSEED is set
|
||||
2024-05-03 10:40:30 # Exiting (2024-05-03 10:40:30)
|
||||
2024-05-03 10:40:30 1..1
|
||||
...
|
||||
Starting test 0002-reproducible.py
|
||||
2024-05-03 10:40:30 # Starting (2024-05-03 10:40:30)
|
||||
2024-05-03 10:40:30 # Specify PYTHONHASHSEED=3773822171 to reproduce this test environment
|
||||
2024-05-03 10:40:30 ok 1 - $PYTHONHASHSEED is set
|
||||
2024-05-03 10:40:30 # Exiting (2024-05-03 10:40:30)
|
||||
2024-05-03 10:40:30 1..1
|
||||
...
|
||||
```
|
||||
|
||||
This is useful because this value can then be used to rerun a test (or
|
||||
the whole suite) with identical topology mappings:
|
||||
|
||||
$ make PYTHONHASHSEED=3773822171 TESTS=case/ietf_system/hostname.py test
|
||||
```
|
||||
$ make PYTHONHASHSEED=3773822171 TESTS=case/ietf_system/hostname.py test
|
||||
```
|
||||
|
||||
### Deterministic Transport Protocol
|
||||
|
||||
@@ -266,13 +306,16 @@ chosen randomly. If you supply a `PYTHONHASHSEED` as described above,
|
||||
you get the same protocol used for that hash. But if you want to choose
|
||||
the protocol, add extra arguments to Infamy:
|
||||
|
||||
$ make INFAMY_EXTRA_ARGS="--transport=restconf" TESTS=case/ietf_system/hostname.py test
|
||||
```
|
||||
$ make INFAMY_EXTRA_ARGS="--transport=restconf" TESTS=case/ietf_system/hostname.py test
|
||||
```
|
||||
|
||||
or, when running interactively:
|
||||
|
||||
$ make test-sh
|
||||
09:08:17 infamy0:test # ./9pm/9pm.py -o"--transport=restconf" case/ietf_system/hostname.py
|
||||
|
||||
```
|
||||
$ make test-sh
|
||||
09:08:17 infamy0:test # ./9pm/9pm.py -o"--transport=restconf" case/ietf_system/hostname.py
|
||||
```
|
||||
|
||||
### Test specification
|
||||
|
||||
@@ -287,13 +330,13 @@ for example:
|
||||
```python
|
||||
test.step("Set IPv4 address on the interface dut:cross")
|
||||
test.step("Verify the IP address is set on dut:cross")
|
||||
|
||||
```
|
||||
where dut, cross and the IPv4 address could be found inside the
|
||||
|
||||
where *dut*, *cross* and the IPv4 address could be found inside the
|
||||
logical topology for the test.
|
||||
|
||||
Each test case must begin with the test name followed by a empty line and
|
||||
the description of the test. For example:
|
||||
Each test case must begin with the test name followed by a empty line
|
||||
and the description of the test. For example:
|
||||
|
||||
```
|
||||
"""
|
||||
@@ -305,32 +348,35 @@ Verify that it it possible to change hostname
|
||||
|
||||
The test specifaction can be genererated with:
|
||||
|
||||
$ make test-spec
|
||||
```
|
||||
$ make test-spec
|
||||
...
|
||||
```
|
||||
|
||||
### Test Development
|
||||
|
||||
For adding a new test to the automated regression test suite, it's best
|
||||
to start by reviewing an existing test case.
|
||||
|
||||
All tests are located in the `infix/test/case` repository and are
|
||||
grouped by the features they verify. For example,
|
||||
`infix/test/case/infix_services` contains tests for various Infix
|
||||
All tests are located in the `infix/test/case` repository and are
|
||||
grouped by the features they verify. For example,
|
||||
`infix/test/case/infix_services` contains tests for various Infix
|
||||
services, such as LLDP and mDNS.
|
||||
|
||||
While test grouping is flexible, each test should be placed in a
|
||||
While test grouping is flexible, each test should be placed in a
|
||||
logically relevant category.
|
||||
|
||||
When creating a new test group, add it to `infix/test/case/all.yaml`,
|
||||
to enable it to run as a
|
||||
[subset of the test suite](#running-subsets-of-tests):
|
||||
When creating a new test group, add it to `infix/test/case/all.yaml`, to
|
||||
enable it to run as a [subset of the test
|
||||
suite](#running-subsets-of-tests):
|
||||
|
||||
```
|
||||
- name: infix-services
|
||||
suite: infix_services/infix_services.yaml
|
||||
```
|
||||
|
||||
A new test (e.g., lldp_enable_disable) should be added to the
|
||||
corresponding test group .yaml file, such as
|
||||
A new test (e.g., lldp_enable_disable) should be added to the
|
||||
corresponding test group .yaml file, such as
|
||||
`infix/test/cases/infix_services.yaml`:
|
||||
|
||||
```
|
||||
@@ -338,21 +384,22 @@ corresponding test group .yaml file, such as
|
||||
case: lldp_enable_disable/test.py
|
||||
```
|
||||
|
||||
It is necessary to include the test in
|
||||
`infix/test/case/infix_services/Readme.adoc` to ensure proper test
|
||||
It is necessary to include the test in
|
||||
`infix/test/case/infix_services/Readme.adoc` to ensure proper test
|
||||
specification generation:
|
||||
|
||||
```
|
||||
include::lldp_enable_disable/Readme.adoc[]
|
||||
```
|
||||
|
||||
Each test case should have its own directory under,
|
||||
`infix/test/case/infix_services`, containing:
|
||||
- `test.py` - the test script
|
||||
- `topology.dot` - the logical topology definition.
|
||||
Each test case should have its own directory under,
|
||||
`infix/test/case/infix_services`, containing:
|
||||
|
||||
When the [test specification](#test-specification) is generated,
|
||||
`topology.svg` and `Readme.adoc` should also be created.
|
||||
- `test.py` - the test script
|
||||
- `topology.dot` - the logical topology definition.
|
||||
|
||||
When the [test specification](#test-specification) is generated,
|
||||
`topology.svg` and `Readme.adoc` should also be created.
|
||||
|
||||
[9PM]: https://github.com/rical/9pm
|
||||
[Qeneth]: https://github.com/wkz/qeneth
|
||||
|
||||
@@ -0,0 +1,429 @@
|
||||
# Upgrading & Boot Order
|
||||
|
||||
For resilience purposes, Infix maintains two software images referred to
|
||||
as the _primary_ and _secondary_ partition image. In addition, some
|
||||
bootloaders support [netbooting][1].
|
||||
|
||||
The _boot order_ defines which image is tried first, and is listed with
|
||||
the CLI `show software` command. It also shows Infix version installed
|
||||
per partition, and which image was used when booting (`STATE booted`).
|
||||
|
||||
```
|
||||
admin@example:/> show software
|
||||
BOOT ORDER
|
||||
primary secondary net
|
||||
|
||||
NAME STATE VERSION DATE
|
||||
primary booted v25.01.0 2025-04-25T10:15:00+00:00
|
||||
secondary inactive v25.01.0 2025-04-25T10:07:20+00:00
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
YANG support for upgrading Infix, inspecting and _modifying_ the
|
||||
boot-order, is defined in [infix-system-software][2].
|
||||
|
||||
|
||||
## Upgrading
|
||||
|
||||
Upgrading Infix is done one partition at a time. If the system has
|
||||
booted from one partition, an `upgrade` will apply to the other
|
||||
(inactive) partition.
|
||||
|
||||
1. Download and unpack the release to install. Make the image *pkg*
|
||||
bundle available at some URL[^2]
|
||||
2. (Optional) Backup the startup configuration
|
||||
3. Assume the unit has booted the `primary` image. Then running the
|
||||
`upgrade` command installs a new image on the `secondary` partition
|
||||
4. As part of a successful upgrade, the boot-order is implictly
|
||||
changed to boot the newly installed image
|
||||
5. Reboot the unit
|
||||
6. The unit now runs the new image. To upgrade the remaining partition
|
||||
(`primary`), run the same upgrade command again, and (optionally)
|
||||
reboot to verify the upgrade
|
||||
|
||||
> [!CAUTION]
|
||||
> During boot (step 5), the unit may [migrate](#configuration-migration)
|
||||
> the startup configuration for any syntax changes. It is therefore
|
||||
> important that you make sure to upgrade the other partition as well
|
||||
> after reboot, of course after having verified your setup.
|
||||
|
||||
The CLI example below shows steps 2-5.
|
||||
|
||||
*Backup startup configuration:* It is recommended to backup the startup
|
||||
configuration before performing an upgrade. The backup is useful if the
|
||||
upgrade fails, and makes a later [downgrade](#downgrading) a smoother
|
||||
process.
|
||||
|
||||
```
|
||||
admin@example:/> dir /cfg
|
||||
/cfg directory
|
||||
backup/ ssl/ startup-config.cfg
|
||||
|
||||
admin@example:/> copy /cfg/startup-config.cfg /cfg/v25.01.0-startup-config.cfg
|
||||
admin@example:/> dir /cfg
|
||||
/cfg directory
|
||||
backup/ ssl/ startup-config.cfg v25.01.0-startup-config.cfg
|
||||
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Upgrade:* Here the image *pkg bundle* was made available via TFTP.
|
||||
|
||||
```
|
||||
admin@example:/> upgrade tftp://198.18.117.1/infix-aarch64-25.03.1.pkg
|
||||
installing
|
||||
0% Installing
|
||||
0% Determining slot states
|
||||
10% Determining slot states done.
|
||||
...
|
||||
98% Copying image to rootfs.1
|
||||
99% Copying image to rootfs.1
|
||||
99% Copying image to rootfs.1 done.
|
||||
99% Updating slots done.
|
||||
100% Installing done.
|
||||
Installing `tftp://198.18.117.1/infix-aarch64-25.03.1.pkg` succeeded
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Reboot:* The unit will boot on the other partition, with the newly
|
||||
installed image. The `Loading startup-config` step conducts migration
|
||||
of startup configuration if applicable.
|
||||
|
||||
```
|
||||
admin@example:/> reboot
|
||||
[ OK ] Stopping Static routing daemon
|
||||
[ OK ] Stopping Zebra routing daemon
|
||||
...
|
||||
[ OK ] Loading startup-config
|
||||
[ OK ] Verifying self-signed https certificate
|
||||
[ OK ] Update DNS configuration
|
||||
[ OK ] Starting Status daemon
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v25.03.1 (ttyS0)
|
||||
example login: admin
|
||||
Password:
|
||||
.-------.
|
||||
| . . | Infix OS — Immutable.Friendly.Secure
|
||||
|-. v .-| https://kernelkit.org
|
||||
'-'---'-'
|
||||
|
||||
Run the command 'cli' for interactive OAM
|
||||
|
||||
admin@example:~$ cli
|
||||
|
||||
See the 'help' command for an introduction to the system
|
||||
|
||||
admin@example:/> show software
|
||||
BOOT ORDER
|
||||
secondary primary net
|
||||
|
||||
NAME STATE VERSION DATE
|
||||
primary inactive v25.01.0 2025-04-25T10:15:00+00:00
|
||||
secondary booted v25.03.1 2025-04-25T10:24:31+00:00
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
As shown, the *boot order* has been updated, so that *secondary* is
|
||||
now the preferred boot source.
|
||||
|
||||
To upgrade the remaining partition (`primary`), run the `upgrade URL`
|
||||
command again, and (optionally) reboot.
|
||||
|
||||
## Configuration Migration
|
||||
|
||||
The example above illustrated an upgrade from Infix v25.01.0 to
|
||||
v25.03.1. Inbetween these versions, YANG configuration definitions
|
||||
changed slightly (more details given below).
|
||||
|
||||
During boot, Infix inspects the `version` meta information within the
|
||||
startup configuration file to determine if configuration migration is
|
||||
needed. In this specific case, the configuration file has version
|
||||
`1.4` while the booted software expects version `1.5` (the
|
||||
configuration version numbering differs from the Infix image version
|
||||
numbering). The startup configuration is migrated to `1.5`
|
||||
definitions and stored, while a backup previous startup configuration
|
||||
is stored in directory `/cfg/backup/`.
|
||||
|
||||
```
|
||||
admin@example:/> dir /cfg/backup/
|
||||
/cfg/backup/ directory
|
||||
startup-config-1.4.cfg
|
||||
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
The modifications made to the startup configuration can be viewed by
|
||||
comparing the files from the *shell*. An example is shown below.
|
||||
|
||||
```
|
||||
admin@example:/> exit
|
||||
admin@example:~$ diff /cfg/backup/startup-config-1.4.cfg /cfg/startup-config.cfg
|
||||
--- /cfg/backup/startup-config-1.4.cfg
|
||||
+++ /cfg/startup-config.cfg
|
||||
...
|
||||
- "public-key-format": "ietf-crypto-types:ssh-public-key-format",
|
||||
+ "public-key-format": "infix-crypto-types:ssh-public-key-format",
|
||||
...
|
||||
- "private-key-format": "ietf-crypto-types:rsa-private-key-format",
|
||||
+ "private-key-format": "infix-crypto-types:rsa-private-key-format",
|
||||
...
|
||||
- "version": "1.4"
|
||||
+ "version": "1.5"
|
||||
...
|
||||
admin@example:~$
|
||||
```
|
||||
|
||||
## Downgrading
|
||||
|
||||
Downgrading to an earlier version is possible, however, downgrading is
|
||||
**not** guaranteed to work smoothly. In particular, when the unit boots
|
||||
up with the downgraded version, it may fail to apply the *startup
|
||||
config*, and instead apply its [failure config][3].
|
||||
|
||||
We consider two cases: downgrading with and without applying a backup
|
||||
startup configuration before rebooting.
|
||||
|
||||
In both cases we start out with a unit running Infix v25.03.1, and
|
||||
wish to downgrade to v25.01.0.
|
||||
|
||||
```
|
||||
admin@example:/> show software
|
||||
BOOT ORDER
|
||||
primary secondary net
|
||||
|
||||
NAME STATE VERSION DATE
|
||||
primary booted v25.03.1 2025-04-25T11:36:26+00:00
|
||||
secondary inactive v25.03.1 2025-04-25T10:24:31+00:00
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
### With Backup `startup-config`
|
||||
|
||||
This is the recommended approach to downgrade, given that you have a
|
||||
backup configuration available. The objective is to avoid ending up
|
||||
with the unit in *failure config*.
|
||||
|
||||
1. Find the backup configuration file
|
||||
1. Run `upgrade URL` to install Infix image to downgrade to
|
||||
1. Copy backup startup configuration to current startup configuration
|
||||
(from shell)
|
||||
1. Reboot
|
||||
|
||||
*Find the backup configuration file:*
|
||||
|
||||
Assume you have a backup startup config for the Infix version to
|
||||
downgrade to (here Infix v25.01.0, config `version 1.4`).
|
||||
|
||||
The preferred approach is to use a startup configuration backed up when
|
||||
running Infix v25.01.0 on the unit. See section [Upgrading](#upgrading)
|
||||
above for more information. In the following example, there is a backup
|
||||
file available named `v25.01.0-startup-config.cfg`:
|
||||
|
||||
```
|
||||
admin@example:/> dir /cfg
|
||||
/cfg directory
|
||||
backup/ ssl/ startup-config.cfg v25.01.0-startup-config.cfg
|
||||
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
The alternative is to use a startup config implicitly backed up by the
|
||||
system as part of [Configuration Migration](#configuration-migration).
|
||||
|
||||
```
|
||||
admin@example:/> dir /cfg/backup/
|
||||
/cfg/backup/ directory
|
||||
startup-config-1.4.cfg
|
||||
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
> [!CAUTION]
|
||||
> Using a backup configuration file stored when the unit was running the
|
||||
> old version (e.g., v25.01.0-startup-config.cfg) is preferred. Although
|
||||
> backup files stored due to configuration migration (e.g.,
|
||||
> `startup-config-1.4.cfg`) usually works too if the configuration file
|
||||
> version (`1.4`) matches, there are situations when the system may fail
|
||||
> to apply it as described below.
|
||||
|
||||
The *configuration file version* (`1.4`) is only incremented when
|
||||
changes in YANG configuration syntax mandates it to handle *upgrading*.
|
||||
Say the next Infix version includes a new feature setting, it can still
|
||||
have version `1.4`, as upgrading to it would not need migration. If a
|
||||
user then enables the new feature setting, the new configuration will no
|
||||
longer be compatible with the previous *Infix version*. A downgrade
|
||||
after enabling new features risks ending up with the unit in *failure
|
||||
config*.
|
||||
|
||||
*Use `upgrade` command to downgrade:*
|
||||
|
||||
```
|
||||
admin@example:/> upgrade tftp://198.18.117.1/infix-aarch64-25.01.0.pkg
|
||||
installing
|
||||
0% Installing
|
||||
0% Determining slot states
|
||||
10% Determining slot states done.
|
||||
...
|
||||
99% Copying image to rootfs.1 done.
|
||||
99% Updating slots done.
|
||||
100% Installing done.
|
||||
Installing `tftp://198.18.117.1/infix-aarch64-25.01.0.pkg` succeeded
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Apply the backup configuration file:*
|
||||
|
||||
It is recommended to use a backup configuration file for the Infix version to
|
||||
downgrade to, if there is one available.
|
||||
|
||||
```
|
||||
admin@example:/> copy /cfg/v25.01.0-startup-config.cfg /cfg/startup-config.cfg
|
||||
Overwrite existing file /cfg/startup-config.cfg (y/N)? y
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
An alternative is to use a backup file stored when the system
|
||||
conducted a [configuration migration](#configuration-migration). See
|
||||
the *caution* note above.
|
||||
|
||||
```
|
||||
admin@example:/> copy /cfg/backup/startup-config-1.4.cfg /cfg/startup-config.cfg
|
||||
Overwrite existing file /cfg/startup-config.cfg (y/N)? y
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Reboot:*
|
||||
|
||||
The unit will come up with the applied backup configuration.
|
||||
|
||||
```
|
||||
admin@example:/> reboot
|
||||
[ OK ] Saving system clock to file
|
||||
[ OK ] Stopping Software update service
|
||||
[ OK ] Stopping Status daemon
|
||||
...
|
||||
[ OK ] Bootstrapping YANG datastore
|
||||
[ OK ] Starting Configuration daemon
|
||||
[ OK ] Loading startup-config
|
||||
[ OK ] Update DNS configuration
|
||||
[ OK ] Verifying self-signed https certificate
|
||||
[ OK ] Starting Status daemon
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v25.01.0 (ttyS0)
|
||||
example login:
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> If the unit despite these measures ends up in *failure config*, see
|
||||
> the next section for more information on how to recover.
|
||||
|
||||
### Without a Backup `startup-config`
|
||||
|
||||
This procedure assumes you have access to the unit's console port and
|
||||
its default login credentials[^1].
|
||||
|
||||
1. Downgrade
|
||||
1. Reboot
|
||||
1. Login with unit's default credentials
|
||||
1. Conduct factory reset
|
||||
1. (Then go on configure the unit as you wish)
|
||||
|
||||
*Use `upgrade` command to downgrade:*
|
||||
|
||||
```
|
||||
admin@example:/> upgrade tftp://198.18.117.1/infix-aarch64-25.01.0.pkg
|
||||
installing
|
||||
0% Installing
|
||||
0% Determining slot states
|
||||
10% Determining slot states done.
|
||||
...
|
||||
99% Copying image to rootfs.1 done.
|
||||
99% Updating slots done.
|
||||
100% Installing done.
|
||||
Installing `tftp://198.18.117.1/infix-aarch64-25.01.0.pkg` succeeded
|
||||
admin@example:/>
|
||||
```
|
||||
|
||||
*Reboot:*
|
||||
|
||||
Conduct a reboot. During boot, the unit fails to apply the existing
|
||||
startup configuration (config version `1.5` while software expects
|
||||
version `1.4` or earlier), and instead applies its [failure
|
||||
config][3]. This is what is seen on the console when this situation
|
||||
occurs. Note that the login prompt displays `failed` as part of the
|
||||
*hostname*.
|
||||
|
||||
```
|
||||
admin@example:/> reboot
|
||||
[ OK ] Saving system clock to file
|
||||
[ OK ] Stopping Software update service
|
||||
[ OK ] Stopping Status daemon
|
||||
...
|
||||
[ OK ] Verifying SSH host keys
|
||||
[ OK ] Bootstrapping YANG datastore
|
||||
[ OK ] Starting Configuration daemon
|
||||
[FAIL] Loading startup-config
|
||||
[ OK ] Loading failure-config
|
||||
[ OK ] Verifying self-signed https certificate
|
||||
[ OK ] Starting Status daemon
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v25.01.0 (ttyS0)
|
||||
|
||||
ERROR: Corrupt startup-config, system has reverted to default login credentials
|
||||
failed-00-00-00 login:
|
||||
```
|
||||
|
||||
To remedy a situation like this, you can login with the unit's *default
|
||||
login credentials*, preferrably via a [console port][4].
|
||||
The unit's default credentials are typically printed on a sticker on
|
||||
the unit.
|
||||
|
||||
```
|
||||
failed-00-00-00 login: admin
|
||||
Password:
|
||||
|
||||
Run the command 'cli' for interactive OAM
|
||||
|
||||
admin@failed-00-00-00:~$
|
||||
```
|
||||
|
||||
When it is *safe* from a network operations perspective, you can
|
||||
conduct a factory reset and reboot. It is recommended to remove the
|
||||
unit from any production network before doing this, as a factory reset
|
||||
may enable undesired connectivity between the unit's ports.
|
||||
|
||||
```
|
||||
admin@failed-00-00-00:~$ factory
|
||||
Factory reset device (y/N)? y
|
||||
factory: scheduled factory reset on next boot.
|
||||
Reboot now to perform reset, (y/N)? y
|
||||
[ OK ] Saving system time (UTC) to RTC
|
||||
[ OK ] Stopping mDNS alias advertiser
|
||||
...
|
||||
[ OK ] Starting Configuration daemon
|
||||
[ OK ] Loading startup-config
|
||||
[ OK ] Update DNS configuration
|
||||
[ OK ] Verifying self-signed https certificate
|
||||
[ OK ] Starting Status daemon
|
||||
[ OK ] Starting Status daemon
|
||||
|
||||
|
||||
Please press Enter to activate this console.
|
||||
|
||||
Infix OS — Immutable.Friendly.Secure v25.01.0 (ttyS0)
|
||||
example login:
|
||||
```
|
||||
|
||||
Continued configuration is done as with any unit after factory reset.
|
||||
|
||||
[1]: netboot.md
|
||||
[2]: https://github.com/kernelkit/infix/blob/main/src/confd/yang/confd/infix-system-software.yang
|
||||
[3]: boot.md#system-boot
|
||||
[4]: management.md#console-port
|
||||
[5]: scripting.md#-backup-configuration-using-sysrepocfg-and-scp
|
||||
|
||||
[^1]: In failure config, Infix puts all Ethernet ports as individual
|
||||
interfaces. With direct access, one can connect with e.g., SSH,
|
||||
using link local IPv6 addresses. This as an alternative to
|
||||
connecting via a console port.
|
||||
[^2]: Set up an FTP/TFTP/SFTP or HTTP/HTTPS server on the same LAN.
|
||||
@@ -1,5 +1,5 @@
|
||||
Infix in Virtual Environments
|
||||
=============================
|
||||
Virtual Environments
|
||||
=====================
|
||||
|
||||
Infix primarily targets real hardware, deployment to the cloud is not a
|
||||
priority at the moment. However, for development and testing purposes
|
||||
@@ -9,33 +9,38 @@ These images also work with the Graphical Network Simulator ([GNS3][]),
|
||||
which is a very user-friendly tool for playing around with simple to
|
||||
complex network setups, verifying interoperability between vendors, etc.
|
||||
|
||||
|
||||
QEMU
|
||||
----
|
||||
|
||||
> **Note:** installation for Debian/Ubuntu based systems: <kbd>sudo apt
|
||||
> install virt-manager</kbd> -- dependencies ensure the relevant Qemu
|
||||
> packages are pulled in as well. Installing [virt-manager][virt] helps
|
||||
> set up Qemu networking on your system.
|
||||
> [!TIP]
|
||||
> Installation for Debian/Ubuntu based systems can be done by "simply":
|
||||
> <kbd>sudo apt install virt-manager</kbd> -- dependencies ensure the
|
||||
> relevant Qemu packages are pulled in as well. This trick, installing
|
||||
> [virt-manager][virt], helps set up Qemu networking on your system.
|
||||
|
||||
A virtualized Infix x86_64 instance can easily be launched from a Linux
|
||||
system, with [Qemu][] installed, by issuing:
|
||||
|
||||
./qemu.sh
|
||||
```
|
||||
$ ./qemu.sh
|
||||
...
|
||||
```
|
||||
|
||||
from an unpacked [release tarball][rels]. From a built source tree of
|
||||
Infix the same functionality is bundled as:
|
||||
|
||||
make run
|
||||
```
|
||||
$ make run
|
||||
...
|
||||
```
|
||||
|
||||
To change settings, e.g. networking, <kbd>make run-menuconfig</kbd>, or
|
||||
from a pre-built Infix release tarball, using <kbd>./qemu.sh -c</kbd>
|
||||
|
||||
The Infix test suite is built around Qemu and [Qeneth][qeth], see:
|
||||
|
||||
* [Testing](testing.md)
|
||||
* [Docker Image](../test/docker/README.md)
|
||||
|
||||
* [Regression Testing with Infamy](testing.md)
|
||||
* [Infamy Docker Image](https://github.com/kernelkit/infix/blob/main/test/docker/README.md)
|
||||
|
||||
GNS3
|
||||
----
|
||||
|
||||
@@ -74,12 +74,13 @@ encoded strings is a decision imposed by Infix; the ONIE specification
|
||||
allows for arbitrary binary data.
|
||||
|
||||
**Example**:
|
||||
|
||||
```json
|
||||
{
|
||||
...
|
||||
"vendor-extension": [
|
||||
[ 12345, "my extension data" ]
|
||||
]
|
||||
...
|
||||
"vendor-extension": [
|
||||
[ 12345, "my extension data" ]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -102,12 +103,13 @@ Since the extension is itself stored in a JSON document, it has to be
|
||||
appropriately quoted.
|
||||
|
||||
**Example**:
|
||||
|
||||
```json
|
||||
{
|
||||
...
|
||||
"vendor-extension": [
|
||||
[ 61046, "{\"pwhash\":\"$6$9rufAxdqCrxrwfQR$G0l9cTVlu/vOhxgo/uMKfRDOmZRd5XWF3vKr5da6qYoxuTJBS/Pl9K.5lrabWoWFFc.71yFMaSlZz0O8FtAtl.\"}" ]
|
||||
]
|
||||
...
|
||||
"vendor-extension": [
|
||||
[ 61046, "{\"pwhash\":\"$6$9rufAxdqCrxrwfQR$G0l9cTVlu/vOhxgo/uMKfRDOmZRd5XWF3vKr5da6qYoxuTJBS/Pl9K.5lrabWoWFFc.71yFMaSlZz0O8FtAtl.\"}" ]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -152,9 +154,8 @@ binary in its equivalent JSON representation:
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
[oniespec]: https://opencomputeproject.github.io/onie/design-spec/hw_requirements.html
|
||||
[onieprom]: ../board/common/rootfs/bin/onieprom
|
||||
[onieprom]: https://github.com/kernelkit/infix/blob/main/board/common/rootfs/usr/bin/onieprom
|
||||
[driver]: https://elixir.bootlin.com/linux/latest/source/drivers/nvmem/layouts/onie-tlv.c
|
||||
[pens]: https://www.iana.org/assignments/enterprise-numbers/
|
||||
[kkit]: https://github.com/kernelkit
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
site_name: User's Guide
|
||||
site_description: Infix Documentation
|
||||
site_url: https://kernelkit.github.io/infix/
|
||||
repo_url: https://github.com/kernelkit/infix/
|
||||
repo_name: kernelkit/infix
|
||||
copyright: Copyright © 2022-2025 The KernelKit Team
|
||||
docs_dir: doc/
|
||||
edit_uri: edit/master/doc/
|
||||
extra_css:
|
||||
- extra.css
|
||||
|
||||
exclude_docs: |
|
||||
ChangeLog.md
|
||||
cli/README.md
|
||||
README.md
|
||||
TODO.org
|
||||
|
||||
nav:
|
||||
- Introduction: index.md
|
||||
- CLI:
|
||||
- Introduction: cli/introduction.md
|
||||
- Configuration: cli/configure.md
|
||||
- Keybindings: cli/keybindings.md
|
||||
- Network Calculator: cli/netcalc.md
|
||||
- Network Monitoring: cli/tcpdump.md
|
||||
- Quickstart Guide: cli/quick.md
|
||||
- Text Editor: cli/text-editor.md
|
||||
- Upgrading: cli/upgrade.md
|
||||
- Docker Containers: container.md
|
||||
- Networking:
|
||||
- Network Configuration: networking.md
|
||||
- Quality of Service: qos.md
|
||||
- RMON Counters: eth-counters.md
|
||||
- Tunneling (L2/L3): tunnels.md
|
||||
- Wireless LAN (WiFi): wifi.md
|
||||
- Services:
|
||||
- Device Discovery: discovery.md
|
||||
- DHCP Server: dhcp.md
|
||||
- System:
|
||||
- Boot Procedure: boot.md
|
||||
- Configuration: system.md
|
||||
- Hardware Info & Status: hardware.md
|
||||
- Management: management.md
|
||||
- Syslog Support: syslog.md
|
||||
- Upgrade: upgrade.md
|
||||
- Scripting:
|
||||
- Introduction: scripting.md
|
||||
- Legacy Scripting: scripting-sysrepocfg.md
|
||||
- Production Testing: scripting-prod.md
|
||||
- Remote RESTCONF: scripting-restconf.md
|
||||
- Developer's Corner:
|
||||
- Branding & Releases: branding.md
|
||||
- Developer's Guide: developers-guide.md
|
||||
- Developing with Buildroot: override-package.md
|
||||
- Netboot HowTo: netboot.md
|
||||
- Regression Testing: testing.md
|
||||
- Test System Architecture: test-arch.md
|
||||
- Virtual Environments: virtual.md
|
||||
- Vital Product Data (VPD): vpd.md
|
||||
- Origin & Licensing: license.md
|
||||
|
||||
theme:
|
||||
logo: logo-plain.png
|
||||
name: material
|
||||
features:
|
||||
- toc.follow
|
||||
# - toc.integrate
|
||||
- navigation.path
|
||||
- navigation.instant
|
||||
- navigation.instant.progress
|
||||
- navigation.tracking
|
||||
- navigation.indexes
|
||||
# - navigation.tabs
|
||||
# - navigation.sections
|
||||
# - navigation.expand
|
||||
# - navigation.top
|
||||
# - navigation.footer
|
||||
- search.highlight
|
||||
- search.share
|
||||
# - content.action.edit
|
||||
- content.code.copy
|
||||
- content.code.annotate
|
||||
- content.footnote.tooltips
|
||||
palette:
|
||||
- media: "(prefers-color-scheme: light)"
|
||||
scheme: default
|
||||
primary: orange
|
||||
accent: orange
|
||||
toggle:
|
||||
icon: material/weather-night
|
||||
name: Switch to dark mode
|
||||
- media: "(prefers-color-scheme: dark)"
|
||||
scheme: slate
|
||||
primary: black
|
||||
accent: orange
|
||||
toggle:
|
||||
icon: material/weather-sunny
|
||||
name: Switch to light mode
|
||||
|
||||
markdown_extensions:
|
||||
- admonition
|
||||
- attr_list
|
||||
- footnotes
|
||||
- pymdownx.details
|
||||
- pymdownx.superfences
|
||||
- pymdownx.highlight:
|
||||
anchor_linenums: true
|
||||
- pymdownx.inlinehilite
|
||||
- pymdownx.snippets
|
||||
- pymdownx.tabbed:
|
||||
alternate_style: true
|
||||
- tables
|
||||
- toc:
|
||||
permalink: true
|
||||
|
||||
plugins:
|
||||
- search
|
||||
- callouts
|
||||
- mike
|
||||
- to-pdf:
|
||||
cover: true
|
||||
enabled_if_env: PDF_EXPORT
|
||||
cover_logo: logo-plain.png
|
||||
cover_subtitle: Immutable.Friendly.Secure
|
||||
custom_template_path: doc/templates
|
||||
output_path: pdf/infix-user-guide.pdf
|
||||
toc_level: 2
|
||||
ordered_chapter_level: 3
|
||||
heading_shift: false
|
||||
|
||||
extra:
|
||||
generator: false
|
||||
homepage: https://kernelkit.org/
|
||||
version:
|
||||
provider: mike
|
||||
@@ -10,7 +10,6 @@ source "$BR2_EXTERNAL_INFIX_PATH/package/confd/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/confd-test-mode/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/curios-httpd/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/curios-nftables/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/execd/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/gencert/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/statd/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/factory/Config.in"
|
||||
@@ -43,4 +42,5 @@ source "$BR2_EXTERNAL_INFIX_PATH/package/rousette/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/nghttp2-asio/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/date-cpp/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/rauc-installation-status/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/package/bootloader-splashscreen/Config.in"
|
||||
endmenu
|
||||
|
||||