@underpostnet/cyberia 3.2.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +14 -0
- package/.env.example +144 -0
- package/.github/workflows/cyberia-client.cd.yml +40 -0
- package/.github/workflows/cyberia-server.cd.yml +40 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +70 -0
- package/.github/workflows/docker-image.cyberia-server.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +71 -0
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +53 -0
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +53 -0
- package/.github/workflows/engine-cyberia.cd.yml +157 -0
- package/.github/workflows/engine-cyberia.ci.yml +125 -0
- package/.github/workflows/ghpkg.ci.yml +160 -0
- package/.github/workflows/gitlab.ci.yml +20 -0
- package/.github/workflows/hardhat.ci.yml +82 -0
- package/.github/workflows/npmpkg.ci.yml +126 -0
- package/.github/workflows/publish.ci.yml +87 -0
- package/.github/workflows/publish.cyberia.ci.yml +79 -0
- package/.github/workflows/pwa-microservices-template-page.cd.yml +65 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
- package/.github/workflows/release.cd.yml +46 -0
- package/.nycrc +9 -0
- package/.prettierignore +12 -0
- package/.prettierrc +9 -0
- package/.vscode/extensions.json +10 -0
- package/.vscode/settings.json +26 -0
- package/CHANGELOG.md +2516 -0
- package/CLI-HELP.md +1099 -0
- package/Dockerfile +161 -0
- package/Dockerfile.dev +161 -0
- package/Dockerfile.test +165 -0
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/baremetal/commission-workflows.json +211 -0
- package/baremetal/packer-workflows.json +24 -0
- package/bin/build.js +261 -0
- package/bin/build.template.js +33 -0
- package/bin/cyberia.js +5627 -0
- package/bin/deploy.js +1547 -0
- package/bin/index.js +5627 -0
- package/bump.config.js +27 -0
- package/compose.env +144 -0
- package/conf.js +952 -0
- package/deployment.yaml +418 -0
- package/docker-compose.yml +434 -0
- package/examples/static-page/README.md +150 -0
- package/examples/static-page/ssr-components/CustomPage.js +554 -0
- package/examples/static-page/static-config-example.json +57 -0
- package/hardhat/.env.example +31 -0
- package/hardhat/contracts/ObjectLayerToken.sol +391 -0
- package/hardhat/deployments/.gitkeep +0 -0
- package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
- package/hardhat/hardhat.config.js +136 -0
- package/hardhat/ignition/modules/.gitkeep +0 -0
- package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
- package/hardhat/networks/besu-object-layer.network.json +138 -0
- package/hardhat/package-lock.json +2871 -0
- package/hardhat/package.json +43 -0
- package/hardhat/scripts/deployObjectLayerToken.js +98 -0
- package/hardhat/test/ObjectLayerToken.js +696 -0
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/ipfs/configure-ipfs.sh +13 -0
- package/jsconfig.json +9 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +48 -0
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +48 -0
- package/manifests/deployment/adminer/deployment.yaml +32 -0
- package/manifests/deployment/adminer/kustomization.yaml +7 -0
- package/manifests/deployment/adminer/service.yaml +13 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +418 -0
- package/manifests/deployment/dd-cyberia-development/grpc-service.yaml +17 -0
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +189 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +164 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +163 -0
- package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
- package/manifests/deployment/fastapi/backend-deployment.yml +120 -0
- package/manifests/deployment/fastapi/backend-service.yml +19 -0
- package/manifests/deployment/fastapi/frontend-deployment.yml +54 -0
- package/manifests/deployment/fastapi/frontend-service.yml +15 -0
- package/manifests/deployment/fastapi/initial_data.sh +8 -0
- package/manifests/deployment/kafka/deployment.yaml +67 -0
- package/manifests/deployment/mongo-express/deployment.yaml +62 -0
- package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
- package/manifests/deployment/playwright/deployment.yaml +52 -0
- package/manifests/deployment/spark/spark-pi-py.yaml +20 -0
- package/manifests/deployment/tensorflow/tf-gpu-test.yaml +63 -0
- package/manifests/envoy-service-nodeport.yaml +22 -0
- package/manifests/grafana/deployment.yaml +64 -0
- package/manifests/grafana/kustomization.yaml +7 -0
- package/manifests/grafana/pvc.yaml +12 -0
- package/manifests/grafana/service.yaml +14 -0
- package/manifests/grafana/storage-class.yaml +9 -0
- package/manifests/ipfs/configmap.yaml +64 -0
- package/manifests/ipfs/headless-service.yaml +35 -0
- package/manifests/ipfs/kustomization.yaml +8 -0
- package/manifests/ipfs/statefulset.yaml +149 -0
- package/manifests/ipfs/storage-class.yaml +9 -0
- package/manifests/kind-config-dev.yaml +20 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/kubeadm-calico-config.yaml +14 -0
- package/manifests/letsencrypt-prod.yaml +14 -0
- package/manifests/lxd/lxd-admin-profile.yaml +26 -0
- package/manifests/lxd/lxd-preseed.yaml +30 -0
- package/manifests/mariadb/kustomization.yaml +9 -0
- package/manifests/mariadb/pv.yaml +12 -0
- package/manifests/mariadb/pvc.yaml +10 -0
- package/manifests/mariadb/service.yaml +10 -0
- package/manifests/mariadb/statefulset.yaml +56 -0
- package/manifests/mariadb/storage-class.yaml +10 -0
- package/manifests/mongodb/headless-service.yaml +10 -0
- package/manifests/mongodb/kustomization.yaml +11 -0
- package/manifests/mongodb/pv-pvc.yaml +59 -0
- package/manifests/mongodb/statefulset.yaml +113 -0
- package/manifests/mongodb/storage-class.yaml +9 -0
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +9 -0
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +19 -0
- package/manifests/mongodb-4.4/service-deployment.yaml +61 -0
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/mysql/kustomization.yaml +7 -0
- package/manifests/mysql/pv-pvc.yaml +27 -0
- package/manifests/mysql/statefulset.yaml +55 -0
- package/manifests/postgresql/configmap.yaml +9 -0
- package/manifests/postgresql/kustomization.yaml +10 -0
- package/manifests/postgresql/pv.yaml +15 -0
- package/manifests/postgresql/pvc.yaml +13 -0
- package/manifests/postgresql/service.yaml +10 -0
- package/manifests/postgresql/statefulset.yaml +37 -0
- package/manifests/prometheus/deployment.yaml +82 -0
- package/manifests/pv-pvc-dd.yaml +34 -0
- package/manifests/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/service.yaml +10 -0
- package/manifests/valkey/statefulset.yaml +37 -0
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/mongodb/entrypoint.sh +76 -0
- package/nginx.conf +128 -0
- package/nodemon.json +6 -0
- package/package.json +101 -0
- package/packer/images/Rocky9Amd64/Makefile +62 -0
- package/packer/images/Rocky9Amd64/QUICKSTART.md +113 -0
- package/packer/images/Rocky9Amd64/README.md +122 -0
- package/packer/images/Rocky9Amd64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Amd64/rocky9.pkr.hcl +164 -0
- package/packer/images/Rocky9Arm64/Makefile +69 -0
- package/packer/images/Rocky9Arm64/README.md +122 -0
- package/packer/images/Rocky9Arm64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Arm64/rocky9.pkr.hcl +171 -0
- package/packer/scripts/fuse-nbd +64 -0
- package/packer/scripts/fuse-tar-root +63 -0
- package/proxy.yaml +189 -0
- package/pv-pvc.yaml +164 -0
- package/scripts/device-scan.sh +65 -0
- package/scripts/disk-clean.sh +182 -0
- package/scripts/disk-devices.sh +13 -0
- package/scripts/gen-fqdns.sh +14 -0
- package/scripts/gpu-diag.sh +19 -0
- package/scripts/ip-info.sh +118 -0
- package/scripts/ipxe-setup.sh +200 -0
- package/scripts/k3s-node-setup.sh +124 -0
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/link-local-underpost-cli.sh +6 -0
- package/scripts/lxd-vm-setup.sh +208 -0
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/maas-setup.sh +135 -0
- package/scripts/maas-upload-boot-resource.sh +183 -0
- package/scripts/nat-iptables.sh +111 -0
- package/scripts/nvim.sh +91 -0
- package/scripts/packer-init-vars-file.sh +40 -0
- package/scripts/packer-setup.sh +289 -0
- package/scripts/ports-ls.sh +33 -0
- package/scripts/quick-tftp.sh +19 -0
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/scripts/rocky-kickstart.sh +986 -0
- package/scripts/rocky-pwa.sh +200 -0
- package/scripts/rocky-setup.sh +106 -0
- package/scripts/rpmfusion-ffmpeg-setup.sh +32 -0
- package/scripts/ssl.sh +170 -0
- package/scripts/test-monitor.sh +248 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +30 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +155 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +39 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +382 -0
- package/src/api/core/core.controller.js +8 -0
- package/src/api/core/core.model.js +11 -0
- package/src/api/core/core.router.js +23 -0
- package/src/api/core/core.service.js +30 -0
- package/src/api/crypto/crypto.controller.js +10 -0
- package/src/api/crypto/crypto.model.js +23 -0
- package/src/api/crypto/crypto.router.js +23 -0
- package/src/api/crypto/crypto.service.js +64 -0
- package/src/api/cyberia-action/cyberia-action.controller.js +8 -0
- package/src/api/cyberia-action/cyberia-action.model.js +79 -0
- package/src/api/cyberia-action/cyberia-action.router.js +21 -0
- package/src/api/cyberia-action/cyberia-action.service.js +58 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +27 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +100 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +70 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +8 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +20 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +57 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +6 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +25 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +17 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +6 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +67 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +46 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +337 -0
- package/src/api/cyberia-instance/cyberia-instance-boot.service.js +57 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +583 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +42 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +117 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +75 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +190 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +260 -0
- package/src/api/cyberia-instance/cyberia-world-generator.js +618 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +6 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +200 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +17 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +46 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +6 -0
- package/src/api/cyberia-map/cyberia-map.model.js +33 -0
- package/src/api/cyberia-map/cyberia-map.router.js +19 -0
- package/src/api/cyberia-map/cyberia-map.service.js +76 -0
- package/src/api/cyberia-quest/cyberia-quest.controller.js +9 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +26 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +97 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +6 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +21 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-saga/cyberia-saga.controller.js +6 -0
- package/src/api/cyberia-saga/cyberia-saga.model.js +59 -0
- package/src/api/cyberia-saga/cyberia-saga.router.js +17 -0
- package/src/api/cyberia-saga/cyberia-saga.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +1076 -0
- package/src/api/cyberia-skill/cyberia-skill.controller.js +6 -0
- package/src/api/cyberia-skill/cyberia-skill.model.js +50 -0
- package/src/api/cyberia-skill/cyberia-skill.router.js +17 -0
- package/src/api/cyberia-skill/cyberia-skill.service.js +42 -0
- package/src/api/default/default.controller.js +6 -0
- package/src/api/default/default.model.js +20 -0
- package/src/api/default/default.router.js +21 -0
- package/src/api/default/default.service.js +42 -0
- package/src/api/document/document.controller.js +9 -0
- package/src/api/document/document.model.js +95 -0
- package/src/api/document/document.router.js +32 -0
- package/src/api/document/document.service.js +633 -0
- package/src/api/file/file.controller.js +15 -0
- package/src/api/file/file.model.js +127 -0
- package/src/api/file/file.ref.json +39 -0
- package/src/api/file/file.router.js +36 -0
- package/src/api/file/file.service.js +499 -0
- package/src/api/instance/instance.controller.js +8 -0
- package/src/api/instance/instance.model.js +34 -0
- package/src/api/instance/instance.router.js +27 -0
- package/src/api/instance/instance.service.js +75 -0
- package/src/api/ipfs/ipfs.controller.js +8 -0
- package/src/api/ipfs/ipfs.model.js +77 -0
- package/src/api/ipfs/ipfs.router.js +26 -0
- package/src/api/ipfs/ipfs.service.js +145 -0
- package/src/api/object-layer/object-layer.controller.js +18 -0
- package/src/api/object-layer/object-layer.model.js +200 -0
- package/src/api/object-layer/object-layer.router.js +729 -0
- package/src/api/object-layer/object-layer.service.js +894 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +6 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +93 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +17 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +46 -0
- package/src/api/test/test.controller.js +14 -0
- package/src/api/test/test.model.js +14 -0
- package/src/api/test/test.router.js +23 -0
- package/src/api/test/test.service.js +35 -0
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/postman_collection.json +216 -0
- package/src/api/user/user.build.js +16 -0
- package/src/api/user/user.controller.js +35 -0
- package/src/api/user/user.model.js +142 -0
- package/src/api/user/user.router.js +367 -0
- package/src/api/user/user.service.js +582 -0
- package/src/api.js +23 -0
- package/src/cli/baremetal.js +3947 -0
- package/src/cli/cloud-init.js +673 -0
- package/src/cli/cluster.js +1395 -0
- package/src/cli/db.js +1533 -0
- package/src/cli/deploy.js +1542 -0
- package/src/cli/docker-compose.js +802 -0
- package/src/cli/env.js +177 -0
- package/src/cli/fs.js +380 -0
- package/src/cli/image.js +389 -0
- package/src/cli/index.js +1059 -0
- package/src/cli/ipfs.js +182 -0
- package/src/cli/kickstart.js +271 -0
- package/src/cli/kubectl.js +214 -0
- package/src/cli/lxd.js +1232 -0
- package/src/cli/monitor.js +659 -0
- package/src/cli/release.js +595 -0
- package/src/cli/repository.js +1969 -0
- package/src/cli/run.js +3326 -0
- package/src/cli/secrets.js +151 -0
- package/src/cli/ssh.js +975 -0
- package/src/cli/static.js +653 -0
- package/src/cli/system.js +332 -0
- package/src/cli/test.js +176 -0
- package/src/client/Cryptokoyn.index.js +30 -0
- package/src/client/CyberiaPortal.index.js +31 -0
- package/src/client/Default.index.js +77 -0
- package/src/client/Itemledger.index.js +35 -0
- package/src/client/Underpost.index.js +31 -0
- package/src/client/components/core/404.js +20 -0
- package/src/client/components/core/500.js +20 -0
- package/src/client/components/core/Account.js +630 -0
- package/src/client/components/core/AgGrid.js +238 -0
- package/src/client/components/core/Alert.js +76 -0
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/Auth.js +353 -0
- package/src/client/components/core/Badge.js +26 -0
- package/src/client/components/core/Blockchain.js +41 -0
- package/src/client/components/core/Blog.js +9 -0
- package/src/client/components/core/BtnIcon.js +109 -0
- package/src/client/components/core/CalendarCore.js +437 -0
- package/src/client/components/core/Chat.js +62 -0
- package/src/client/components/core/ClientEvents.js +163 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/CommonJs.js +1014 -0
- package/src/client/components/core/Content.js +349 -0
- package/src/client/components/core/Css.js +1134 -0
- package/src/client/components/core/CssCore.js +881 -0
- package/src/client/components/core/D3Chart.js +44 -0
- package/src/client/components/core/Docs.js +478 -0
- package/src/client/components/core/DropDown.js +321 -0
- package/src/client/components/core/EventBus.js +96 -0
- package/src/client/components/core/EventsUI.js +130 -0
- package/src/client/components/core/FileExplorer.js +1406 -0
- package/src/client/components/core/FullScreen.js +201 -0
- package/src/client/components/core/Input.js +537 -0
- package/src/client/components/core/Keyboard.js +80 -0
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +152 -0
- package/src/client/components/core/LogIn.js +212 -0
- package/src/client/components/core/LogOut.js +72 -0
- package/src/client/components/core/Logger.js +22 -0
- package/src/client/components/core/Modal.js +2956 -0
- package/src/client/components/core/NotificationManager.js +80 -0
- package/src/client/components/core/Pagination.js +252 -0
- package/src/client/components/core/Panel.js +1308 -0
- package/src/client/components/core/PanelForm.js +915 -0
- package/src/client/components/core/Polyhedron.js +947 -0
- package/src/client/components/core/PublicProfile.js +895 -0
- package/src/client/components/core/Recover.js +211 -0
- package/src/client/components/core/Responsive.js +146 -0
- package/src/client/components/core/RichText.js +33 -0
- package/src/client/components/core/Router.js +523 -0
- package/src/client/components/core/Scroll.js +76 -0
- package/src/client/components/core/SearchBox.js +1007 -0
- package/src/client/components/core/SignUp.js +153 -0
- package/src/client/components/core/SocketIo.js +163 -0
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +161 -0
- package/src/client/components/core/ToggleSwitch.js +89 -0
- package/src/client/components/core/ToolTip.js +78 -0
- package/src/client/components/core/Translate.js +694 -0
- package/src/client/components/core/Validator.js +140 -0
- package/src/client/components/core/VanillaJs.js +485 -0
- package/src/client/components/core/Wallet.js +95 -0
- package/src/client/components/core/WebComponent.js +44 -0
- package/src/client/components/core/Webhook.js +58 -0
- package/src/client/components/core/Worker.js +313 -0
- package/src/client/components/core/windowGetDimensions.js +269 -0
- package/src/client/components/cryptokoyn/AppShellCryptokoyn.js +352 -0
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +212 -0
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +12 -0
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +11 -0
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +6 -0
- package/src/client/components/cyberia/ActionEngineCyberia.js +1867 -0
- package/src/client/components/cyberia/EntityEngineCyberia.js +585 -0
- package/src/client/components/cyberia/InstanceEngineCyberia.js +1088 -0
- package/src/client/components/cyberia/InstanceSelectionView.js +900 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1976 -0
- package/src/client/components/cyberia/ObjectLayerEngine.js +1540 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +2420 -0
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +1522 -0
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +528 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +772 -0
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +254 -0
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +21 -0
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +518 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +72 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +13 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +6 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +48 -0
- package/src/client/components/default/AppShellDefault.js +765 -0
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/CommonDefault.js +29 -0
- package/src/client/components/default/CssDefault.js +27 -0
- package/src/client/components/default/LogInDefault.js +16 -0
- package/src/client/components/default/LogOutDefault.js +12 -0
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +16 -0
- package/src/client/components/default/SignUpDefault.js +11 -0
- package/src/client/components/default/SocketIoDefault.js +6 -0
- package/src/client/components/default/TranslateDefault.js +7 -0
- package/src/client/components/itemledger/AppShellItemledger.js +353 -0
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/CssItemledger.js +212 -0
- package/src/client/components/itemledger/LogInItemledger.js +17 -0
- package/src/client/components/itemledger/LogOutItemledger.js +12 -0
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +16 -0
- package/src/client/components/itemledger/SignUpItemledger.js +11 -0
- package/src/client/components/itemledger/SocketIoItemledger.js +6 -0
- package/src/client/components/itemledger/TranslateItemledger.js +7 -0
- package/src/client/components/underpost/AppShellUnderpost.js +691 -0
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/CssUnderpost.js +281 -0
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
- package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
- package/src/client/components/underpost/LabGalleryUnderpost.js +79 -0
- package/src/client/components/underpost/LogInUnderpost.js +25 -0
- package/src/client/components/underpost/LogOutUnderpost.js +17 -0
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +16 -0
- package/src/client/components/underpost/SignUpUnderpost.js +11 -0
- package/src/client/components/underpost/SocketIoUnderpost.js +6 -0
- package/src/client/components/underpost/TranslateUnderpost.js +10 -0
- package/src/client/public/cryptokoyn/assets/banner/koyn-social.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/cryptokoyn.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-192x192.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-256x256.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-36x36.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-48x48.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-96x96.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-16x16.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-32x32.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-150x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x310.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-70x70.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/safari-pinned-tab.svg +42 -0
- package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
- package/src/client/public/cryptokoyn/favicon.ico +0 -0
- package/src/client/public/cryptokoyn/microdata.json +85 -0
- package/src/client/public/cryptokoyn/site.webmanifest +57 -0
- package/src/client/public/cryptokoyn/sitemap +148 -0
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +307 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +309 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +341 -0
- package/src/client/public/cyberia-docs/CYBERIA-LORE.md +84 -0
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +394 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +294 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +242 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +309 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +228 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +740 -0
- package/src/client/public/default/android-chrome-144x144.png +0 -0
- package/src/client/public/default/android-chrome-192x192.png +0 -0
- package/src/client/public/default/android-chrome-256x256.png +0 -0
- package/src/client/public/default/android-chrome-36x36.png +0 -0
- package/src/client/public/default/android-chrome-384x384.png +0 -0
- package/src/client/public/default/android-chrome-48x48.png +0 -0
- package/src/client/public/default/android-chrome-512x512.png +0 -0
- package/src/client/public/default/android-chrome-72x72.png +0 -0
- package/src/client/public/default/android-chrome-96x96.png +0 -0
- package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/default/assets/background/dark.jpg +0 -0
- package/src/client/public/default/assets/background/dark.svg +557 -0
- package/src/client/public/default/assets/background/white.jpg +0 -0
- package/src/client/public/default/assets/background/white0-min.jpg +0 -0
- package/src/client/public/default/assets/background/white0.jpg +0 -0
- package/src/client/public/default/assets/logo/base-icon.png +0 -0
- package/src/client/public/default/assets/logo/underpost.gif +0 -0
- package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
- package/src/client/public/default/browserconfig.xml +12 -0
- package/src/client/public/default/favicon-16x16.png +0 -0
- package/src/client/public/default/favicon-32x32.png +0 -0
- package/src/client/public/default/favicon-48x48.png +0 -0
- package/src/client/public/default/favicon.ico +0 -0
- package/src/client/public/default/manifest.webmanifest +69 -0
- package/src/client/public/default/mstile-144x144.png +0 -0
- package/src/client/public/default/mstile-150x150.png +0 -0
- package/src/client/public/default/mstile-310x150.png +0 -0
- package/src/client/public/default/mstile-310x310.png +0 -0
- package/src/client/public/default/mstile-70x70.png +0 -0
- package/src/client/public/default/safari-pinned-tab.svg +24 -0
- package/src/client/public/default/site.webmanifest +69 -0
- package/src/client/public/default/sitemap +148 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +9 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +148 -0
- package/src/client/public/itemledger/android-chrome-144x144.png +0 -0
- package/src/client/public/itemledger/android-chrome-192x192.png +0 -0
- package/src/client/public/itemledger/android-chrome-256x256.png +0 -0
- package/src/client/public/itemledger/android-chrome-36x36.png +0 -0
- package/src/client/public/itemledger/android-chrome-384x384.png +0 -0
- package/src/client/public/itemledger/android-chrome-48x48.png +0 -0
- package/src/client/public/itemledger/android-chrome-512x512.png +0 -0
- package/src/client/public/itemledger/android-chrome-72x72.png +0 -0
- package/src/client/public/itemledger/android-chrome-96x96.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/itemledger/assets/logo/base-icon.png +0 -0
- package/src/client/public/itemledger/browserconfig.xml +12 -0
- package/src/client/public/itemledger/favicon-16x16.png +0 -0
- package/src/client/public/itemledger/favicon-32x32.png +0 -0
- package/src/client/public/itemledger/favicon-48x48.png +0 -0
- package/src/client/public/itemledger/favicon.ico +0 -0
- package/src/client/public/itemledger/manifest.webmanifest +69 -0
- package/src/client/public/itemledger/microdata.json +71 -0
- package/src/client/public/itemledger/mstile-144x144.png +0 -0
- package/src/client/public/itemledger/mstile-150x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x310.png +0 -0
- package/src/client/public/itemledger/mstile-70x70.png +0 -0
- package/src/client/public/itemledger/sitemap +148 -0
- package/src/client/public/itemledger/yandex-browser-50x50.png +0 -0
- package/src/client/public/itemledger/yandex-browser-manifest.json +9 -0
- package/src/client/public/test/favicon.ico +0 -0
- package/src/client/public/test/sitemap +148 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +137 -0
- package/src/client/services/core/core.service.js +309 -0
- package/src/client/services/crypto/crypto.service.js +68 -0
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +99 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +99 -0
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +99 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +137 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +99 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +120 -0
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/cyberia-saga/cyberia-saga.service.js +99 -0
- package/src/client/services/cyberia-skill/cyberia-skill.service.js +99 -0
- package/src/client/services/default/default.management.js +1015 -0
- package/src/client/services/default/default.service.js +99 -0
- package/src/client/services/document/document.service.js +134 -0
- package/src/client/services/file/file.service.js +94 -0
- package/src/client/services/instance/instance.management.js +78 -0
- package/src/client/services/instance/instance.service.js +107 -0
- package/src/client/services/ipfs/ipfs.service.js +118 -0
- package/src/client/services/object-layer/object-layer.management.js +414 -0
- package/src/client/services/object-layer/object-layer.service.js +208 -0
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +99 -0
- package/src/client/services/test/test.service.js +68 -0
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +51 -0
- package/src/client/services/user/user.service.js +106 -0
- package/src/client/ssr/RootDocument.js +237 -0
- package/src/client/ssr/body/404.js +77 -0
- package/src/client/ssr/body/500.js +76 -0
- package/src/client/ssr/body/CacheControl.js +117 -0
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/DefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +90 -0
- package/src/client/ssr/head/CryptokoynScripts.js +4 -0
- package/src/client/ssr/head/Css.js +241 -0
- package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
- package/src/client/ssr/head/DefaultScripts.js +6 -0
- package/src/client/ssr/head/ItemledgerScripts.js +4 -0
- package/src/client/ssr/head/Microdata.js +11 -0
- package/src/client/ssr/head/Production.js +1 -0
- package/src/client/ssr/head/Pwa.js +146 -0
- package/src/client/ssr/head/PwaItemledger.js +197 -0
- package/src/client/ssr/head/Seo.js +15 -0
- package/src/client/ssr/head/UnderpostScripts.js +6 -0
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +20 -0
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +16 -0
- package/src/client/ssr/views/Cyberia404.js +328 -0
- package/src/client/ssr/views/CyberiaServerMetrics.js +1070 -0
- package/src/client/ssr/views/Maintenance.js +64 -0
- package/src/client/ssr/views/NoNetworkConnection.js +68 -0
- package/src/client/ssr/views/Test.js +199 -0
- package/src/client/sw/core.sw.js +274 -0
- package/src/client-builder/client-build-docs.js +493 -0
- package/src/client-builder/client-build-live.js +100 -0
- package/src/client-builder/client-build.js +1092 -0
- package/src/client-builder/client-dev-server.js +88 -0
- package/src/client-builder/client-formatted.js +170 -0
- package/src/client-builder/client-icons.js +108 -0
- package/src/client-builder/ssr.js +124 -0
- package/src/client.build.js +17 -0
- package/src/client.dev.js +21 -0
- package/src/db/DataBaseProvider.js +213 -0
- package/src/db/mariadb/MariaDB.js +72 -0
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +199 -0
- package/src/grpc/cyberia/grpc-server.js +162 -0
- package/src/index.js +357 -0
- package/src/mailer/EmailRender.js +116 -0
- package/src/mailer/MailerProvider.js +213 -0
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +413 -0
- package/src/projects/cyberia/besu-genesis-generator.js +1630 -0
- package/src/projects/cyberia/catalog-cyberia.js +90 -0
- package/src/projects/cyberia/gemini-client.js +175 -0
- package/src/projects/cyberia/generate-saga.js +2137 -0
- package/src/projects/cyberia/hot-reload-trigger.js +163 -0
- package/src/projects/cyberia/instance-data.js +719 -0
- package/src/projects/cyberia/ipfs-client.js +599 -0
- package/src/projects/cyberia/map-preview-generator.js +304 -0
- package/src/projects/cyberia/object-layer.js +978 -0
- package/src/projects/cyberia/semantic-layer-generator-floor.js +319 -0
- package/src/projects/cyberia/semantic-layer-generator-resource.js +259 -0
- package/src/projects/cyberia/semantic-layer-generator-skin.js +1164 -0
- package/src/projects/cyberia/semantic-layer-generator.js +753 -0
- package/src/projects/cyberia/shape-generator.js +1060 -0
- package/src/projects/underpost/catalog-underpost.js +60 -0
- package/src/proxy.js +19 -0
- package/src/runtime/cyberia-client/Dockerfile +49 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +75 -0
- package/src/runtime/cyberia-server/Dockerfile +43 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +56 -0
- package/src/runtime/engine-cyberia/Dockerfile +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.dev +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.test +165 -0
- package/src/runtime/engine-cyberia/compose.env +144 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +434 -0
- package/src/runtime/engine-cyberia/ipfs/configure-ipfs.sh +13 -0
- package/src/runtime/engine-cyberia/mongodb/entrypoint.sh +76 -0
- package/src/runtime/engine-cyberia/nginx.conf +128 -0
- package/src/runtime/express/Dockerfile +45 -0
- package/src/runtime/express/Express.js +285 -0
- package/src/runtime/lampp/Dockerfile +62 -0
- package/src/runtime/lampp/Lampp.js +359 -0
- package/src/runtime/nginx/Nginx.js +250 -0
- package/src/runtime/wp/Dockerfile +62 -0
- package/src/runtime/wp/Wp.js +642 -0
- package/src/server/auth.js +713 -0
- package/src/server/backup.js +102 -0
- package/src/server/catalog.js +72 -0
- package/src/server/conf.js +2316 -0
- package/src/server/cron.js +476 -0
- package/src/server/crypto.js +210 -0
- package/src/server/data-query.js +461 -0
- package/src/server/dns.js +553 -0
- package/src/server/downloader.js +73 -0
- package/src/server/logger.js +229 -0
- package/src/server/middlewares.js +152 -0
- package/src/server/peer.js +75 -0
- package/src/server/process.js +299 -0
- package/src/server/proxy.js +139 -0
- package/src/server/runtime-status.js +252 -0
- package/src/server/runtime.js +183 -0
- package/src/server/start.js +272 -0
- package/src/server/tls.js +254 -0
- package/src/server/valkey.js +201 -0
- package/src/server.js +25 -0
- package/src/ws/IoInterface.js +129 -0
- package/src/ws/IoServer.js +68 -0
- package/src/ws/core/channels/core.ws.chat.js +68 -0
- package/src/ws/core/channels/core.ws.mailer.js +116 -0
- package/src/ws/core/channels/core.ws.stream.js +90 -0
- package/src/ws/core/core.ws.connection.js +41 -0
- package/src/ws/core/core.ws.emit.js +37 -0
- package/src/ws/core/core.ws.server.js +44 -0
- package/src/ws/default/channels/default.ws.main.js +57 -0
- package/src/ws/default/default.ws.connection.js +35 -0
- package/src/ws/default/default.ws.emit.js +14 -0
- package/src/ws/default/default.ws.server.js +39 -0
- package/test/api.test.js +53 -0
- package/test/crypto.test.js +117 -0
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +267 -0
- package/test/shape-generator.test.js +463 -0
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +31 -0
- package/typedoc.json +31 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# ---------------------------------------------------------------------------
|
|
5
|
+
# Underpost Kubeadm Node Setup (bare-metal physical node)
|
|
6
|
+
#
|
|
7
|
+
# Mirrors scripts/k3s-node-setup.sh but for kubeadm on real hardware: it runs on
|
|
8
|
+
# the freshly deployed OS (disk-installed Rocky) after first boot, installs NVM +
|
|
9
|
+
# Node.js, ensures the engine source is present, and drives the cluster bring-up
|
|
10
|
+
# through the local engine entrypoint `node bin cluster` (src/cli/cluster.js) —
|
|
11
|
+
# reusing its kubeadm + Contour + host-init logic instead of reimplementing it.
|
|
12
|
+
#
|
|
13
|
+
# Modes:
|
|
14
|
+
# --control Initialize a new kubeadm control-plane (default).
|
|
15
|
+
# --worker Join an existing cluster.
|
|
16
|
+
#
|
|
17
|
+
# Worker join (controller supplies this over SSH; no manual token paste):
|
|
18
|
+
# --join-command="kubeadm join <ip>:6443 --token <t> --discovery-token-ca-cert-hash <h>"
|
|
19
|
+
# or: --control-ip=<ip> --token=<t> --discovery-token-ca-cert-hash=<h>
|
|
20
|
+
#
|
|
21
|
+
# Engine source / options:
|
|
22
|
+
# --engine-root=<path> Engine source path (default /home/dd/engine).
|
|
23
|
+
# --engine-repo=<url> Git repo cloned if the engine source is missing.
|
|
24
|
+
# --engine-branch=<branch> Branch to clone (default: repo default).
|
|
25
|
+
# --no-contour Control mode: skip the Contour ingress install.
|
|
26
|
+
# ---------------------------------------------------------------------------
|
|
27
|
+
|
|
28
|
+
ROLE="control"
|
|
29
|
+
JOIN_COMMAND=""
|
|
30
|
+
CONTROL_IP=""
|
|
31
|
+
CONTROL_ENDPOINT_HOST=""
|
|
32
|
+
TOKEN=""
|
|
33
|
+
CA_CERT_HASH=""
|
|
34
|
+
JOIN_ONLY="0"
|
|
35
|
+
INSTALL_CONTOUR="1"
|
|
36
|
+
ENGINE_ROOT="/home/dd/engine"
|
|
37
|
+
ENGINE_REPO="https://github.com/underpostnet/engine.git"
|
|
38
|
+
ENGINE_BRANCH=""
|
|
39
|
+
# Private repo holding secrets (engine-private/conf/.../.env.production) cloned
|
|
40
|
+
# with a GitHub token. GITHUB_TOKEN/GITHUB_USERNAME come from the environment
|
|
41
|
+
# (passed over SSH by the controller) or the --github-* args.
|
|
42
|
+
ENGINE_PRIVATE_REPO="https://github.com/underpostnet/engine-private.git"
|
|
43
|
+
ENGINE_PRIVATE_BRANCH=""
|
|
44
|
+
GITHUB_TOKEN="${GITHUB_TOKEN:-}"
|
|
45
|
+
GITHUB_USERNAME="${GITHUB_USERNAME:-}"
|
|
46
|
+
CRI_SOCKET="unix:///var/run/crio/crio.sock"
|
|
47
|
+
|
|
48
|
+
for arg in "$@"; do
|
|
49
|
+
case $arg in
|
|
50
|
+
--control) ROLE="control" ;;
|
|
51
|
+
--worker) ROLE="worker" ;;
|
|
52
|
+
--join-command=*) JOIN_COMMAND="${arg#*=}" ;;
|
|
53
|
+
--control-ip=*) CONTROL_IP="${arg#*=}" ;;
|
|
54
|
+
--control-endpoint-host=*) CONTROL_ENDPOINT_HOST="${arg#*=}" ;;
|
|
55
|
+
--token=*) TOKEN="${arg#*=}" ;;
|
|
56
|
+
--discovery-token-ca-cert-hash=*) CA_CERT_HASH="${arg#*=}" ;;
|
|
57
|
+
--join-only) JOIN_ONLY="1" ;;
|
|
58
|
+
--engine-root=*) ENGINE_ROOT="${arg#*=}" ;;
|
|
59
|
+
--engine-repo=*) ENGINE_REPO="${arg#*=}" ;;
|
|
60
|
+
--engine-branch=*) ENGINE_BRANCH="${arg#*=}" ;;
|
|
61
|
+
--engine-private-repo=*) ENGINE_PRIVATE_REPO="${arg#*=}" ;;
|
|
62
|
+
--engine-private-branch=*) ENGINE_PRIVATE_BRANCH="${arg#*=}" ;;
|
|
63
|
+
--github-token=*) GITHUB_TOKEN="${arg#*=}" ;;
|
|
64
|
+
--github-username=*) GITHUB_USERNAME="${arg#*=}" ;;
|
|
65
|
+
--no-contour) INSTALL_CONTOUR="0" ;;
|
|
66
|
+
esac
|
|
67
|
+
done
|
|
68
|
+
|
|
69
|
+
log() { echo "$(date): [kubeadm-setup] $*"; }
|
|
70
|
+
|
|
71
|
+
# worker_join: lightweight, idempotent kubeadm join. Centralizes the join logic
|
|
72
|
+
# used by both the full worker flow and the --join-only short-circuit. Returns
|
|
73
|
+
# non-zero on failure so `set -e` aborts the script (no false-positive success).
|
|
74
|
+
worker_join() {
|
|
75
|
+
if [ -z "$JOIN_COMMAND" ]; then
|
|
76
|
+
if [ -n "$CONTROL_IP" ] && [ -n "$TOKEN" ] && [ -n "$CA_CERT_HASH" ]; then
|
|
77
|
+
JOIN_COMMAND="kubeadm join ${CONTROL_IP}:6443 --token ${TOKEN} --discovery-token-ca-cert-hash ${CA_CERT_HASH}"
|
|
78
|
+
else
|
|
79
|
+
echo "ERROR: worker mode needs --join-command=... OR --control-ip/--token/--discovery-token-ca-cert-hash" >&2
|
|
80
|
+
return 1
|
|
81
|
+
fi
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
command -v kubeadm >/dev/null 2>&1 || {
|
|
85
|
+
echo "ERROR: kubeadm not found on node. Run a full (non --join-only) setup first." >&2
|
|
86
|
+
return 1
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
# Make the control-plane endpoint hostname resolve to the control IP. kubeadm
|
|
90
|
+
# reads the cluster-info / kubeadm-config ConfigMaps whose server URL is the
|
|
91
|
+
# control-plane endpoint (often 'localhost.localdomain:6443'); without this the
|
|
92
|
+
# worker dials [::1]:6443 and fails with "connection refused".
|
|
93
|
+
if [ -n "$CONTROL_ENDPOINT_HOST" ] && [ -n "$CONTROL_IP" ] && [ "$CONTROL_ENDPOINT_HOST" != "$CONTROL_IP" ]; then
|
|
94
|
+
log "Mapping control-plane endpoint '$CONTROL_ENDPOINT_HOST' -> $CONTROL_IP in /etc/hosts"
|
|
95
|
+
ESC_HOST="$(printf '%s' "$CONTROL_ENDPOINT_HOST" | sed 's/[.]/\\./g')"
|
|
96
|
+
# Strip the endpoint host from any existing (loopback) line so it no longer
|
|
97
|
+
# resolves to 127.0.0.1, then point it at the real control-plane IP.
|
|
98
|
+
sudo sed -i -E "s/[[:space:]]+${ESC_HOST}([[:space:]]|\$)/\1/g" /etc/hosts || true
|
|
99
|
+
if ! grep -qE "^${CONTROL_IP}[[:space:]].*${ESC_HOST}([[:space:]]|\$)" /etc/hosts; then
|
|
100
|
+
echo "${CONTROL_IP} ${CONTROL_ENDPOINT_HOST}" | sudo tee -a /etc/hosts >/dev/null
|
|
101
|
+
fi
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
# Kernel/sysctl prereqs the kubeadm preflight needs (no engine/node required).
|
|
105
|
+
sudo swapoff -a || true
|
|
106
|
+
sudo sed -i '/swap/d' /etc/fstab || true
|
|
107
|
+
sudo modprobe br_netfilter || true
|
|
108
|
+
printf 'net.bridge.bridge-nf-call-iptables = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.ipv4.ip_forward = 1\n' \
|
|
109
|
+
| sudo tee /etc/sysctl.d/99-kubernetes.conf >/dev/null
|
|
110
|
+
sudo sysctl --system >/dev/null 2>&1 || true
|
|
111
|
+
|
|
112
|
+
# Replace --discovery-token-ca-cert-hash with --discovery-token-unsafe-skip-ca-verification
|
|
113
|
+
# so token discovery does not depend on the pinned CA hash.
|
|
114
|
+
UNSAFE_JOIN="$(echo "${JOIN_COMMAND}" | sed 's/--discovery-token-ca-cert-hash [^ ]*/--discovery-token-unsafe-skip-ca-verification/')"
|
|
115
|
+
|
|
116
|
+
_do_join() {
|
|
117
|
+
# Reset any stale state from a previous failed join so kubeadm does not
|
|
118
|
+
# reuse cached config that points at an unreachable endpoint.
|
|
119
|
+
sudo kubeadm reset -f --cri-socket="${CRI_SOCKET}" >/dev/null 2>&1 || true
|
|
120
|
+
sudo rm -rf /etc/kubernetes/* /var/lib/kubelet/pki 2>/dev/null || true
|
|
121
|
+
log "Joining cluster: ${UNSAFE_JOIN%% --token*} ..."
|
|
122
|
+
sudo ${UNSAFE_JOIN} --cri-socket="${CRI_SOCKET}"
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if _do_join; then
|
|
126
|
+
log "Worker joined the cluster."
|
|
127
|
+
return 0
|
|
128
|
+
fi
|
|
129
|
+
log "WARNING: kubeadm join attempt failed; resetting and retrying once..."
|
|
130
|
+
if _do_join; then
|
|
131
|
+
log "Worker joined the cluster."
|
|
132
|
+
return 0
|
|
133
|
+
fi
|
|
134
|
+
log "FATAL: kubeadm join failed after retry"
|
|
135
|
+
return 1
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
# --join-only: skip all prerequisite/engine/host setup and go straight to the
|
|
139
|
+
# join (used by `baremetal --resume-join` on an already-provisioned node).
|
|
140
|
+
if [ "$JOIN_ONLY" = "1" ]; then
|
|
141
|
+
[ "$ROLE" = "worker" ] || { echo "ERROR: --join-only is only valid with --worker" >&2; exit 1; }
|
|
142
|
+
log "--join-only: skipping prerequisites/engine setup; joining cluster directly"
|
|
143
|
+
worker_join
|
|
144
|
+
log "kubeadm worker (join-only) complete."
|
|
145
|
+
exit 0
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
# ---------------------------------------------------------------------------
|
|
149
|
+
# 0. Base prerequisites — a minimal @core Rocky install lacks tar/xz/git, which
|
|
150
|
+
# NVM needs to extract Node.js and the engine clone needs. Install them first.
|
|
151
|
+
# ---------------------------------------------------------------------------
|
|
152
|
+
log "Installing base prerequisites (tar, xz, gzip, git, curl)..."
|
|
153
|
+
sudo dnf install -y tar xz gzip bzip2 git curl ca-certificates which findutils 2>/dev/null \
|
|
154
|
+
|| dnf install -y tar xz gzip bzip2 git curl ca-certificates which findutils
|
|
155
|
+
|
|
156
|
+
# ---------------------------------------------------------------------------
|
|
157
|
+
# 1. NVM and Node.js — required for the `node bin ...` entrypoints. Idempotent so
|
|
158
|
+
# a retried run does not reinstall Node from scratch.
|
|
159
|
+
# ---------------------------------------------------------------------------
|
|
160
|
+
if command -v node >/dev/null 2>&1 && node --version 2>/dev/null | grep -q '^v24'; then
|
|
161
|
+
log "Node.js $(node --version) already installed; skipping NVM setup"
|
|
162
|
+
else
|
|
163
|
+
log "Installing NVM and Node.js v24.15.0..."
|
|
164
|
+
curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.1/install.sh | bash
|
|
165
|
+
|
|
166
|
+
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
|
|
167
|
+
# shellcheck disable=SC1090
|
|
168
|
+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
169
|
+
|
|
170
|
+
nvm install 24.15.0
|
|
171
|
+
nvm use 24.15.0
|
|
172
|
+
nvm alias default 24.15.0
|
|
173
|
+
ln -sf "$(command -v node)" /usr/local/bin/node
|
|
174
|
+
ln -sf "$(command -v npm)" /usr/local/bin/npm
|
|
175
|
+
ln -sf "$(command -v npx)" /usr/local/bin/npx
|
|
176
|
+
fi
|
|
177
|
+
|
|
178
|
+
echo "
|
|
179
|
+
██╗░░░██╗███╗░░██╗██████╗░███████╗██████╗░██████╗░░█████╗░░██████╗████████╗
|
|
180
|
+
██║░░░██║████╗░██║██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔════╝╚══██╔══╝
|
|
181
|
+
██║░░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██████╔╝██║░░██║╚█████╗░░░░██║░░░
|
|
182
|
+
██║░░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██╔═══╝░██║░░██║░╚═══██╗░░░██║░░░
|
|
183
|
+
╚██████╔╝██║░╚███║██████╔╝███████╗██║░░██║██║░░░░░╚█████╔╝██████╔╝░░░██║░░░
|
|
184
|
+
░╚═════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚═╝░░░░░░╚════╝░╚═════╝░░░░╚═╝░░░
|
|
185
|
+
|
|
186
|
+
Bringing up underpost kubeadm node (role=$ROLE) from $ENGINE_ROOT
|
|
187
|
+
"
|
|
188
|
+
|
|
189
|
+
# ---------------------------------------------------------------------------
|
|
190
|
+
# 2. Engine source — required by `node bin cluster` (manifests + CLI).
|
|
191
|
+
# Normalizes any (custom-named) repo into the canonical paths, mirroring
|
|
192
|
+
# src/server/start.js: clone into a temp dir then copy the contents into the
|
|
193
|
+
# target, so the working tree is always $ENGINE_ROOT regardless of repo name.
|
|
194
|
+
# ---------------------------------------------------------------------------
|
|
195
|
+
command -v git >/dev/null 2>&1 || sudo dnf install -y git
|
|
196
|
+
|
|
197
|
+
# clone_or_pull <repo-url> <branch> <target-dir> <remote-name> [mask-secret]
|
|
198
|
+
# If <target-dir> exists with a git repo, does a git pull (fetch+reset) to
|
|
199
|
+
# update it. Otherwise clones <repo-url> into a temp dir and copies contents
|
|
200
|
+
# to <target-dir> so a custom repo (e.g. engine-test-test) always lands at
|
|
201
|
+
# the canonical path. [mask-secret] is redacted from any logged output.
|
|
202
|
+
clone_or_pull() {
|
|
203
|
+
local url="${1:-}" branch="${2:-}" target="${3:-}" remote="${4:-origin}" mask="${5:-}"
|
|
204
|
+
if [ -d "$target" ] && git -C "$target" rev-parse --git-dir >/dev/null 2>&1; then
|
|
205
|
+
log "$target already present; pulling latest ..."
|
|
206
|
+
if git -C "$target" remote get-url "$remote" >/dev/null 2>&1; then
|
|
207
|
+
# Temporarily set the authenticated URL so the fetch succeeds.
|
|
208
|
+
# The caller strips the token from the remote URL after this returns.
|
|
209
|
+
local saved_url; saved_url="$(git -C "$target" remote get-url "$remote" 2>/dev/null || true)"
|
|
210
|
+
git -C "$target" remote set-url "$remote" "$url" 2>/dev/null || true
|
|
211
|
+
if [ -n "$mask" ]; then
|
|
212
|
+
git -C "$target" fetch --depth 1 "$remote" 2>&1 | sed "s/${mask}/***/g" || true
|
|
213
|
+
else
|
|
214
|
+
git -C "$target" fetch --depth 1 "$remote" 2>&1 || true
|
|
215
|
+
fi
|
|
216
|
+
# Restore the saved (clean) URL immediately so the token is never persisted.
|
|
217
|
+
if [ -n "$saved_url" ]; then
|
|
218
|
+
git -C "$target" remote set-url "$remote" "$saved_url" 2>/dev/null || true
|
|
219
|
+
fi
|
|
220
|
+
if [ -n "$branch" ]; then
|
|
221
|
+
git -C "$target" reset --hard "$remote/$branch" 2>/dev/null || true
|
|
222
|
+
else
|
|
223
|
+
# No branch specified: pull whichever branch is HEAD on remote
|
|
224
|
+
git -C "$target" reset --hard "$remote/$(git -C "$target" rev-parse --abbrev-ref HEAD 2>/dev/null)" 2>/dev/null || true
|
|
225
|
+
fi
|
|
226
|
+
# Clean untracked files so stale artifacts don't accumulate
|
|
227
|
+
git -C "$target" clean -fd 2>/dev/null || true
|
|
228
|
+
log "$target updated via pull"
|
|
229
|
+
return 0
|
|
230
|
+
fi
|
|
231
|
+
fi
|
|
232
|
+
# Full clone + normalize path
|
|
233
|
+
log "Cloning + normalizing $url -> $target ..."
|
|
234
|
+
local tmp; tmp="$(mktemp -d)"
|
|
235
|
+
local ok=0
|
|
236
|
+
if [ -n "$branch" ]; then
|
|
237
|
+
if [ -n "$mask" ]; then git clone --depth 1 --branch "$branch" "$url" "$tmp/repo" 2>&1 | sed "s/${mask}/***/g"; ok=${PIPESTATUS[0]}; else git clone --depth 1 --branch "$branch" "$url" "$tmp/repo"; ok=$?; fi
|
|
238
|
+
else
|
|
239
|
+
if [ -n "$mask" ]; then git clone --depth 1 "$url" "$tmp/repo" 2>&1 | sed "s/${mask}/***/g"; ok=${PIPESTATUS[0]}; else git clone --depth 1 "$url" "$tmp/repo"; ok=$?; fi
|
|
240
|
+
fi
|
|
241
|
+
if [ "$ok" -ne 0 ] || [ ! -d "$tmp/repo" ]; then
|
|
242
|
+
rm -rf "$tmp"
|
|
243
|
+
return 1
|
|
244
|
+
fi
|
|
245
|
+
mkdir -p "$target"
|
|
246
|
+
cp -a "$tmp/repo/." "$target/"
|
|
247
|
+
rm -rf "$tmp"
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if [ -n "$GITHUB_TOKEN" ]; then
|
|
251
|
+
ENGINE_REPO_URL="https://${GITHUB_USERNAME:-x-access-token}:${GITHUB_TOKEN}@${ENGINE_REPO#https://}"
|
|
252
|
+
# Mask the token in log output by routing through clone_or_pull with mask arg
|
|
253
|
+
clone_or_pull "$ENGINE_REPO_URL" "$ENGINE_BRANCH" "$ENGINE_ROOT" "origin" "$GITHUB_TOKEN" || { log "FATAL: engine clone failed"; exit 1; }
|
|
254
|
+
# Drop the token from the remote URL so it is not persisted on disk.
|
|
255
|
+
git -C "$ENGINE_ROOT" remote set-url origin "$ENGINE_REPO" 2>/dev/null || true
|
|
256
|
+
else
|
|
257
|
+
clone_or_pull "$ENGINE_REPO" "$ENGINE_BRANCH" "$ENGINE_ROOT" "origin" "" || { log "FATAL: engine clone failed"; exit 1; }
|
|
258
|
+
fi
|
|
259
|
+
|
|
260
|
+
cd "$ENGINE_ROOT"
|
|
261
|
+
|
|
262
|
+
# Clone + normalize the private secrets repo into $ENGINE_ROOT/engine-private
|
|
263
|
+
# (where `node bin run secret` reads engine-private/conf/.../.env.production),
|
|
264
|
+
# regardless of the private repo's name. The token is masked in logs and then
|
|
265
|
+
# stripped from the saved remote URL.
|
|
266
|
+
if [ -n "$GITHUB_TOKEN" ]; then
|
|
267
|
+
PRIV_URL="https://${GITHUB_USERNAME:-x-access-token}:${GITHUB_TOKEN}@${ENGINE_PRIVATE_REPO#https://}"
|
|
268
|
+
if clone_or_pull "$PRIV_URL" "$ENGINE_PRIVATE_BRANCH" "$ENGINE_ROOT/engine-private" "origin" "$GITHUB_TOKEN"; then
|
|
269
|
+
# Drop the token from the remote URL so it is not persisted on disk.
|
|
270
|
+
git -C "$ENGINE_ROOT/engine-private" remote set-url origin "$ENGINE_PRIVATE_REPO" 2>/dev/null || true
|
|
271
|
+
else
|
|
272
|
+
log "WARNING: engine-private clone failed — secrets will be unavailable"
|
|
273
|
+
fi
|
|
274
|
+
else
|
|
275
|
+
log "WARNING: GITHUB_TOKEN not provided; engine-private not cloned — secrets will be unavailable"
|
|
276
|
+
fi
|
|
277
|
+
|
|
278
|
+
# Install JS deps and generate secrets using the local engine entrypoint.
|
|
279
|
+
npm install
|
|
280
|
+
npm install -g underpost
|
|
281
|
+
node bin run secret
|
|
282
|
+
|
|
283
|
+
# ---------------------------------------------------------------------------
|
|
284
|
+
# 3. Host prerequisites (Docker, CRI-O, kubelet/kubeadm/kubectl, ...) via cluster.js
|
|
285
|
+
# ---------------------------------------------------------------------------
|
|
286
|
+
log "Installing Kubernetes host prerequisites (underpost cluster --init-host)..."
|
|
287
|
+
# CRI-O is already installed by this point (idempotent dnf). The install-crio
|
|
288
|
+
# runner also tries to install cri-tools (crictl) which is not in Rocky 9 repos.
|
|
289
|
+
# That failure is non-fatal; CRI-O itself works fine without crictl.
|
|
290
|
+
node bin cluster --dev --init-host || log "WARNING: init-host had minor errors (CRI-O is already installed)"
|
|
291
|
+
|
|
292
|
+
# ---------------------------------------------------------------------------
|
|
293
|
+
# 4. Role-specific bring-up, fully delegated to src/cli/cluster.js
|
|
294
|
+
# ---------------------------------------------------------------------------
|
|
295
|
+
if [ "$ROLE" = "control" ]; then
|
|
296
|
+
if [ "$INSTALL_CONTOUR" = "1" ]; then
|
|
297
|
+
log "Initializing kubeadm control-plane + Contour (underpost cluster --kubeadm --contour)..."
|
|
298
|
+
node bin cluster --dev --kubeadm --contour
|
|
299
|
+
else
|
|
300
|
+
log "Initializing kubeadm control-plane (underpost cluster --kubeadm)..."
|
|
301
|
+
node bin cluster --dev --kubeadm
|
|
302
|
+
fi
|
|
303
|
+
|
|
304
|
+
echo ""
|
|
305
|
+
log "Control-plane ready. Join command for workers:"
|
|
306
|
+
sudo kubeadm token create --print-join-command
|
|
307
|
+
|
|
308
|
+
elif [ "$ROLE" = "worker" ]; then
|
|
309
|
+
# Apply the same host configuration cluster.js uses (SELinux, swap, sysctl)
|
|
310
|
+
# before joining; worker_join then handles endpoint mapping + the join itself
|
|
311
|
+
# and fails the script (set -e) if the join does not succeed.
|
|
312
|
+
log "Applying host configuration (underpost cluster --config)..."
|
|
313
|
+
node bin cluster --dev --config
|
|
314
|
+
worker_join
|
|
315
|
+
fi
|
|
316
|
+
|
|
317
|
+
log "kubeadm ${ROLE} setup complete."
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# ---------------------------------------------------------------------------
|
|
5
|
+
# LXD VM OS base setup. Runs inside the VM via `lxc exec`. Idempotent.
|
|
6
|
+
# ---------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
# lxdbr0 is a plain L2 bridge: LXD runs no DHCP/DNS on it (MAAS owns
|
|
9
|
+
# provisioning), so VMs configure their NIC statically and deterministically.
|
|
10
|
+
# The host pins the gateway (10.250.250.1) on the bridge and provides NAT; no
|
|
11
|
+
# resolver listens there, so DNS must use public/MAAS resolvers, not the gateway.
|
|
12
|
+
# LXD_NET_MODE=dhcp opts back into DHCP-first for VMs on a MAAS-served segment.
|
|
13
|
+
LXD_NET_MODE="${LXD_NET_MODE:-static}"
|
|
14
|
+
LXD_FALLBACK_IPV4_CIDR="${LXD_FALLBACK_IPV4_CIDR:-10.250.250.100/24}"
|
|
15
|
+
LXD_FALLBACK_GATEWAY="${LXD_FALLBACK_GATEWAY:-10.250.250.1}"
|
|
16
|
+
LXD_FALLBACK_DNS="${LXD_FALLBACK_DNS:-1.1.1.1 8.8.8.8}"
|
|
17
|
+
ROCKY_MIRROR_HOST="${ROCKY_MIRROR_HOST:-mirrors.rockylinux.org}"
|
|
18
|
+
|
|
19
|
+
current_ipv4() {
|
|
20
|
+
ip -4 addr show "$IFACE" | awk '/inet /{print $2; exit}'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
wait_for_ipv4() {
|
|
24
|
+
local current_ip=""
|
|
25
|
+
|
|
26
|
+
for _ in $(seq 1 10); do
|
|
27
|
+
current_ip="$(current_ipv4)"
|
|
28
|
+
if [ -n "$current_ip" ]; then
|
|
29
|
+
echo "$current_ip"
|
|
30
|
+
return 0
|
|
31
|
+
fi
|
|
32
|
+
sleep 1
|
|
33
|
+
done
|
|
34
|
+
|
|
35
|
+
return 1
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
refresh_resolver_state() {
|
|
39
|
+
if command -v resolvectl >/dev/null 2>&1; then
|
|
40
|
+
sudo resolvectl flush-caches || true
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
if [ -f /run/NetworkManager/resolv.conf ]; then
|
|
44
|
+
sudo ln -sf /run/NetworkManager/resolv.conf /etc/resolv.conf || true
|
|
45
|
+
fi
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
verify_name_resolution() {
|
|
49
|
+
getent ahostsv4 "$ROCKY_MIRROR_HOST" >/dev/null 2>&1
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
retry_dnf() {
|
|
53
|
+
local attempt=1
|
|
54
|
+
local max_attempts=3
|
|
55
|
+
|
|
56
|
+
until "$@"; do
|
|
57
|
+
if [ "$attempt" -ge "$max_attempts" ]; then
|
|
58
|
+
return 1
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
echo "DNF command failed (attempt $attempt/$max_attempts): $*"
|
|
62
|
+
echo "Refreshing resolver state before retry..."
|
|
63
|
+
refresh_resolver_state
|
|
64
|
+
verify_name_resolution || true
|
|
65
|
+
attempt=$((attempt + 1))
|
|
66
|
+
done
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
# k3s derives the node name from the system hostname. The Rocky image keeps
|
|
70
|
+
# "localhost.localdomain" for every VM, so without this every node would try to
|
|
71
|
+
# register under the same name — the second one is rejected ("Node password
|
|
72
|
+
# rejected, duplicate hostname"). Pin the hostname to the LXD instance name so
|
|
73
|
+
# node names are unique and deterministic (control plane labeling relies on it).
|
|
74
|
+
if [ -n "${LXD_NODE_NAME:-}" ] && [ "$(hostname)" != "$LXD_NODE_NAME" ]; then
|
|
75
|
+
echo "--- Hostname ---"
|
|
76
|
+
echo "Setting hostname to ${LXD_NODE_NAME} (k3s node name)..."
|
|
77
|
+
sudo hostnamectl set-hostname "$LXD_NODE_NAME" 2>/dev/null || sudo hostname "$LXD_NODE_NAME"
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
echo "--- Network Configuration ---"
|
|
81
|
+
|
|
82
|
+
# 1. Detect primary non-loopback interface
|
|
83
|
+
IFACE=$(ip -o link show up | awk -F': ' '$2!="lo"{print $2; exit}')
|
|
84
|
+
echo "Using network interface: ${IFACE:-none}"
|
|
85
|
+
|
|
86
|
+
if [ -z "$IFACE" ]; then
|
|
87
|
+
echo "CRITICAL ERROR: No network interface detected."
|
|
88
|
+
exit 1
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
# 2. Force NetworkManager initialization if interface lacks an IP address
|
|
92
|
+
CURRENT_IP="$(current_ipv4 || true)"
|
|
93
|
+
|
|
94
|
+
if command -v nmcli >/dev/null 2>&1 && [ -z "$CURRENT_IP" ]; then
|
|
95
|
+
echo "Inspecting NetworkManager profiles..."
|
|
96
|
+
|
|
97
|
+
# Check if a profile is tracking this device
|
|
98
|
+
NM_CON=$(nmcli -t -f NAME,DEVICE connection show | awk -F: -v iface="$IFACE" '$2==iface{print $1; exit}')
|
|
99
|
+
|
|
100
|
+
if [ -z "$NM_CON" ]; then
|
|
101
|
+
echo "No connection profile matches $IFACE. Forcing generation of profile 'k3s-net'..."
|
|
102
|
+
nmcli connection add type ethernet con-name k3s-net ifname "$IFACE"
|
|
103
|
+
NM_CON="k3s-net"
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
apply_static_ipv4() {
|
|
107
|
+
echo "Applying static LXD bridge address ${LXD_FALLBACK_IPV4_CIDR} (gw ${LXD_FALLBACK_GATEWAY}, dns ${LXD_FALLBACK_DNS})..."
|
|
108
|
+
nmcli connection modify "$NM_CON" \
|
|
109
|
+
connection.autoconnect yes \
|
|
110
|
+
connection.interface-name "$IFACE" \
|
|
111
|
+
ipv4.method manual \
|
|
112
|
+
ipv4.addresses "$LXD_FALLBACK_IPV4_CIDR" \
|
|
113
|
+
ipv4.gateway "$LXD_FALLBACK_GATEWAY" \
|
|
114
|
+
ipv4.dns "$LXD_FALLBACK_DNS" \
|
|
115
|
+
ipv4.ignore-auto-dns yes \
|
|
116
|
+
ipv6.method ignore
|
|
117
|
+
nmcli connection up "$NM_CON"
|
|
118
|
+
CURRENT_IP="$(wait_for_ipv4 || true)"
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
# Static-first: lxdbr0 has no DHCP, so a DHCP attempt only adds a ~45s
|
|
122
|
+
# activation timeout per boot. DHCP is opt-in for VMs on a MAAS-served
|
|
123
|
+
# segment (LXD_NET_MODE=dhcp), with a static fallback if no lease appears.
|
|
124
|
+
if [ "$LXD_NET_MODE" = "dhcp" ]; then
|
|
125
|
+
echo "Configuring DHCP-first NetworkManager profile '$NM_CON'..."
|
|
126
|
+
nmcli connection modify "$NM_CON" \
|
|
127
|
+
connection.autoconnect yes \
|
|
128
|
+
connection.interface-name "$IFACE" \
|
|
129
|
+
ipv4.method auto \
|
|
130
|
+
ipv4.dhcp-client-id mac \
|
|
131
|
+
ipv4.ignore-auto-dns no \
|
|
132
|
+
ipv6.method ignore
|
|
133
|
+
echo "Bringing network interface up with DHCP..."
|
|
134
|
+
nmcli connection up "$NM_CON" || echo "DHCP activation failed; static fallback will be applied."
|
|
135
|
+
CURRENT_IP="$(wait_for_ipv4 || true)"
|
|
136
|
+
if [ -z "$CURRENT_IP" ]; then
|
|
137
|
+
echo "No DHCP lease on $IFACE."
|
|
138
|
+
apply_static_ipv4
|
|
139
|
+
fi
|
|
140
|
+
else
|
|
141
|
+
echo "Configuring static NetworkManager profile '$NM_CON' for the plain LXD bridge..."
|
|
142
|
+
apply_static_ipv4
|
|
143
|
+
fi
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
# 3. Give the network interface a short window to settle and lease an IP address
|
|
147
|
+
echo "Waiting for IP address allocation..."
|
|
148
|
+
CURRENT_IP="${CURRENT_IP:-$(wait_for_ipv4 || true)}"
|
|
149
|
+
if [ -n "$CURRENT_IP" ]; then
|
|
150
|
+
echo "Interface $IFACE successfully initialized with IP: $CURRENT_IP"
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
# 4. Verify DNS and outbound connectivity before proceeding (Fail Closed)
|
|
154
|
+
echo "Verifying internet and DNS connectivity..."
|
|
155
|
+
refresh_resolver_state
|
|
156
|
+
if ! verify_name_resolution; then
|
|
157
|
+
echo "CRITICAL ERROR: DNS lookup failed for $ROCKY_MIRROR_HOST. Diagnostic snapshot:"
|
|
158
|
+
echo "=== /etc/resolv.conf ==="
|
|
159
|
+
cat /etc/resolv.conf || true
|
|
160
|
+
echo "=== Interface State ==="
|
|
161
|
+
ip -4 addr show "$IFACE" || true
|
|
162
|
+
echo "=== Routing Table ==="
|
|
163
|
+
ip route show || true
|
|
164
|
+
echo "=== NetworkManager Status ==="
|
|
165
|
+
nmcli device status || true
|
|
166
|
+
exit 1
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
if ! timeout 15 curl -fsSL --max-time 10 "https://${ROCKY_MIRROR_HOST}" -o /dev/null; then
|
|
170
|
+
echo "CRITICAL ERROR: Network/DNS remains unreachable. Diagnostic snapshot:"
|
|
171
|
+
echo "=== /etc/resolv.conf ==="
|
|
172
|
+
cat /etc/resolv.conf || true
|
|
173
|
+
echo "=== Interface State ==="
|
|
174
|
+
ip -4 addr show "$IFACE" || true
|
|
175
|
+
echo "=== Routing Table ==="
|
|
176
|
+
ip route show || true
|
|
177
|
+
echo "=== NetworkManager Status ==="
|
|
178
|
+
nmcli device status || true
|
|
179
|
+
exit 1
|
|
180
|
+
fi
|
|
181
|
+
|
|
182
|
+
echo "--- Disk Resizing ---"
|
|
183
|
+
if ! command -v parted >/dev/null 2>&1; then
|
|
184
|
+
sudo dnf install -y parted
|
|
185
|
+
fi
|
|
186
|
+
|
|
187
|
+
set +e
|
|
188
|
+
sudo parted /dev/sda ---pretend-input-tty <<EOF
|
|
189
|
+
unit s
|
|
190
|
+
resizepart 2 100%
|
|
191
|
+
Yes
|
|
192
|
+
quit
|
|
193
|
+
EOF
|
|
194
|
+
set -e
|
|
195
|
+
|
|
196
|
+
sudo resize2fs /dev/sda2
|
|
197
|
+
echo "Disk partition and filesystem resized successfully."
|
|
198
|
+
|
|
199
|
+
echo "--- Package Installation ---"
|
|
200
|
+
retry_dnf sudo dnf install -y epel-release
|
|
201
|
+
retry_dnf sudo dnf install -y tar bzip2 git curl jq
|
|
202
|
+
retry_dnf sudo dnf -y update
|
|
203
|
+
|
|
204
|
+
echo "--- Kernel Modules for K3s ---"
|
|
205
|
+
sudo modprobe br_netfilter
|
|
206
|
+
echo "br_netfilter" | sudo tee /etc/modules-load.d/k3s-br_netfilter.conf > /dev/null
|
|
207
|
+
|
|
208
|
+
echo "Setup complete. System is ready for k3s-node-setup.sh"
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# MAAS NAT + firewall helper
|
|
5
|
+
# - Enables IPv4 forwarding and masquerading for the MAAS/provisioning subnet
|
|
6
|
+
# - Opens the MAAS API on the uplink zone when requested
|
|
7
|
+
# - Opens provisioning and optional NFS services on the zone bound to MAAS_LAN_CIDR
|
|
8
|
+
#
|
|
9
|
+
# Usage examples:
|
|
10
|
+
# sudo MAAS_LAN_CIDR="192.168.1.0/24" PUBLIC_ZONE="public" ./maas-nat-firewalld.sh
|
|
11
|
+
# sudo NFS_MODE="v3" CONFIGURE_NFS_V3_PORTS="true" ./maas-nat-firewalld.sh
|
|
12
|
+
|
|
13
|
+
MAAS_LAN_CIDR="${MAAS_LAN_CIDR:-192.168.1.0/24}"
|
|
14
|
+
PUBLIC_ZONE="${PUBLIC_ZONE:-public}"
|
|
15
|
+
TRUSTED_ZONE="${TRUSTED_ZONE:-trusted}"
|
|
16
|
+
NFS_MODE="${NFS_MODE:-v4}" # v4 or v3
|
|
17
|
+
CONFIGURE_NFS_V3_PORTS="${CONFIGURE_NFS_V3_PORTS:-false}"
|
|
18
|
+
EXPOSE_MAAS_API_PUBLIC="${EXPOSE_MAAS_API_PUBLIC:-true}"
|
|
19
|
+
|
|
20
|
+
# Fixed NFSv3 ports (only used when CONFIGURE_NFS_V3_PORTS=true)
|
|
21
|
+
NFS_MOUNTD_PORT="${NFS_MOUNTD_PORT:-20048}"
|
|
22
|
+
NFS_STATD_PORT="${NFS_STATD_PORT:-32765}"
|
|
23
|
+
# Outgoing port must differ from the listen port; rpc.statd exits 255 if they match.
|
|
24
|
+
NFS_STATD_OUTGOING_PORT="${NFS_STATD_OUTGOING_PORT:-32766}"
|
|
25
|
+
NFS_LOCKD_PORT="${NFS_LOCKD_PORT:-32803}"
|
|
26
|
+
NFS_LOCKD_UDP_PORT="${NFS_LOCKD_UDP_PORT:-${NFS_LOCKD_PORT}}"
|
|
27
|
+
NFS_CONF_DROPIN="/etc/nfs.conf.d/99-maas-nfs-v3-ports.conf"
|
|
28
|
+
|
|
29
|
+
case "${NFS_MODE}" in
|
|
30
|
+
v3|v4) ;;
|
|
31
|
+
*)
|
|
32
|
+
echo "[ERROR] NFS_MODE must be 'v3' or 'v4'." >&2
|
|
33
|
+
exit 1
|
|
34
|
+
;;
|
|
35
|
+
esac
|
|
36
|
+
|
|
37
|
+
# Ensure the kernel NFS server is enabled and actually running. `exportfs -rav` only populates the
|
|
38
|
+
# export table; it does not start nfsd, and `systemctl try-restart` is a no-op when the unit is
|
|
39
|
+
# stopped. Without this, clients hang on mount because nothing listens on 2049/mountd.
|
|
40
|
+
ensure_nfs_server_running() {
|
|
41
|
+
if [[ "${NFS_MODE}" == "v3" ]]; then
|
|
42
|
+
# NFSv3 depends on the portmapper and the status monitor.
|
|
43
|
+
sudo systemctl enable --now rpcbind 2>/dev/null || true
|
|
44
|
+
sudo systemctl enable --now rpc-statd 2>/dev/null || true
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
local unit=""
|
|
48
|
+
for candidate in nfs-server nfs-kernel-server; do
|
|
49
|
+
if systemctl cat "${candidate}.service" >/dev/null 2>&1; then
|
|
50
|
+
unit="${candidate}"
|
|
51
|
+
break
|
|
52
|
+
fi
|
|
53
|
+
done
|
|
54
|
+
if [[ -z "${unit}" ]]; then
|
|
55
|
+
echo "[ERROR] No NFS server unit found (nfs-server/nfs-kernel-server). Install nfs-utils or nfs-kernel-server." >&2
|
|
56
|
+
return 1
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
echo "[INFO] Enabling and (re)starting ${unit} to apply exports and fixed ports..."
|
|
60
|
+
sudo systemctl enable "${unit}" 2>/dev/null || true
|
|
61
|
+
sudo systemctl restart "${unit}"
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
echo "[INFO] Enabling firewalld..."
|
|
65
|
+
sudo systemctl enable --now firewalld
|
|
66
|
+
|
|
67
|
+
echo "[INFO] Enabling kernel forwarding..."
|
|
68
|
+
sudo tee /etc/sysctl.d/99-maas-nat.conf >/dev/null <<'EOF'
|
|
69
|
+
net.ipv4.ip_forward = 1
|
|
70
|
+
EOF
|
|
71
|
+
|
|
72
|
+
sudo sysctl --system >/dev/null
|
|
73
|
+
|
|
74
|
+
echo "[INFO] Allowing NAT for the MAAS LAN..."
|
|
75
|
+
sudo firewall-cmd --permanent --zone="${PUBLIC_ZONE}" --add-masquerade
|
|
76
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-source="${MAAS_LAN_CIDR}"
|
|
77
|
+
|
|
78
|
+
echo "[INFO] Opening MAAS services on the MAAS LAN zone..."
|
|
79
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port=5240/tcp
|
|
80
|
+
for service in dns dhcp tftp; do
|
|
81
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-service="${service}"
|
|
82
|
+
done
|
|
83
|
+
|
|
84
|
+
if [[ "${EXPOSE_MAAS_API_PUBLIC}" == "true" ]]; then
|
|
85
|
+
echo "[INFO] Opening MAAS API on the uplink zone..."
|
|
86
|
+
sudo firewall-cmd --permanent --zone="${PUBLIC_ZONE}" --add-port=5240/tcp
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
echo "[INFO] Opening NFS ports on the MAAS LAN zone..."
|
|
90
|
+
|
|
91
|
+
if [[ "${NFS_MODE}" == "v4" ]]; then
|
|
92
|
+
# NFSv4 normally needs only TCP 2049.
|
|
93
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port=2049/tcp
|
|
94
|
+
else
|
|
95
|
+
# NFSv3 side-band daemons need fixed ports for deterministic firewall rules.
|
|
96
|
+
if [[ "${CONFIGURE_NFS_V3_PORTS}" != "true" ]]; then
|
|
97
|
+
echo "[ERROR] NFSv3 requires CONFIGURE_NFS_V3_PORTS=true for consistent firewalld rules." >&2
|
|
98
|
+
echo "[ERROR] Re-run with CONFIGURE_NFS_V3_PORTS=true or switch to NFS_MODE=v4." >&2
|
|
99
|
+
exit 1
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
echo "[INFO] Writing fixed NFSv3 port configuration..."
|
|
103
|
+
sudo install -d -m 0755 /etc/nfs.conf.d
|
|
104
|
+
sudo tee "${NFS_CONF_DROPIN}" >/dev/null <<EOF
|
|
105
|
+
[nfsd]
|
|
106
|
+
vers3=y
|
|
107
|
+
|
|
108
|
+
[mountd]
|
|
109
|
+
port=${NFS_MOUNTD_PORT}
|
|
110
|
+
|
|
111
|
+
[statd]
|
|
112
|
+
port=${NFS_STATD_PORT}
|
|
113
|
+
outgoing-port=${NFS_STATD_OUTGOING_PORT}
|
|
114
|
+
|
|
115
|
+
[lockd]
|
|
116
|
+
port=${NFS_LOCKD_PORT}
|
|
117
|
+
udp-port=${NFS_LOCKD_UDP_PORT}
|
|
118
|
+
EOF
|
|
119
|
+
|
|
120
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-service=rpc-bind
|
|
121
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port=2049/tcp
|
|
122
|
+
for proto in tcp udp; do
|
|
123
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_MOUNTD_PORT}/${proto}"
|
|
124
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_STATD_PORT}/${proto}"
|
|
125
|
+
# Outgoing port is the fixed source for SM_NOTIFY; peers need to reach it.
|
|
126
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_STATD_OUTGOING_PORT}/${proto}"
|
|
127
|
+
done
|
|
128
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_LOCKD_PORT}/tcp"
|
|
129
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_LOCKD_UDP_PORT}/udp"
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
ensure_nfs_server_running
|
|
133
|
+
|
|
134
|
+
echo "[INFO] Reloading firewall..."
|
|
135
|
+
sudo firewall-cmd --reload
|
|
136
|
+
|
|
137
|
+
echo
|
|
138
|
+
echo "[INFO] Firewall status:"
|
|
139
|
+
sudo firewall-cmd --zone="${PUBLIC_ZONE}" --list-all
|
|
140
|
+
echo
|
|
141
|
+
echo "[INFO] MAAS LAN zone (${TRUSTED_ZONE}):"
|
|
142
|
+
sudo firewall-cmd --zone="${TRUSTED_ZONE}" --list-all
|
|
143
|
+
|
|
144
|
+
echo
|
|
145
|
+
echo "[INFO] MAAS NAT + firewall configuration completed."
|