X: Moved markdown files from Documentation to keep in sync
This commit is contained in:
+264
@@ -0,0 +1,264 @@
|
||||
#<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
|
||||
```
|
||||
```
|
||||
Reference in New Issue
Block a user