Files
com_r35157_nenjim-hubd-impl…/docs/Nenjim.md
T

12 KiB
Raw Blame History

#

Nenjim
Documentation

Indholdsfortegnelse:

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