265 lines
12 KiB
Markdown
265 lines
12 KiB
Markdown
#<center><H1>Nenjim<br>Documentation</H1></center>
|
||
|
||
**Indholdsfortegnelse:**
|
||
<!-- TOC -->
|
||
* [1. Introduktion til Nenjim](#1-introduktion-til-nenjim)
|
||
* [2. Versionering og Afhængigheder](#2-versionering-og-afhængigheder)
|
||
* [3. Opdateringer og Sikkerhed](#3-opdateringer-og-sikkerhed)
|
||
* [4. Betalingssystem og Integration med AssetAZ](#4-betalingssystem-og-integration-med-assetaz)
|
||
* [5. Backing Store og Fleksibilitet](#5-backing-store-og-fleksibilitet)
|
||
* [6. Standardiseret og Automatiseret Pakkehåndtering](#6-standardiseret-og-automatiseret-pakkehåndtering)
|
||
* [7. Betydningen af Semantisk Versionering](#7-betydningen-af-semantisk-versionering)
|
||
* [8. Integration af Plugins og Centralt Registry](#8-integration-af-plugins-og-centralt-registry)
|
||
* [9. Integration med AssetAZ og økonomisk aktivitet](#9-integration-med-assetaz-og-økonomisk-aktivitet)
|
||
<!-- TOC -->
|
||
|
||
## 1. Introduktion til Nenjim
|
||
Nenjim er et innovativt system, der gør det muligt at håndtere forskellige versioner af softwarepakker simultant.
|
||
Systemet løser udfordringen med afhængigheder og versionering ved at benytte unikke versionsnumre i pakkernes
|
||
navngivning, hvilket sikrer, at flere versioner af samme softwarepakke kan eksistere side om side uden konflikter.
|
||
|
||
## 2. Versionering og Afhængigheder
|
||
Nenjim bruger en metode, hvor pakker navngives med versionsnummer direkte i pakkenavnet. Dette håndteres dog i
|
||
såkaldte journaler, udenfor selve koden, således at Java koden ikke har afhængigheder til Nenjim her.
|
||
Dette sikrer, at udviklere ikke behøver at bekymre sig om versionskonflikter, da hver afhængighed refererer præcist
|
||
til den version, den har brug for. Systemet sørger for, at alle nødvendige moduler er tilgængelige og opdaterede
|
||
i baggrunden.
|
||
|
||
## 3. Opdateringer og Sikkerhed
|
||
Nenjim holder automatisk øje med opdateringer gennem det der kaldes journaler. Hvis der opdages en sikkerhedsbrist
|
||
i en bestemt version, opdaterer udviklerne journalen, og alle NenjimHubs vil automatisk hente den nye sikrede version,
|
||
eller nedgradere til en tidligere version indtil en opdatering er klar. På denne måde spredes opdateringer hurtigt
|
||
og effektivt i hele netværket.
|
||
|
||
## 4. Betalingssystem og Integration med AssetAZ
|
||
For at understøtte betaling for softwarepakker har Nenjim en integration med AssetAZ. Det betyder, at udviklere kan
|
||
vælge at modtage betaling for deres pakker enten som engangsbeløb, abonnement eller per brug. Det hele håndteres
|
||
via kryptovaluta.
|
||
|
||
## 5. Backing Store og Fleksibilitet
|
||
Nenjim giver fuld fleksibilitet i forhold til, hvor data lagres. Det kan være via på IPFS, i en lokal mappe, eller
|
||
endda i en database. Systemet er designet til at være så fleksibelt, at udviklere kan vælge den løsning, der
|
||
passer bedst til deres behov.
|
||
|
||
## 6. Standardiseret og Automatiseret Pakkehåndtering
|
||
En af de store fordele ved Nenjim er, at brugere ikke længere behøver at søge manuelt efter afhængigheder på
|
||
Internettet. Nenjim benytter en standardiseret metode til at finde og downloade pakker automatisk f.eks. via IPFS.
|
||
Det betyder, at alle pakker er let tilgængelige og kan hentes på en ensartet måde, hvilket sparer tid og sikrer
|
||
en mere strømlinet oplevelse for både udviklere og brugere.
|
||
|
||
## 7. Betydningen af Semantisk Versionering
|
||
For at Nenjim kan fungere optimalt, er det essentielt, at alle pakker følger principperne for semantisk
|
||
versionering. Det betyder, at hver version af en pakke tydeligt angiver, om der er tale om en mindre opdatering,
|
||
en fejlrettelse eller en større, potentielt inkompatibel ændring. Ved at overholde disse versioneringsregler
|
||
kan Nenjim nemt og sikkert håndtere opdateringer og sikre, at systemet altid er stabilt og velfungerende.
|
||
|
||
## 8. Integration af Plugins og Centralt Registry
|
||
En af de unikke fordele ved at benytte Nenjim er, at applikationer kan kommunikere direkte med NenjimHub'en
|
||
for at finde og integrere nye plugins. Gennem et globalt registry kan applikationer søge efter plugins,
|
||
der implementerer bestemte interfaces af specifikke versioner, og dermed let udvide deres funktionalitet.
|
||
Denne fleksibilitet gør det muligt for brugere at tilføje nye features eller forbedringer, som for eksempel
|
||
codecs til en videoafspiller og samtidig se, hvad de forskellige plugins koster.
|
||
|
||
## 9. Integration med AssetAZ og økonomisk aktivitet
|
||
Nenjim er designet til at være et åbent og frit værktøj til håndtering af afhængigheder, versionering og afvikling af
|
||
softwarepakker. Systemet kan bruges uden nogen form for betaling, og alle grundlæggende funktioner – som f.eks.
|
||
lokal injektion, analyse af afhængigheder og dynamisk classloading – er tilgængelige uden krav om økonomisk interaktion.
|
||
Men i de tilfælde, hvor brugeren ønsker at gøre sin software offentligt tilgængelig for andre – f.eks. ved at
|
||
propagere pakker til et registry eller sælge sin software – vil der være knyttet en lille økonomisk omkostning til
|
||
disse handlinger.
|
||
For at understøtte denne form for aktivitet, anvender Nenjim den digitale AssetAZ crypto token. Denne token er
|
||
en del af den bredere AssetAZ-platform og giver mulighed for mikrobetalinger i forbindelse med softwaredistribution.
|
||
Ved at benytte en dedikeret token opnås en decentral og gennemsigtig afregningsmekanisme, samtidig med at det skaber
|
||
en naturlig kobling til AssetAZ, hvor hele den økonomiske infrastruktur er forankret.
|
||
Det er vigtigt at bemærke, at denne integration ikke begrænser brugen af Nenjim i almindelige, ikke-kommercielle
|
||
sammenhænge, men i det øjeblik man ønsker at publicere og distribuere software med økonomisk formål – og dermed
|
||
også deltage i registrering og transaktionslogik – kræver det at AssetAZ og dens token anvendes.
|
||
På den måde skabes et bæredygtigt økosystem, hvor det er gratis at bruge og eksperimentere, men koster et lille beløb
|
||
at gøre noget kommercielt.
|
||
|
||
## 10. Installation af en NenjimHub
|
||
For at NenjimHub'en kan køre godt, skal den leve i et samspil med nogle andre komponenter. Dette kan sættes op på
|
||
forskellige måder. Efterfølgende er et eksempel på en opsætning i en Virtuel Maskine, eller en lille fysisk host.
|
||
Bemærk at ECC ram er kritisk for stabiliteten, specielt hvis NenjimHub'en skal arbejde med finansielle aktiviteter.
|
||
Efterfølgende er en beskrivelse af hvordan man laver en opsætning som virker. Du kan lave specielle rettelser, hvis
|
||
du forstår hvad du laver. Det vil dog være en god idé at følge en standard opsætning, så alt bliver lidt nemmere
|
||
at styre.
|
||
|
||
## 10.1 Reference opsætning af Fysisk eller Virtuel Maskine (VM) til NenjimHub
|
||
Her beskrives hvordan man laver en standard opsætning af en NenjimHub. Denne opsætning vil også blive refereret til
|
||
som reference opsætningen, sådan at man har et fælles udgangspunkt at tale ud fra.
|
||
|
||
## 10.1.2 Minimale system krav
|
||
Det er klart at jo mere NenjimHub'en skal lave, jo større er hardware kravene, men med en 'NenjimHub Reference
|
||
Configuration', får du en opsætning der kan starte op og som du kan bygge videre fra.
|
||
Derfor er kravene til opsætningen meget moderate.
|
||
* CPU: 64bit x86
|
||
* RAM: 2GB (Helst ECC)
|
||
* Storage: 2x16GB (for RAID)
|
||
* Networking: Public IPv4 access
|
||
|
||
## 10.1.3 Basis Operativ System installation
|
||
Hvis du installerer som en VM (Proxmox), så brug følgende:
|
||
* Aktiver Qemu Agent
|
||
* Virtual Machine type: q35
|
||
* BIOS: OVMF (UEFI - med EFI disk + Pre-Enrolled keys)
|
||
* Storage: 2 x 16GB (SSD emulation + Discard)
|
||
* CPU: 2 CPU cores (type: x86-64-v2-AES)
|
||
* Memory: 2GB (Minimum 1GB + Ballooning)
|
||
* Network: Adgang til et netværk med DHCP service (Fravælg Proxmox firewall)
|
||
|
||
Installer basis Operativ System:
|
||
- Boot installations medie for Debian-13
|
||
- Vælg defaults med mindre andet angivet nedenfor
|
||
- User setup:
|
||
- Full name: System Operator
|
||
- Username: sysop
|
||
- Partition disks:
|
||
- Manual
|
||
- Lav nye tomme partitions tabeller
|
||
- Disk 1:
|
||
- Partition 1
|
||
- Size: 512MB
|
||
- Name: EFI1
|
||
- Use as: EFI System Partition
|
||
- Bootable: on
|
||
- Partition 2
|
||
- Size: 8GB
|
||
- Name: ROOT1
|
||
- Use as: Ext4
|
||
- Label: ROOT
|
||
- Partition 3
|
||
- Size: 8.7GB (Resten af disken)
|
||
- Name: ZFS1
|
||
- Use as: do not use
|
||
- Disk 2:
|
||
- Partition 1
|
||
- Size: 512MB
|
||
- Name: EFI2
|
||
- Use as: do not use
|
||
- Partition 2
|
||
- Size: 8GB
|
||
- Name: ROOT2
|
||
- Use as: do not use
|
||
- Partition 3
|
||
- Size: 8.7GB (Resten af disken)
|
||
- Name: ZFS2
|
||
- Use as: do not use
|
||
- Acceptér ikke at opsætte swap endnu.
|
||
- Software selection:
|
||
- SSH server
|
||
- standard system utilities
|
||
- Reboot after installation
|
||
|
||
Install additional tools:
|
||
```
|
||
$ su -
|
||
# apt-get update; apt-get install -y htop zram-tools sudo tmux
|
||
# usermod -aG sudo sysop
|
||
(Log ud og ind igen)
|
||
# sudo bash
|
||
# vi /etc/default/zramswap
|
||
(Ret PRIORITY=1)
|
||
# sed -ri'.bak' '/^deb/ { /contrib/! s/$/ contrib/ }' /etc/apt/sources.list
|
||
# apt-get update
|
||
# mokutil --sb-state || sudo apt -y install mokutil && mokutil --sb-state
|
||
# apt install -y dkms sbsigntool shim-signed mokutil
|
||
# mokutil --import /var/lib/dkms/mok.pub
|
||
(Indtast en midlertidig adgangskode)
|
||
# apt-get install -y linux-headers-amd64 zfsutils-linux zfs-dkms zfs-zed
|
||
# reboot
|
||
(Når den blå skærm kommer, vælg 'Enroll MOK' og brug nu det password du valgte ovenover)
|
||
```
|
||
|
||
Opret ZFS pool:
|
||
```
|
||
$ sudo bash
|
||
# zpool create zfspool -O xattr=sa -o ashift=12 -O compression=lz4 -O checksum=sha512 -O dedup=on -O atime=off mirror /dev/sda3 /dev/sdb3
|
||
```
|
||
|
||
Opret swap:
|
||
```
|
||
$ sudo bash
|
||
# zfs create -V 4G -o compression=zle \
|
||
-o logbias=throughput -o sync=always \
|
||
-o primarycache=metadata -o secondarycache=none \
|
||
-o com.sun:auto-snapshot=false zfspool/swap
|
||
# mkswap -f /dev/zvol/zfspool/swap
|
||
# echo /dev/zvol/zfspool/swap none swap sw,pri=0 0 0 >> /etc/fstab
|
||
# swapon -av
|
||
```
|
||
|
||
Installér docker (using official repository instead of Debian repository):
|
||
```
|
||
$ sudo bash
|
||
# apt install -y apt-transport-https ca-certificates curl gpg
|
||
# curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
|
||
# echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian trixie stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
# apt update
|
||
# apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||
# usermod -aG docker sysop
|
||
(Log out and in again)
|
||
```
|
||
|
||
Flyt docker storage til ZFS:
|
||
```
|
||
$ sudo bash
|
||
# systemctl stop docker
|
||
# zfs create -V 3G zfspool/var_lib_docker
|
||
# mkfs.ext4 /dev/zvol/zfspool/var_lib_docker
|
||
# rm -rf /var/lib/docker
|
||
# mkdir /var/lib/docker
|
||
# echo "/dev/zvol/zfspool/var_lib_docker /var/lib/docker ext4 defaults 0 2" >> /etc/fstab
|
||
# systemctl daemon-reload
|
||
# mount /var/lib/docker
|
||
# chmod 710 /var/lib/docker
|
||
# systemctl enable docker ; systemctl start docker
|
||
```
|
||
|
||
Installer ZeroTier:
|
||
```
|
||
$ sudo bash
|
||
|
||
# curl -fsSL 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg' | gpg --import
|
||
(Importer ZeroTier's signeringsnøgle)
|
||
|
||
# gpg --fingerprint contact@zerotier.com
|
||
(Check nøglen)
|
||
|
||
#if z=$(curl -fsSL 'https://install.zerotier.com/' | gpg --decrypt); then
|
||
echo "$z" | sudo bash
|
||
else
|
||
echo "Signaturtjek mislykkedes – kører ikke scriptet." >&2
|
||
exit 1
|
||
fi
|
||
(Henter og dekryperer (verificerer) install-scriptet og kører det kun hvis signaturen er OK)
|
||
```
|
||
|
||
Konfigurer ZeroTier net:
|
||
- Login på 'https://my.zerotier.com'
|
||
- Opret et nye netværk 'Create A Network'
|
||
(Som skal forbinde terminaler og AssetAZHub)
|
||
- Klik på det nye netværk
|
||
- Basic/Name: 'assetaz-<ditid>'
|
||
(f.eks 'assetaz-mortengh')
|
||
- Vælg et IP range, f.eks 192.168.192.*
|
||
- Forbind AssetAZHub til netværket (netværks id'et kan ses på websiden):
|
||
- # zerotier-cli join a8bea75acfa45477
|
||
- Autoriser den nye maskine på nettet. Dette gøres ved at trykke på 'Edit' ved maskinen på websiden, som nu
|
||
burde kunne se den. Autoriser den, giv den et navn og evt. en beskrivelse.
|
||
- Tryk 'Add IP' og giv den en IP adresse inden for det range du har valgt oven over (f.eks 192.168.192.1). Tryk 'Save'
|
||
- Se at AssetAZHub' nu kan pinge sig selv:
|
||
# ping 192.168.192.1
|
||
|
||
Forbind terminal (f.eks en Android telefon)
|
||
- Installer ZeroTier-One
|
||
- Forbind til det samme net som hub'en.
|
||
- Autoriser terminalen inde på ZeroTiers web side og set terminalen ip adresse til noget kendt f.eks 192.168.192.2.
|
||
(Så kører hub'en på *.1 og terminalen på *.2)
|
||
|
||
Opsæt locale
|
||
|
||
Opret Docker baby swarm cluster
|
||
```
|
||
```
|