penguins-eggs 9.5.21 → 9.5.23
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/.oclif.manifest.json +1 -1
- package/README.md +1 -1
- package/dist/classes/family/archlinux.js +2 -1
- package/dist/classes/ovary.js +166 -114
- package/dist/classes/pxe.js +5 -4
- package/dist/classes/utils.js +1 -1
- package/dist/commands/cuckoo.js +1 -1
- package/dist/lib/kill_me_softly.js +17 -11
- package/package.json +1 -1
package/.oclif.manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"9.5.21","commands":{"adapt":{"id":"adapt","description":"adapt monitor resolution for VM only","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs adapt"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"analyze":{"id":"analyze","description":"analyze for syncto","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs analyze"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"calamares":{"id":"calamares","description":"configure calamares or install or configure it","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs calamares","sudo eggs calamares --install","sudo eggs calamares --install --theme=/path/to/theme","sudo eggs calamares --remove"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"install":{"name":"install","type":"boolean","char":"i","description":"install calamares and its dependencies","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"noicons":{"name":"noicons","type":"boolean","char":"N","description":"no icons","allowNo":false},"release":{"name":"release","type":"boolean","char":"r","description":"release: remove calamares and all its dependencies after the installation","allowNo":false},"remove":{"name":"remove","type":"boolean","description":"remove calamares and its dependencies","allowNo":false},"theme":{"name":"theme","type":"option","description":"theme/branding for eggs and calamares","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"config":{"id":"config","description":"Configure and install prerequisites deb packages to run it","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs config","sudo eggs config --clean","sudo eggs config --clean --nointeractive"],"flags":{"clean":{"name":"clean","type":"boolean","char":"c","description":"remove old configuration before to create new one","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"noicons":{"name":"noicons","type":"boolean","char":"N","description":"no icons","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"cuckoo":{"id":"cuckoo","description":"PXE start with proxy-dhcp","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs cuckoo"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false}},"args":[]},"dad":{"id":"dad","description":"ask help from daddy - TUI configuration helper","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo dad","sudo dad --clean","sudo dad --default"],"flags":{"clean":{"name":"clean","type":"boolean","char":"c","description":"remove old configuration before to create","allowNo":false},"default":{"name":"default","type":"boolean","char":"d","description":"remove old configuration and force default","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"install":{"id":"install","description":"krill: the CLI system installer - the egg became a penguin!","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs install","sudo eggs install --unattended --halt","sudo eggs install --custom it"],"flags":{"crypted":{"name":"crypted","type":"boolean","char":"k","description":"Crypted CLI installation","allowNo":false},"custom":{"name":"custom","type":"option","char":"c","description":"custom unattended configuration","multiple":false},"domain":{"name":"domain","type":"option","char":"d","description":"Domain name, defult: .local","multiple":false},"halt":{"name":"halt","type":"boolean","char":"H","description":"Halt the system after installation","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"ip":{"name":"ip","type":"boolean","char":"i","description":"hostname as ip, eg: ip-192-168-1-33","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"none":{"name":"none","type":"boolean","char":"N","description":"Swap none: 256M","allowNo":false},"pve":{"name":"pve","type":"boolean","char":"p","description":"Proxmox VE install","allowNo":false},"random":{"name":"random","type":"boolean","char":"r","description":"Add random to hostname, eg: colibri-ay412dt","allowNo":false},"small":{"name":"small","type":"boolean","char":"s","description":"Swap small: RAM","allowNo":false},"suspend":{"name":"suspend","type":"boolean","char":"S","description":"Swap suspend: RAM x 2","allowNo":false},"unattended":{"name":"unattended","type":"boolean","char":"u","description":"Unattended installation","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"Verbose","allowNo":false}},"args":[]},"kill":{"id":"kill","description":"kill the eggs/free the nest","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs kill"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"mom":{"id":"mom","description":"ask help from mommy - TUI helper","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs mom"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false}},"args":[]},"produce":{"id":"produce","description":"produce a live image from your system whithout your data","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs produce","sudo eggs produce --standard","sudo eggs produce --max","sudo eggs produce --max --basename=colibri","sudo eggs produce --cryptedclone","sudo eggs produce --clone","sudo eggs produce --basename=colibri","sudo eggs produce --basename=colibri --theme theme --addons adapt"],"flags":{"addons":{"name":"addons","type":"option","description":"addons to be used: adapt, ichoice, pve, rsupport","multiple":true},"basename":{"name":"basename","type":"option","description":"basename","multiple":false},"clone":{"name":"clone","type":"boolean","char":"c","description":"clone","allowNo":false},"cryptedclone":{"name":"cryptedclone","type":"boolean","char":"C","description":"crypted clone","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"max":{"name":"max","type":"boolean","char":"m","description":"max compression","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"noicons":{"name":"noicons","type":"boolean","char":"N","description":"no icons on desktop","allowNo":false},"prefix":{"name":"prefix","type":"option","char":"p","description":"prefix","multiple":false},"release":{"name":"release","type":"boolean","description":"release: max compression, remove penguins-eggs and calamares after installation","allowNo":false},"script":{"name":"script","type":"boolean","char":"s","description":"script mode. Generate scripts to manage iso build","allowNo":false},"standard":{"name":"standard","type":"boolean","char":"f","description":"standard compression","allowNo":false},"theme":{"name":"theme","type":"option","description":"theme for livecd, calamares branding and partitions","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false},"yolk":{"name":"yolk","type":"boolean","char":"y","description":"-y force yolk renew","allowNo":false}},"args":[]},"status":{"id":"status","description":"informations about eggs status","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs status"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"syncfrom":{"id":"syncfrom","description":"restore users and user data from a LUKS volumes","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs syncfrom","sudo eggs syncfrom --file /path/to/fileLUKS"],"flags":{"delete":{"name":"delete","type":"option","description":"rsync --delete delete extraneous files from dest dirs","multiple":false},"file":{"name":"file","type":"option","char":"f","description":"file LUKS volume encrypted","multiple":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"rootdir":{"name":"rootdir","type":"option","char":"r","description":"rootdir of the installed system, when used from live","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"syncto":{"id":"syncto","description":"saves users and user data in a LUKS volume inside the iso","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs syncto","sudo eggs syncto --file /path/to/fileLUKS"],"flags":{"delete":{"name":"delete","type":"option","description":"rsync --delete delete extraneous files from dest dirs","multiple":false},"file":{"name":"file","type":"option","char":"f","description":"file LUKS volume encrypted","multiple":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"update":{"id":"update","description":"update the Penguins' eggs tool","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs update"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"export:deb":{"id":"export:deb","description":"export deb/docs/iso to the destination host","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs export deb","eggs export deb --clean","eggs export deb --all"],"flags":{"all":{"name":"all","type":"boolean","char":"a","description":"export all archs","allowNo":false},"clean":{"name":"clean","type":"boolean","char":"c","description":"remove old .deb before to copy","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"export:iso":{"id":"export:iso","description":"export iso in the destination host","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs export iso","eggs export iso --clean"],"flags":{"clean":{"name":"clean","type":"boolean","char":"c","description":"delete old ISOs before to copy","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"tools:clean":{"id":"tools:clean","description":"clean system log, apt, etc","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs tools clean"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"tools:ppa":{"id":"tools:ppa","description":"add/remove repo","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs tools ppa --add","sudo eggs tools ppa --remove"],"flags":{"add":{"name":"add","type":"boolean","char":"a","description":"add penguins-eggs PPA repository","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"remove":{"name":"remove","type":"boolean","char":"r","description":"remove penguins-eggs PPA repository","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"tools:skel":{"id":"tools:skel","description":"update skel from home configuration","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs tools skel","sudo eggs tools skel --user user-to-be-copied"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"user":{"name":"user","type":"option","char":"u","description":"user to be used","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"tools:stat":{"id":"tools:stat","description":"get statistics from sourceforge","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs tools stat","eggs tools stat --month","eggs tools stat --year"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"month":{"name":"month","type":"boolean","char":"m","description":"current month","allowNo":false},"year":{"name":"year","type":"boolean","char":"y","description":"current year","allowNo":false}},"args":[]},"tools:yolk":{"id":"tools:yolk","description":"configure eggs to install without internet","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs tools yolk"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[],"dir":"/var/local/yolk"},"wardrobe:get":{"id":"wardrobe:get","description":"get warorobe","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs wardrobe get","eggs wardrobe get your-wardrobe"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[{"name":"repo","description":"repository to get","required":false}]},"wardrobe:list":{"id":"wardrobe:list","description":"list costumes and accessoires in wardrobe","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs wardrobe list","eggs wardrobe list your-wardrobe","eggs wardrobe list --distro arch"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"distro":{"name":"distro","type":"option","char":"d","description":"distro","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[{"name":"wardrobe","description":"wardrobe","required":false}]},"wardrobe:show":{"id":"wardrobe:show","description":"show costumes/accessories in wardrobe","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs wardrobe show colibri","eggs wardrobe show accessories/firmwares","eggs wardrobe show accessories/"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"json":{"name":"json","type":"boolean","char":"j","description":"output JSON","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false},"wardrobe":{"name":"wardrobe","type":"option","char":"w","description":"wardrobe","multiple":false}},"args":[{"name":"costume","description":"costume","required":false}],"example":["eggs wardrobe show colibri","eggs wardrobe show accessories/firmwares","eggs wardrobe show accessories/"]},"wardrobe:wear":{"id":"wardrobe:wear","description":"wear costume/accessories from wardrobe","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs wardrobe wear duck","sudo eggs wardrobe wear accessories/firmwares","sudo eggs wardrobe wear wagtail/waydroid"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"no_accessories":{"name":"no_accessories","type":"boolean","char":"a","description":"not install accessories","allowNo":false},"no_firmwares":{"name":"no_firmwares","type":"boolean","char":"f","description":"not install firmwares","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false},"wardrobe":{"name":"wardrobe","type":"option","char":"w","description":"wardrobe","multiple":false}},"args":[{"name":"costume","description":"costume","required":false}]}}}
|
|
1
|
+
{"version":"9.5.23","commands":{"adapt":{"id":"adapt","description":"adapt monitor resolution for VM only","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs adapt"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"analyze":{"id":"analyze","description":"analyze for syncto","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs analyze"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"calamares":{"id":"calamares","description":"configure calamares or install or configure it","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs calamares","sudo eggs calamares --install","sudo eggs calamares --install --theme=/path/to/theme","sudo eggs calamares --remove"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"install":{"name":"install","type":"boolean","char":"i","description":"install calamares and its dependencies","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"noicons":{"name":"noicons","type":"boolean","char":"N","description":"no icons","allowNo":false},"release":{"name":"release","type":"boolean","char":"r","description":"release: remove calamares and all its dependencies after the installation","allowNo":false},"remove":{"name":"remove","type":"boolean","description":"remove calamares and its dependencies","allowNo":false},"theme":{"name":"theme","type":"option","description":"theme/branding for eggs and calamares","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"config":{"id":"config","description":"Configure and install prerequisites deb packages to run it","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs config","sudo eggs config --clean","sudo eggs config --clean --nointeractive"],"flags":{"clean":{"name":"clean","type":"boolean","char":"c","description":"remove old configuration before to create new one","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"noicons":{"name":"noicons","type":"boolean","char":"N","description":"no icons","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"cuckoo":{"id":"cuckoo","description":"PXE start with proxy-dhcp","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs cuckoo"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false}},"args":[]},"dad":{"id":"dad","description":"ask help from daddy - TUI configuration helper","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo dad","sudo dad --clean","sudo dad --default"],"flags":{"clean":{"name":"clean","type":"boolean","char":"c","description":"remove old configuration before to create","allowNo":false},"default":{"name":"default","type":"boolean","char":"d","description":"remove old configuration and force default","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"install":{"id":"install","description":"krill: the CLI system installer - the egg became a penguin!","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs install","sudo eggs install --unattended --halt","sudo eggs install --custom it"],"flags":{"crypted":{"name":"crypted","type":"boolean","char":"k","description":"Crypted CLI installation","allowNo":false},"custom":{"name":"custom","type":"option","char":"c","description":"custom unattended configuration","multiple":false},"domain":{"name":"domain","type":"option","char":"d","description":"Domain name, defult: .local","multiple":false},"halt":{"name":"halt","type":"boolean","char":"H","description":"Halt the system after installation","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"ip":{"name":"ip","type":"boolean","char":"i","description":"hostname as ip, eg: ip-192-168-1-33","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"none":{"name":"none","type":"boolean","char":"N","description":"Swap none: 256M","allowNo":false},"pve":{"name":"pve","type":"boolean","char":"p","description":"Proxmox VE install","allowNo":false},"random":{"name":"random","type":"boolean","char":"r","description":"Add random to hostname, eg: colibri-ay412dt","allowNo":false},"small":{"name":"small","type":"boolean","char":"s","description":"Swap small: RAM","allowNo":false},"suspend":{"name":"suspend","type":"boolean","char":"S","description":"Swap suspend: RAM x 2","allowNo":false},"unattended":{"name":"unattended","type":"boolean","char":"u","description":"Unattended installation","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"Verbose","allowNo":false}},"args":[]},"kill":{"id":"kill","description":"kill the eggs/free the nest","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs kill"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"mom":{"id":"mom","description":"ask help from mommy - TUI helper","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs mom"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false}},"args":[]},"produce":{"id":"produce","description":"produce a live image from your system whithout your data","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs produce","sudo eggs produce --standard","sudo eggs produce --max","sudo eggs produce --max --basename=colibri","sudo eggs produce --cryptedclone","sudo eggs produce --clone","sudo eggs produce --basename=colibri","sudo eggs produce --basename=colibri --theme theme --addons adapt"],"flags":{"addons":{"name":"addons","type":"option","description":"addons to be used: adapt, ichoice, pve, rsupport","multiple":true},"basename":{"name":"basename","type":"option","description":"basename","multiple":false},"clone":{"name":"clone","type":"boolean","char":"c","description":"clone","allowNo":false},"cryptedclone":{"name":"cryptedclone","type":"boolean","char":"C","description":"crypted clone","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"max":{"name":"max","type":"boolean","char":"m","description":"max compression","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"noicons":{"name":"noicons","type":"boolean","char":"N","description":"no icons on desktop","allowNo":false},"prefix":{"name":"prefix","type":"option","char":"p","description":"prefix","multiple":false},"release":{"name":"release","type":"boolean","description":"release: max compression, remove penguins-eggs and calamares after installation","allowNo":false},"script":{"name":"script","type":"boolean","char":"s","description":"script mode. Generate scripts to manage iso build","allowNo":false},"standard":{"name":"standard","type":"boolean","char":"f","description":"standard compression","allowNo":false},"theme":{"name":"theme","type":"option","description":"theme for livecd, calamares branding and partitions","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false},"yolk":{"name":"yolk","type":"boolean","char":"y","description":"-y force yolk renew","allowNo":false}},"args":[]},"status":{"id":"status","description":"informations about eggs status","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs status"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"syncfrom":{"id":"syncfrom","description":"restore users and user data from a LUKS volumes","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs syncfrom","sudo eggs syncfrom --file /path/to/fileLUKS"],"flags":{"delete":{"name":"delete","type":"option","description":"rsync --delete delete extraneous files from dest dirs","multiple":false},"file":{"name":"file","type":"option","char":"f","description":"file LUKS volume encrypted","multiple":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"rootdir":{"name":"rootdir","type":"option","char":"r","description":"rootdir of the installed system, when used from live","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"syncto":{"id":"syncto","description":"saves users and user data in a LUKS volume inside the iso","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs syncto","sudo eggs syncto --file /path/to/fileLUKS"],"flags":{"delete":{"name":"delete","type":"option","description":"rsync --delete delete extraneous files from dest dirs","multiple":false},"file":{"name":"file","type":"option","char":"f","description":"file LUKS volume encrypted","multiple":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"update":{"id":"update","description":"update the Penguins' eggs tool","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs update"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"export:deb":{"id":"export:deb","description":"export deb/docs/iso to the destination host","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs export deb","eggs export deb --clean","eggs export deb --all"],"flags":{"all":{"name":"all","type":"boolean","char":"a","description":"export all archs","allowNo":false},"clean":{"name":"clean","type":"boolean","char":"c","description":"remove old .deb before to copy","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"export:iso":{"id":"export:iso","description":"export iso in the destination host","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs export iso","eggs export iso --clean"],"flags":{"clean":{"name":"clean","type":"boolean","char":"c","description":"delete old ISOs before to copy","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"tools:clean":{"id":"tools:clean","description":"clean system log, apt, etc","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs tools clean"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"tools:ppa":{"id":"tools:ppa","description":"add/remove repo","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs tools ppa --add","sudo eggs tools ppa --remove"],"flags":{"add":{"name":"add","type":"boolean","char":"a","description":"add penguins-eggs PPA repository","allowNo":false},"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"nointeractive":{"name":"nointeractive","type":"boolean","char":"n","description":"no user interaction","allowNo":false},"remove":{"name":"remove","type":"boolean","char":"r","description":"remove penguins-eggs PPA repository","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","description":"verbose","allowNo":false}},"args":[]},"tools:skel":{"id":"tools:skel","description":"update skel from home configuration","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs tools skel","sudo eggs tools skel --user user-to-be-copied"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"user":{"name":"user","type":"option","char":"u","description":"user to be used","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[]},"tools:stat":{"id":"tools:stat","description":"get statistics from sourceforge","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs tools stat","eggs tools stat --month","eggs tools stat --year"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"month":{"name":"month","type":"boolean","char":"m","description":"current month","allowNo":false},"year":{"name":"year","type":"boolean","char":"y","description":"current year","allowNo":false}},"args":[]},"tools:yolk":{"id":"tools:yolk","description":"configure eggs to install without internet","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs tools yolk"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[],"dir":"/var/local/yolk"},"wardrobe:get":{"id":"wardrobe:get","description":"get warorobe","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs wardrobe get","eggs wardrobe get your-wardrobe"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[{"name":"repo","description":"repository to get","required":false}]},"wardrobe:list":{"id":"wardrobe:list","description":"list costumes and accessoires in wardrobe","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs wardrobe list","eggs wardrobe list your-wardrobe","eggs wardrobe list --distro arch"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"distro":{"name":"distro","type":"option","char":"d","description":"distro","multiple":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[{"name":"wardrobe","description":"wardrobe","required":false}]},"wardrobe:show":{"id":"wardrobe:show","description":"show costumes/accessories in wardrobe","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["eggs wardrobe show colibri","eggs wardrobe show accessories/firmwares","eggs wardrobe show accessories/"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"json":{"name":"json","type":"boolean","char":"j","description":"output JSON","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false},"wardrobe":{"name":"wardrobe","type":"option","char":"w","description":"wardrobe","multiple":false}},"args":[{"name":"costume","description":"costume","required":false}],"example":["eggs wardrobe show colibri","eggs wardrobe show accessories/firmwares","eggs wardrobe show accessories/"]},"wardrobe:wear":{"id":"wardrobe:wear","description":"wear costume/accessories from wardrobe","strict":true,"pluginName":"penguins-eggs","pluginAlias":"penguins-eggs","pluginType":"core","aliases":[],"examples":["sudo eggs wardrobe wear duck","sudo eggs wardrobe wear accessories/firmwares","sudo eggs wardrobe wear wagtail/waydroid"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"Show CLI help.","allowNo":false},"no_accessories":{"name":"no_accessories","type":"boolean","char":"a","description":"not install accessories","allowNo":false},"no_firmwares":{"name":"no_firmwares","type":"boolean","char":"f","description":"not install firmwares","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false},"wardrobe":{"name":"wardrobe","type":"option","char":"w","description":"wardrobe","multiple":false}},"args":[{"name":"costume","description":"costume","required":false}]}}}
|
package/README.md
CHANGED
|
@@ -105,7 +105,7 @@ There are more than a way to install eggs as .deb package, the most practical is
|
|
|
105
105
|
The simplest way to install eggs is download the [package eggs](https://sourceforge.net/projects/penguins-eggs/files/DEBS/) from [sourceforge page of the project](https://sourceforge.net/projects/penguins-eggs/) and install it
|
|
106
106
|
|
|
107
107
|
```
|
|
108
|
-
sudo dpkg -i eggs_9.5.
|
|
108
|
+
sudo dpkg -i eggs_9.5.23_amd64.deb
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
or, on a i386 system:
|
|
@@ -88,7 +88,8 @@ class Archlinux {
|
|
|
88
88
|
static async calamaresInstall(verbose = false) {
|
|
89
89
|
verbose = true; // serve per pacman
|
|
90
90
|
const echo = utils_1.default.setEcho(verbose);
|
|
91
|
-
const cal_eggs = 'calamares-eggs-3.3.0.r10616.11e1659ca-1-x86_64.pkg.tar.zst'
|
|
91
|
+
// const cal_eggs = 'calamares-eggs-3.3.0.r10616.11e1659ca-1-x86_64.pkg.tar.zst'
|
|
92
|
+
const cal_eggs = 'calamares-eggs-3.3.0.r10707.4b3278058-1-x86_64.pkg.tar.zst'; // 2023-09-04
|
|
92
93
|
let cmd = `wget -O /tmp/${cal_eggs} https://sourceforge.net/projects/penguins-eggs/files/PKGBUILD/${cal_eggs}/download`;
|
|
93
94
|
try {
|
|
94
95
|
await (0, utils_2.exec)(cmd, echo);
|
package/dist/classes/ovary.js
CHANGED
|
@@ -166,6 +166,7 @@ class Ovary {
|
|
|
166
166
|
* put reCreate = true in release
|
|
167
167
|
*/
|
|
168
168
|
const reCreate = true;
|
|
169
|
+
let mksquashfsCmd = '';
|
|
169
170
|
if (reCreate) { // start pre-clone
|
|
170
171
|
/**
|
|
171
172
|
* installer
|
|
@@ -189,6 +190,7 @@ class Ovary {
|
|
|
189
190
|
await this.makeEfi(this.theme);
|
|
190
191
|
}
|
|
191
192
|
await this.bindLiveFs();
|
|
193
|
+
await this.copyBoot();
|
|
192
194
|
if (!this.clone) {
|
|
193
195
|
/**
|
|
194
196
|
* ANCHE per cryptedclone
|
|
@@ -212,7 +214,7 @@ class Ovary {
|
|
|
212
214
|
this.cliAutologin.addAutologin(this.settings.distro.distroId, this.settings.distro.codenameId, this.settings.config.user_opt, this.settings.config.user_opt_passwd, this.settings.config.root_passwd, this.settings.work_dir.merged);
|
|
213
215
|
}
|
|
214
216
|
await this.editLiveFs(clone, cryptedclone);
|
|
215
|
-
await this.makeSquashfs(scriptOnly);
|
|
217
|
+
mksquashfsCmd = await this.makeSquashfs(scriptOnly);
|
|
216
218
|
await this.uBindLiveFs(); // Lo smonto prima della fase di backup
|
|
217
219
|
}
|
|
218
220
|
if (cryptedclone) {
|
|
@@ -222,38 +224,37 @@ class Ovary {
|
|
|
222
224
|
utils_2.default.warning(`moving ${luksFile} in ${this.ovarium}iso/live`);
|
|
223
225
|
await (0, utils_1.exec)(`mv ${luksFile} ${this.ovarium}iso/live`, this.echo);
|
|
224
226
|
}
|
|
225
|
-
const
|
|
227
|
+
const mkIsofsCmd = this.xorrisoCommand(clone, cryptedclone).replace(/\s\s+/g, ' ');
|
|
228
|
+
const info = utils_2.default.getVolid(this.settings.remix.name);
|
|
229
|
+
this.makeDotDisk(info, mksquashfsCmd, mkIsofsCmd);
|
|
226
230
|
/**
|
|
227
231
|
* patch to emulate miso/archiso on archilinux
|
|
228
232
|
*/
|
|
229
233
|
if (this.familyId === 'archlinux') {
|
|
234
|
+
let pathName = `arch/x86_64/airootfs`;
|
|
235
|
+
let hashCmd = 'sha512sum';
|
|
236
|
+
let hashExt = '.sha512';
|
|
230
237
|
if (this.settings.distro.distroId === 'ManjaroLinux') {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
else if (this.settings.distro.distroId === 'Arch' ||
|
|
236
|
-
this.settings.distro.distroId === 'blendOS' ||
|
|
237
|
-
this.settings.distro.distroId === 'Garuda' ||
|
|
238
|
-
this.settings.distro.distroId === 'phyOS' ||
|
|
239
|
-
this.settings.distro.distroId === 'RebornOS' ||
|
|
240
|
-
this.settings.distro.distroId === 'EndeavourOS') {
|
|
241
|
-
await (0, utils_1.exec)(`mkdir ${this.settings.iso_work}arch/x86_64 -p`, this.echo);
|
|
242
|
-
await (0, utils_1.exec)(`ln ${this.settings.iso_work}live/filesystem.squashfs ${this.settings.iso_work}arch/x86_64/airootfs.sfs`, this.echo);
|
|
243
|
-
await (0, utils_1.exec)(`sha512sum ${this.settings.iso_work}live/filesystem.squashfs > ${this.settings.iso_work}arch/x86_64/airootfs.sha512`, this.echo);
|
|
238
|
+
pathName = `manjaro/x86_64/livefs`;
|
|
239
|
+
hashCmd = `md5sum`;
|
|
240
|
+
hashExt = '.md5';
|
|
244
241
|
}
|
|
242
|
+
await (0, utils_1.exec)(`mkdir ${this.settings.iso_work}${pathName}/x86_64 -p`, this.echo);
|
|
243
|
+
// await exec(`ln -s ${this.settings.iso_work}live/filesystem.squashfs ${this.settings.iso_work}${pathName}.sfs`, this.echo)
|
|
244
|
+
await (0, utils_1.exec)(`mv ${this.settings.iso_work}live/filesystem.squashfs ${this.settings.iso_work}${pathName}.sfs`, this.echo);
|
|
245
|
+
await (0, utils_1.exec)(`${hashCmd} ${this.settings.iso_work}${pathName}.sfs > ${this.settings.iso_work}${pathName}${hashExt}`, this.echo);
|
|
245
246
|
}
|
|
246
|
-
await this.makeIso(
|
|
247
|
+
await this.makeIso(mkIsofsCmd, scriptOnly);
|
|
247
248
|
}
|
|
248
249
|
}
|
|
249
250
|
/**
|
|
250
251
|
* Crea la struttura della workdir
|
|
251
252
|
*/
|
|
252
253
|
async liveCreateStructure() {
|
|
253
|
-
// efi-work iso memdiskDir sotto mountpoint
|
|
254
254
|
if (this.verbose) {
|
|
255
255
|
console.log('Ovary: liveCreateStructure');
|
|
256
256
|
}
|
|
257
|
+
// efi-work iso memdiskDir sotto mountpoint
|
|
257
258
|
utils_2.default.warning(`Creating egg in ${this.settings.config.snapshot_dir}`);
|
|
258
259
|
let cmd;
|
|
259
260
|
if (!fs_1.default.existsSync(this.settings.config.snapshot_dir)) {
|
|
@@ -284,11 +285,11 @@ class Ovary {
|
|
|
284
285
|
* Creo le directory di destinazione per boot, efi, isolinux e live
|
|
285
286
|
*/
|
|
286
287
|
if (!fs_1.default.existsSync(this.settings.iso_work)) {
|
|
287
|
-
cmd = `mkdir -p ${this.settings.iso_work}
|
|
288
|
+
cmd = `mkdir -p ${this.settings.iso_work}boot/grub/${utils_2.default.machineUEFI()}`;
|
|
288
289
|
this.tryCatch(cmd);
|
|
289
|
-
cmd = `mkdir -p ${this.settings.iso_work}
|
|
290
|
+
cmd = `mkdir -p ${this.settings.iso_work}efi/boot`;
|
|
290
291
|
this.tryCatch(cmd);
|
|
291
|
-
cmd = `mkdir -p ${this.settings.iso_work}
|
|
292
|
+
cmd = `mkdir -p ${this.settings.iso_work}isolinux`;
|
|
292
293
|
this.tryCatch(cmd);
|
|
293
294
|
cmd = `mkdir -p ${this.settings.iso_work}live`;
|
|
294
295
|
this.tryCatch(cmd);
|
|
@@ -299,6 +300,9 @@ class Ovary {
|
|
|
299
300
|
* @param cmd
|
|
300
301
|
*/
|
|
301
302
|
async tryCatch(cmd = '') {
|
|
303
|
+
if (this.verbose) {
|
|
304
|
+
console.log('Ovary: tryCatch');
|
|
305
|
+
}
|
|
302
306
|
try {
|
|
303
307
|
await (0, utils_1.exec)(cmd, this.echo);
|
|
304
308
|
}
|
|
@@ -319,7 +323,7 @@ class Ovary {
|
|
|
319
323
|
*/
|
|
320
324
|
async editLiveFs(clone = false, cryptedclone = false) {
|
|
321
325
|
if (this.verbose) {
|
|
322
|
-
console.log('
|
|
326
|
+
console.log('Ovary: editLiveFs');
|
|
323
327
|
}
|
|
324
328
|
/**
|
|
325
329
|
* /etc/penguins-eggs.d/is_clone file created on live
|
|
@@ -527,8 +531,7 @@ class Ovary {
|
|
|
527
531
|
*/
|
|
528
532
|
async syslinux() {
|
|
529
533
|
if (this.verbose) {
|
|
530
|
-
console.log('
|
|
531
|
-
console.log('syslinux path: ' + this.settings.distro.syslinuxPath);
|
|
534
|
+
console.log('Ovary: syslinux');
|
|
532
535
|
}
|
|
533
536
|
await (0, utils_1.exec)(`cp ${this.settings.distro.syslinuxPath}/vesamenu.c32 ${this.settings.iso_work}/isolinux/`, this.echo);
|
|
534
537
|
await (0, utils_1.exec)(`cp ${this.settings.distro.syslinuxPath}/chain.c32 ${this.settings.iso_work}/isolinux/`, this.echo);
|
|
@@ -548,7 +551,7 @@ class Ovary {
|
|
|
548
551
|
*/
|
|
549
552
|
async isolinux(theme = 'eggs') {
|
|
550
553
|
if (this.verbose) {
|
|
551
|
-
console.log('
|
|
554
|
+
console.log('Ovary: isolinux');
|
|
552
555
|
}
|
|
553
556
|
/**
|
|
554
557
|
* isolinux.bin
|
|
@@ -605,6 +608,9 @@ class Ovary {
|
|
|
605
608
|
* @returns kernelParameters
|
|
606
609
|
*/
|
|
607
610
|
kernelParameters() {
|
|
611
|
+
if (this.verbose) {
|
|
612
|
+
console.log('Ovary: kernelParameters');
|
|
613
|
+
}
|
|
608
614
|
const distroId = this.settings.distro.distroId;
|
|
609
615
|
let kp = `boot=live components locales=${process.env.LANG}`;
|
|
610
616
|
if (this.familyId === 'archlinux') {
|
|
@@ -629,11 +635,11 @@ class Ovary {
|
|
|
629
635
|
*/
|
|
630
636
|
async kernelCopy() {
|
|
631
637
|
if (this.verbose) {
|
|
632
|
-
console.log('
|
|
638
|
+
console.log('Ovary: kernelCopy');
|
|
633
639
|
}
|
|
634
640
|
let lackVmlinuzImage = false;
|
|
635
641
|
if (fs_1.default.existsSync(this.settings.kernel_image)) {
|
|
636
|
-
await (0, utils_1.exec)(`cp ${this.settings.kernel_image} ${this.settings.iso_work}
|
|
642
|
+
await (0, utils_1.exec)(`cp ${this.settings.kernel_image} ${this.settings.iso_work}live/`, this.echo);
|
|
637
643
|
}
|
|
638
644
|
else {
|
|
639
645
|
utils_2.default.error(`Cannot find ${this.settings.kernel_image}`);
|
|
@@ -649,9 +655,12 @@ class Ovary {
|
|
|
649
655
|
* necessita di echoYes
|
|
650
656
|
*/
|
|
651
657
|
async initrdCreate() {
|
|
658
|
+
if (this.verbose) {
|
|
659
|
+
console.log('Ovary: initrdCreate');
|
|
660
|
+
}
|
|
652
661
|
let initrdImg = utils_2.default.initrdImg();
|
|
653
662
|
initrdImg = initrdImg.slice(Math.max(0, initrdImg.lastIndexOf('/') + 1));
|
|
654
|
-
utils_2.default.warning(`Creating ${initrdImg} in ${this.settings.iso_work}
|
|
663
|
+
utils_2.default.warning(`Creating ${initrdImg} in ${this.settings.iso_work}live/`);
|
|
655
664
|
const distroId = this.settings.distro.distroId;
|
|
656
665
|
let fileConf = 'archlinux';
|
|
657
666
|
if (distroId === 'Arch' ||
|
|
@@ -672,13 +681,16 @@ class Ovary {
|
|
|
672
681
|
fileConf = distroId.toLowerCase();
|
|
673
682
|
}
|
|
674
683
|
let pathConf = node_path_1.default.resolve(__dirname, `../../mkinitcpio/${fileConf}/live.conf`);
|
|
675
|
-
await (0, utils_1.exec)(`mkinitcpio -c ${pathConf} -g ${this.settings.iso_work}
|
|
684
|
+
await (0, utils_1.exec)(`mkinitcpio -c ${pathConf} -g ${this.settings.iso_work}live/${initrdImg}`, utils_2.default.setEcho(true));
|
|
676
685
|
}
|
|
677
686
|
/**
|
|
678
687
|
* We must upgrade to initrdCreate for Debian/Ubuntu
|
|
679
688
|
* @returns
|
|
680
689
|
*/
|
|
681
690
|
async initrdCopy(verbose = false) {
|
|
691
|
+
if (this.verbose) {
|
|
692
|
+
console.log('Ovary: initrdCopy');
|
|
693
|
+
}
|
|
682
694
|
let isCrypted = false;
|
|
683
695
|
utils_2.default.warning('initrdCreate');
|
|
684
696
|
if (fs_1.default.existsSync('/etc/crypttab')) {
|
|
@@ -715,7 +727,7 @@ class Ovary {
|
|
|
715
727
|
*/
|
|
716
728
|
async makeSquashfs(scriptOnly = false) {
|
|
717
729
|
if (this.verbose) {
|
|
718
|
-
console.log('
|
|
730
|
+
console.log('Ovary: makeSquashfs');
|
|
719
731
|
}
|
|
720
732
|
/**
|
|
721
733
|
* exclude all the accurence of cryptdisks in rc0.d, etc
|
|
@@ -753,14 +765,17 @@ class Ovary {
|
|
|
753
765
|
fs_1.default.unlinkSync(`${this.settings.iso_work}/live/filesystem.squashfs`);
|
|
754
766
|
}
|
|
755
767
|
const compression = `-comp ${this.settings.config.compression}`;
|
|
756
|
-
//let cmd = `mksquashfs ${this.settings.work_dir.merged} ${this.settings.iso_work}live/filesystem.squashfs ${compression} -wildcards -ef ${this.settings.session_excludes}`
|
|
757
768
|
let cmd = `mksquashfs ${this.settings.work_dir.merged} ${this.settings.iso_work}live/filesystem.squashfs ${compression} -wildcards -ef ${this.settings.config.snapshot_excludes} ${this.settings.session_excludes}`;
|
|
758
769
|
cmd = cmd.replace(/\s\s+/g, ' ');
|
|
759
770
|
utils_2.default.writeX(`${this.settings.work_dir.ovarium}mksquashfs`, cmd);
|
|
760
771
|
if (!scriptOnly) {
|
|
761
772
|
utils_2.default.warning('squashing filesystem: ' + compression);
|
|
762
|
-
await (0, utils_1.exec)(cmd, utils_2.default.setEcho(true));
|
|
773
|
+
const test = (await (0, utils_1.exec)(cmd, utils_2.default.setEcho(true))).code;
|
|
774
|
+
if (test !== 0) {
|
|
775
|
+
process.exit();
|
|
776
|
+
}
|
|
763
777
|
}
|
|
778
|
+
return cmd;
|
|
764
779
|
}
|
|
765
780
|
/**
|
|
766
781
|
* Restituisce true per le direcory da montare con overlay
|
|
@@ -773,7 +788,10 @@ class Ovary {
|
|
|
773
788
|
*
|
|
774
789
|
* @param dir
|
|
775
790
|
*/
|
|
776
|
-
|
|
791
|
+
mergedAndOverlay(dir) {
|
|
792
|
+
if (this.verbose) {
|
|
793
|
+
console.log('Ovary: mergedAndOverlay');
|
|
794
|
+
}
|
|
777
795
|
const mountDirs = ['boot', 'etc', 'usr', 'var'];
|
|
778
796
|
let mountDir = '';
|
|
779
797
|
let overlay = false;
|
|
@@ -792,14 +810,19 @@ class Ovary {
|
|
|
792
810
|
* - normal solo la creazione della directory, nessun mount
|
|
793
811
|
* - merged creazione della directory e mount ro
|
|
794
812
|
* - mergedAndOverlay creazione directory, overlay e mount rw
|
|
813
|
+
* - copied: creazione directory e copia
|
|
795
814
|
*/
|
|
796
815
|
merged(dir) {
|
|
816
|
+
if (this.verbose) {
|
|
817
|
+
console.log('Ovary: merged');
|
|
818
|
+
}
|
|
797
819
|
let merged = true;
|
|
798
820
|
if (dir === 'home') {
|
|
799
821
|
merged = this.clone;
|
|
800
822
|
}
|
|
801
823
|
else {
|
|
802
824
|
const noMergeDirs = [
|
|
825
|
+
'boot',
|
|
803
826
|
'cdrom',
|
|
804
827
|
'dev',
|
|
805
828
|
'media',
|
|
@@ -828,14 +851,14 @@ class Ovary {
|
|
|
828
851
|
*/
|
|
829
852
|
async bindLiveFs() {
|
|
830
853
|
if (this.verbose) {
|
|
831
|
-
console.log('
|
|
854
|
+
console.log('Ovary: bindLiveFs');
|
|
832
855
|
}
|
|
833
856
|
/**
|
|
834
857
|
* Attenzione:
|
|
835
858
|
* fs.readdirSync('/', { withFileTypes: true })
|
|
836
859
|
* viene ignorato da Node8, ma da problemi da Node10 in poi
|
|
837
860
|
*/
|
|
838
|
-
const dirs = fs_1.default.readdirSync('/');
|
|
861
|
+
const dirs = fs_1.default.readdirSync('/'); // we must remove boot and
|
|
839
862
|
const startLine = '#############################################################';
|
|
840
863
|
const titleLine = '# -----------------------------------------------------------';
|
|
841
864
|
const endLine = '# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n';
|
|
@@ -847,36 +870,38 @@ class Ovary {
|
|
|
847
870
|
for (const dir of dirs) {
|
|
848
871
|
cmds.push(startLine);
|
|
849
872
|
if (n8_1.default.isDirectory(dir)) {
|
|
850
|
-
if (dir !== '
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
873
|
+
if (dir !== 'boot') {
|
|
874
|
+
if (dir !== 'lost+found') {
|
|
875
|
+
cmd = `# /${dir} is a directory`;
|
|
876
|
+
if (this.mergedAndOverlay(dir)) {
|
|
877
|
+
/**
|
|
878
|
+
* mergedAndOverlay creazione directory, overlay e mount rw
|
|
879
|
+
*/
|
|
880
|
+
cmds.push(`${cmd} need to be presente, and rw`, titleLine, '# create mountpoint lower');
|
|
881
|
+
cmds.push(await makeIfNotExist(`${this.settings.work_dir.lowerdir}/${dir}`), `# first: mount /${dir} rw in ${this.settings.work_dir.lowerdir}/${dir}`);
|
|
882
|
+
cmds.push(await rexec(`mount --bind --make-slave /${dir} ${this.settings.work_dir.lowerdir}/${dir}`, this.verbose), '# now remount it ro');
|
|
883
|
+
cmds.push(await rexec(`mount -o remount,bind,ro ${this.settings.work_dir.lowerdir}/${dir}`, this.verbose), `\n# second: create mountpoint upper, work and ${this.settings.work_dir.merged} and mount ${dir}`);
|
|
884
|
+
cmds.push(await makeIfNotExist(`${this.settings.work_dir.upperdir}/${dir}`, this.verbose));
|
|
885
|
+
cmds.push(await makeIfNotExist(`${this.settings.work_dir.workdir}/${dir}`, this.verbose));
|
|
886
|
+
cmds.push(await makeIfNotExist(`${this.settings.work_dir.merged}/${dir}`, this.verbose), `\n# thirth: mount /${dir} rw in ${this.settings.work_dir.merged}`);
|
|
887
|
+
cmds.push(await rexec(`mount -t overlay overlay -o lowerdir=${this.settings.work_dir.lowerdir}/${dir},upperdir=${this.settings.work_dir.upperdir}/${dir},workdir=${this.settings.work_dir.workdir}/${dir} ${this.settings.work_dir.merged}/${dir}`, this.verbose));
|
|
888
|
+
}
|
|
889
|
+
else if (this.merged(dir)) {
|
|
890
|
+
/*
|
|
891
|
+
* merged creazione della directory e mount ro
|
|
892
|
+
*/
|
|
893
|
+
cmds.push(`${cmd} need to be present, mount ro`, titleLine);
|
|
894
|
+
cmds.push(await makeIfNotExist(`${this.settings.work_dir.merged}/${dir}`, this.verbose));
|
|
895
|
+
cmds.push(await rexec(`mount --bind --make-slave /${dir} ${this.settings.work_dir.merged}/${dir}`, this.verbose));
|
|
896
|
+
cmds.push(await rexec(`mount -o remount,bind,ro ${this.settings.work_dir.merged}/${dir}`, this.verbose));
|
|
897
|
+
}
|
|
898
|
+
else {
|
|
899
|
+
/**
|
|
900
|
+
* normal solo la creazione della directory, nessun mount
|
|
901
|
+
*/
|
|
902
|
+
cmds.push(`${cmd} need to be present, no mount`, titleLine);
|
|
903
|
+
cmds.push(await makeIfNotExist(`${this.settings.work_dir.merged}/${dir}`, this.verbose), `# mount -o bind /${dir} ${this.settings.work_dir.merged}/${dir}`);
|
|
904
|
+
}
|
|
880
905
|
}
|
|
881
906
|
}
|
|
882
907
|
}
|
|
@@ -909,18 +934,26 @@ class Ovary {
|
|
|
909
934
|
// Utils.writeXs(`${this.settings.config.snapshot_dir}bind`, cmds)
|
|
910
935
|
utils_2.default.writeXs(`${this.settings.work_dir.ovarium}bind`, cmds);
|
|
911
936
|
}
|
|
937
|
+
/**
|
|
938
|
+
* copyBoot
|
|
939
|
+
*/
|
|
940
|
+
async copyBoot() {
|
|
941
|
+
if (this.verbose) {
|
|
942
|
+
console.log('Ovary: copyBoot');
|
|
943
|
+
}
|
|
944
|
+
await rexec(`cp -r /boot ${this.settings.config.snapshot_mnt}filesystem.squashfs`, this.verbose);
|
|
945
|
+
}
|
|
912
946
|
/**
|
|
913
947
|
* ubind del fs live
|
|
914
948
|
* @param verbose
|
|
915
949
|
*/
|
|
916
950
|
async uBindLiveFs() {
|
|
917
951
|
if (this.verbose) {
|
|
918
|
-
console.log('
|
|
952
|
+
console.log('Ovary: uBindLiveFs');
|
|
919
953
|
}
|
|
920
954
|
const cmds = [];
|
|
921
955
|
cmds.push('# NOTE: home, cdrom, dev, live, media, mnt, proc, run, sys and tmp', `# need just to be removed in ${this.settings.work_dir.merged}`);
|
|
922
956
|
cmds.push(`# host: ${node_os_1.default.hostname()} user: ${await utils_2.default.getPrimaryUser()}\n`);
|
|
923
|
-
// await exec(`/usr/bin/pkill mksquashfs; /usr/bin/pkill md5sum`, {echo: true})
|
|
924
957
|
if (fs_1.default.existsSync(this.settings.work_dir.merged)) {
|
|
925
958
|
const bindDirs = fs_1.default.readdirSync(this.settings.work_dir.merged, {
|
|
926
959
|
withFileTypes: true,
|
|
@@ -930,7 +963,7 @@ class Ovary {
|
|
|
930
963
|
cmds.push('#############################################################');
|
|
931
964
|
if (n8_1.default.isDirectory(dirname)) {
|
|
932
965
|
cmds.push(`\n# directory: ${dirname}`);
|
|
933
|
-
if (this.
|
|
966
|
+
if (this.mergedAndOverlay(dirname)) {
|
|
934
967
|
cmds.push(`\n# ${dirname} has overlay`, `\n# First, umount it from ${this.settings.config.snapshot_dir}`);
|
|
935
968
|
cmds.push(await rexec(`umount ${this.settings.work_dir.merged}/${dirname}`, this.verbose), `\n# Second, umount it from ${this.settings.work_dir.lowerdir}`);
|
|
936
969
|
cmds.push(await rexec(`umount ${this.settings.work_dir.lowerdir}/${dirname}`, this.verbose));
|
|
@@ -967,6 +1000,9 @@ class Ovary {
|
|
|
967
1000
|
* bind dei virtual file system
|
|
968
1001
|
*/
|
|
969
1002
|
async bindVfs() {
|
|
1003
|
+
if (this.verbose) {
|
|
1004
|
+
console.log('Ovary: bindVfs');
|
|
1005
|
+
}
|
|
970
1006
|
const cmds = [];
|
|
971
1007
|
cmds.push(`mount -o bind /dev ${this.settings.work_dir.merged}/dev`, `mount -o bind /dev/pts ${this.settings.work_dir.merged}/dev/pts`, `mount -o bind /proc ${this.settings.work_dir.merged}/proc`, `mount -o bind /sys ${this.settings.work_dir.merged}/sys`, `mount -o bind /run ${this.settings.work_dir.merged}/run`);
|
|
972
1008
|
// Utils.writeXs(`${this.settings.config.snapshot_dir}bindvfs`, cmds)
|
|
@@ -977,6 +1013,9 @@ class Ovary {
|
|
|
977
1013
|
* @param verbose
|
|
978
1014
|
*/
|
|
979
1015
|
async ubindVfs() {
|
|
1016
|
+
if (this.verbose) {
|
|
1017
|
+
console.log('Ovary: ubindVfs');
|
|
1018
|
+
}
|
|
980
1019
|
const cmds = [];
|
|
981
1020
|
cmds.push(`umount ${this.settings.work_dir.merged}/dev/pts`, `umount ${this.settings.work_dir.merged}/dev`, `umount ${this.settings.work_dir.merged}/proc`, `umount ${this.settings.work_dir.merged}/run`, `umount ${this.settings.work_dir.merged}/sys`);
|
|
982
1021
|
// Utils.writeXs(`${this.settings.config.snapshot_dir}ubindvfs`, cmds)
|
|
@@ -987,6 +1026,9 @@ class Ovary {
|
|
|
987
1026
|
* @param verbose
|
|
988
1027
|
*/
|
|
989
1028
|
async cleanUsersAccounts() {
|
|
1029
|
+
if (this.verbose) {
|
|
1030
|
+
console.log('Ovary: cleanUsersAccounts');
|
|
1031
|
+
}
|
|
990
1032
|
/**
|
|
991
1033
|
* delete all user in chroot
|
|
992
1034
|
*/
|
|
@@ -1010,13 +1052,14 @@ class Ovary {
|
|
|
1010
1052
|
*/
|
|
1011
1053
|
async createUserLive() {
|
|
1012
1054
|
if (this.verbose) {
|
|
1013
|
-
console.log('
|
|
1055
|
+
console.log('Ovary: createUserLive');
|
|
1014
1056
|
}
|
|
1015
1057
|
const cmds = [];
|
|
1016
1058
|
cmds.push(await rexec('chroot ' + this.settings.work_dir.merged + ' rm /home/' + this.settings.config.user_opt + ' -rf', this.verbose));
|
|
1017
1059
|
cmds.push(await rexec('chroot ' + this.settings.work_dir.merged + ' mkdir /home/' + this.settings.config.user_opt, this.verbose));
|
|
1018
1060
|
cmds.push(await rexec('chroot ' + this.settings.work_dir.merged + ' useradd ' + this.settings.config.user_opt + ' --home-dir /home/' + this.settings.config.user_opt + ' --shell /bin/bash ', this.verbose));
|
|
1019
1061
|
cmds.push(await rexec('chroot ' + this.settings.work_dir.merged + ' cp /etc/skel/. /home/' + this.settings.config.user_opt + ' -R', this.verbose));
|
|
1062
|
+
// da problemi con il mount sshfs
|
|
1020
1063
|
cmds.push(await rexec('chroot ' + this.settings.work_dir.merged + ' chown ' + this.settings.config.user_opt + ':users' + ' /home/' + this.settings.config.user_opt + ' -R', this.verbose));
|
|
1021
1064
|
// live password
|
|
1022
1065
|
cmds.push(await rexec('chroot ' + this.settings.work_dir.merged + ' echo ' + this.settings.config.user_opt + ':' + this.settings.config.user_opt_passwd + '| chroot ' + this.settings.work_dir.merged + ' chpasswd', this.verbose));
|
|
@@ -1051,7 +1094,7 @@ class Ovary {
|
|
|
1051
1094
|
*/
|
|
1052
1095
|
async createXdgAutostart(theme = 'eggs', myAddons, noicons = false) {
|
|
1053
1096
|
if (this.verbose) {
|
|
1054
|
-
console.log('
|
|
1097
|
+
console.log('Ovary: createXdgAutostart');
|
|
1055
1098
|
}
|
|
1056
1099
|
const pathHomeLive = `/home/${this.settings.config.user_opt}`;
|
|
1057
1100
|
if (noicons) { // NO icone
|
|
@@ -1188,6 +1231,9 @@ class Ovary {
|
|
|
1188
1231
|
* @param icon
|
|
1189
1232
|
*/
|
|
1190
1233
|
lxdeLink(file, name, icon) {
|
|
1234
|
+
if (this.verbose) {
|
|
1235
|
+
console.log('Ovary: lxdeLink');
|
|
1236
|
+
}
|
|
1191
1237
|
const lnk = `lnk-${file}`;
|
|
1192
1238
|
let text = '';
|
|
1193
1239
|
text += `echo "[Desktop Entry]" >$DESKTOP/${lnk}\n`;
|
|
@@ -1203,6 +1249,9 @@ class Ovary {
|
|
|
1203
1249
|
* @param exclusion {atring} path to add/remove
|
|
1204
1250
|
*/
|
|
1205
1251
|
addRemoveExclusion(add, exclusion) {
|
|
1252
|
+
if (this.verbose) {
|
|
1253
|
+
console.log('Ovary: addRemoveExclusion');
|
|
1254
|
+
}
|
|
1206
1255
|
if (exclusion.startsWith('/')) {
|
|
1207
1256
|
exclusion = exclusion.slice(1); // remove / initial Non compatible with rsync
|
|
1208
1257
|
}
|
|
@@ -1223,11 +1272,8 @@ class Ovary {
|
|
|
1223
1272
|
// #######################################################################################
|
|
1224
1273
|
async makeEfi(theme = 'eggs') {
|
|
1225
1274
|
if (this.verbose) {
|
|
1226
|
-
console.log('
|
|
1275
|
+
console.log('Ovary: makeEfi');
|
|
1227
1276
|
}
|
|
1228
|
-
// const memdiskDir = this.settings.work_dir.path + 'memdiskDir'
|
|
1229
|
-
// const efiWorkDir = this.settings.efi_work
|
|
1230
|
-
// const isoDir = this.settings.iso_work
|
|
1231
1277
|
const memdiskDir = this.settings.config.snapshot_mnt + 'memdiskDir';
|
|
1232
1278
|
const efiWorkDir = this.settings.efi_work;
|
|
1233
1279
|
const isoDir = this.settings.iso_work;
|
|
@@ -1267,15 +1313,15 @@ class Ovary {
|
|
|
1267
1313
|
}
|
|
1268
1314
|
utils_2.default.warning('creating efiWordDir: ' + efiWorkDir);
|
|
1269
1315
|
await (0, utils_1.exec)(`mkdir ${efiWorkDir}`, this.echo);
|
|
1270
|
-
await (0, utils_1.exec)(`mkdir ${efiWorkDir}
|
|
1271
|
-
await (0, utils_1.exec)(`mkdir ${efiWorkDir}
|
|
1272
|
-
await (0, utils_1.exec)(`mkdir ${efiWorkDir}
|
|
1273
|
-
await (0, utils_1.exec)(`mkdir ${efiWorkDir}
|
|
1274
|
-
await (0, utils_1.exec)(`mkdir ${efiWorkDir}
|
|
1316
|
+
await (0, utils_1.exec)(`mkdir ${efiWorkDir}boot`, this.echo);
|
|
1317
|
+
await (0, utils_1.exec)(`mkdir ${efiWorkDir}boot/grub`, this.echo);
|
|
1318
|
+
await (0, utils_1.exec)(`mkdir ${efiWorkDir}boot/grub/${utils_2.default.machineUEFI()}`, this.echo);
|
|
1319
|
+
await (0, utils_1.exec)(`mkdir ${efiWorkDir}efi`, this.echo);
|
|
1320
|
+
await (0, utils_1.exec)(`mkdir ${efiWorkDir}efi/boot`, this.echo);
|
|
1275
1321
|
/**
|
|
1276
1322
|
* copy splash to efiWorkDir
|
|
1277
1323
|
*/
|
|
1278
|
-
const splashDest = `${efiWorkDir}
|
|
1324
|
+
const splashDest = `${efiWorkDir}boot/grub/splash.png`;
|
|
1279
1325
|
let splashSrc = node_path_1.default.resolve(__dirname, `../../addons/${theme}/theme/livecd/splash.png`);
|
|
1280
1326
|
if (this.theme.includes('/')) {
|
|
1281
1327
|
splashSrc = `${theme}/theme/livecd/splash.png`;
|
|
@@ -1288,7 +1334,7 @@ class Ovary {
|
|
|
1288
1334
|
/**
|
|
1289
1335
|
* copy theme
|
|
1290
1336
|
*/
|
|
1291
|
-
const themeDest = `${efiWorkDir}
|
|
1337
|
+
const themeDest = `${efiWorkDir}boot/grub/theme.cfg`;
|
|
1292
1338
|
let themeSrc = node_path_1.default.resolve(__dirname, `../../addons/${theme}/theme/livecd/grub.theme.cfg`);
|
|
1293
1339
|
if (this.theme.includes('/')) {
|
|
1294
1340
|
themeSrc = `${theme}/theme/livecd/grub.theme.cfg`;
|
|
@@ -1304,10 +1350,10 @@ class Ovary {
|
|
|
1304
1350
|
// for i in $(ls /usr/lib/grub/x86_64-efi |grep part_|grep \.mod|sed 's/.mod//'); do echo "insmod $i" >> boot/grub/x86_64-efi/grub.cfg; done
|
|
1305
1351
|
let cmd = `for i in $(ls /usr/lib/grub/${utils_2.default.machineUEFI()}|grep part_|grep \.mod|sed 's/.mod//'); do echo "insmod $i" >> ${efiWorkDir}boot/grub/${utils_2.default.machineUEFI()}/grub.cfg; done`;
|
|
1306
1352
|
await (0, utils_1.exec)(cmd, this.echo);
|
|
1307
|
-
//
|
|
1308
|
-
cmd = `for i in efi_gop efi_uga ieee1275_fb vbe vga video_bochs video_cirrus jpeg png gfxterm ; do echo "insmod $i" >> ${efiWorkDir}
|
|
1353
|
+
//cmd = `for i in efi_gop efi_uga ieee1275_fb vbe vga video_bochs video_cirrus jpeg png gfxterm ; do echo "insmod $i" >> ${efiWorkDir}boot/grub/${Utils.machineUEFI()}/grub.cfg ; done`
|
|
1354
|
+
cmd = `for i in efi_gop efi_uga ieee1275_fb vbe vga video_bochs video_cirrus jpeg png gfxterm ; do echo "insmod $i" >> ${efiWorkDir}boot/grub/${utils_2.default.machineUEFI()}/grub.cfg ; done`;
|
|
1309
1355
|
await (0, utils_1.exec)(cmd, this.echo);
|
|
1310
|
-
await (0, utils_1.exec)(`echo "source /boot/grub/grub.cfg" >> ${efiWorkDir}
|
|
1356
|
+
await (0, utils_1.exec)(`echo "source /boot/grub/grub.cfg" >> ${efiWorkDir}boot/grub/${utils_2.default.machineUEFI()}/grub.cfg`, this.echo);
|
|
1311
1357
|
/**
|
|
1312
1358
|
* andiamo in memdiskDir
|
|
1313
1359
|
*/
|
|
@@ -1330,41 +1376,41 @@ class Ovary {
|
|
|
1330
1376
|
await (0, utils_1.exec)(`${grubName}-mkimage -O "${utils_2.default.machineUEFI()}" -m "${memdiskDir}/memdisk" -o "${memdiskDir}/bootx64.efi" -p '(memdisk)/boot/grub' search iso9660 configfile normal memdisk tar cat part_msdos part_gpt fat ext2 ntfs ntfscomp hfsplus chain boot linux`, this.echo);
|
|
1331
1377
|
// popd torna in efiWorkDir
|
|
1332
1378
|
// copy the grub image to efi/boot (to go later in the device's root)
|
|
1333
|
-
await (0, utils_1.exec)(`cp ${memdiskDir}/bootx64.efi ${efiWorkDir}
|
|
1379
|
+
await (0, utils_1.exec)(`cp ${memdiskDir}/bootx64.efi ${efiWorkDir}efi/boot`, this.echo);
|
|
1334
1380
|
// #######################
|
|
1335
1381
|
// Do the boot image "boot/grub/efiboot.img"
|
|
1336
|
-
await (0, utils_1.exec)(`dd if=/dev/zero of=${efiWorkDir}
|
|
1337
|
-
await (0, utils_1.exec)(`/sbin/mkdosfs -F 12 ${efiWorkDir}
|
|
1338
|
-
await (0, utils_1.exec)(`mkdir ${efiWorkDir}
|
|
1339
|
-
await (0, utils_1.exec)(`mount -o loop ${efiWorkDir}
|
|
1340
|
-
await (0, utils_1.exec)(`mkdir ${efiWorkDir}
|
|
1341
|
-
await (0, utils_1.exec)(`mkdir ${efiWorkDir}
|
|
1382
|
+
await (0, utils_1.exec)(`dd if=/dev/zero of=${efiWorkDir}boot/grub/efiboot.img bs=1K count=1440`, this.echo);
|
|
1383
|
+
await (0, utils_1.exec)(`/sbin/mkdosfs -F 12 ${efiWorkDir}boot/grub/efiboot.img`, this.echo);
|
|
1384
|
+
await (0, utils_1.exec)(`mkdir ${efiWorkDir}img-mnt`, this.echo);
|
|
1385
|
+
await (0, utils_1.exec)(`mount -o loop ${efiWorkDir}boot/grub/efiboot.img ${efiWorkDir}img-mnt`, this.echo);
|
|
1386
|
+
await (0, utils_1.exec)(`mkdir ${efiWorkDir}img-mnt/efi`, this.echo);
|
|
1387
|
+
await (0, utils_1.exec)(`mkdir ${efiWorkDir}img-mnt/efi/boot`, this.echo);
|
|
1342
1388
|
// era cp -r
|
|
1343
|
-
await (0, utils_1.exec)(`cp ${memdiskDir}/bootx64.efi ${efiWorkDir}
|
|
1389
|
+
await (0, utils_1.exec)(`cp ${memdiskDir}/bootx64.efi ${efiWorkDir}img-mnt/efi/boot`, this.echo);
|
|
1344
1390
|
// #######################
|
|
1345
1391
|
// copy modules and font
|
|
1346
|
-
await (0, utils_1.exec)(`cp -r /usr/lib/grub/${utils_2.default.machineUEFI()}/* ${efiWorkDir}
|
|
1392
|
+
await (0, utils_1.exec)(`cp -r /usr/lib/grub/${utils_2.default.machineUEFI()}/* ${efiWorkDir}boot/grub/${utils_2.default.machineUEFI()}/`, this.echo);
|
|
1347
1393
|
// if this doesn't work try another font from the same place (grub's default, unicode.pf2, is much larger)
|
|
1348
1394
|
// Either of these will work, and they look the same to me. Unicode seems to work with qemu. -fsr
|
|
1349
1395
|
if (fs_1.default.existsSync('/usr/share/grub/font.pf2')) {
|
|
1350
|
-
await (0, utils_1.exec)(`cp /usr/share/grub/font.pf2 ${efiWorkDir}
|
|
1396
|
+
await (0, utils_1.exec)(`cp /usr/share/grub/font.pf2 ${efiWorkDir}boot/grub/font.pf2`, this.echo);
|
|
1351
1397
|
}
|
|
1352
1398
|
else if (fs_1.default.existsSync('/usr/share/grub/unicode.pf2')) {
|
|
1353
|
-
await (0, utils_1.exec)(`cp /usr/share/grub/unicode.pf2 ${efiWorkDir}
|
|
1399
|
+
await (0, utils_1.exec)(`cp /usr/share/grub/unicode.pf2 ${efiWorkDir}boot/grub/font.pf2`, this.echo);
|
|
1354
1400
|
}
|
|
1355
1401
|
else if (fs_1.default.existsSync('/usr/share/grub/ascii.pf2')) {
|
|
1356
|
-
await (0, utils_1.exec)(`cp /usr/share/grub/ascii.pf2 ${efiWorkDir}
|
|
1402
|
+
await (0, utils_1.exec)(`cp /usr/share/grub/ascii.pf2 ${efiWorkDir}boot/grub/font.pf2`, this.echo);
|
|
1357
1403
|
}
|
|
1358
1404
|
// doesn't need to be root-owned
|
|
1359
1405
|
// chown -R 1000:1000 $(pwd) 2>/dev/null
|
|
1360
1406
|
// Cleanup efi temps
|
|
1361
|
-
await (0, utils_1.exec)(`umount ${efiWorkDir}
|
|
1362
|
-
await (0, utils_1.exec)(`rmdir ${efiWorkDir}
|
|
1407
|
+
await (0, utils_1.exec)(`umount ${efiWorkDir}img-mnt`, this.echo);
|
|
1408
|
+
await (0, utils_1.exec)(`rmdir ${efiWorkDir}img-mnt`, this.echo);
|
|
1363
1409
|
await (0, utils_1.exec)(`rm ${memdiskDir}/img-mnt -rf`, this.echo);
|
|
1364
1410
|
// popd
|
|
1365
1411
|
// Copy efi files to iso
|
|
1366
|
-
await (0, utils_1.exec)(`rsync -avx ${efiWorkDir}
|
|
1367
|
-
await (0, utils_1.exec)(`rsync -avx ${efiWorkDir}
|
|
1412
|
+
await (0, utils_1.exec)(`rsync -avx ${efiWorkDir}boot ${isoDir}/`, this.echo);
|
|
1413
|
+
await (0, utils_1.exec)(`rsync -avx ${efiWorkDir}efi ${isoDir}/`, this.echo);
|
|
1368
1414
|
// Do the main grub.cfg (which gets loaded last):
|
|
1369
1415
|
// grub.theme.cfg
|
|
1370
1416
|
let grubThemeSrc = node_path_1.default.resolve(__dirname, `../../addons/${theme}/theme/livecd/grub.theme.cfg`);
|
|
@@ -1404,27 +1450,24 @@ class Ovary {
|
|
|
1404
1450
|
// #######################################################################################
|
|
1405
1451
|
/**
|
|
1406
1452
|
* makeDotDisk
|
|
1407
|
-
* create .disk/info, .disk/mksquashfs, .disk/mkiso
|
|
1408
|
-
* return mkiso
|
|
1409
1453
|
*/
|
|
1410
|
-
makeDotDisk(
|
|
1411
|
-
|
|
1454
|
+
makeDotDisk(info = '', mksquashfs = '', mkisofs = '') {
|
|
1455
|
+
if (this.verbose) {
|
|
1456
|
+
console.log('Ovary: makeDotDisk');
|
|
1457
|
+
}
|
|
1458
|
+
const dotDisk = this.settings.iso_work + '.disk';
|
|
1412
1459
|
if (fs_1.default.existsSync(dotDisk)) {
|
|
1413
1460
|
shelljs_1.default.rm('-rf', dotDisk);
|
|
1414
1461
|
}
|
|
1415
1462
|
shelljs_1.default.mkdir('-p', dotDisk);
|
|
1463
|
+
let text = `# Created at: ${utils_2.default.formatDate(new Date())}\n`;
|
|
1464
|
+
text += `# penguins_eggs v. ${utils_2.default.getPackageVersion()}\n`;
|
|
1416
1465
|
// .disk/info
|
|
1417
|
-
|
|
1418
|
-
let content = utils_2.default.getVolid(this.settings.remix.name);
|
|
1419
|
-
fs_1.default.writeFileSync(file, content, 'utf-8');
|
|
1466
|
+
fs_1.default.writeFileSync(dotDisk + '/info', info, 'utf-8');
|
|
1420
1467
|
// .disk/mksquashfs
|
|
1421
|
-
|
|
1422
|
-
shelljs_1.default.cp(scripts + '/mksquashfs', dotDisk + '/mksquashfs');
|
|
1468
|
+
fs_1.default.writeFileSync(dotDisk + '/mksquashfs', text + mksquashfs, 'utf-8');
|
|
1423
1469
|
// .disk/mkisofs
|
|
1424
|
-
|
|
1425
|
-
file = dotDisk + '/mkisofs';
|
|
1426
|
-
fs_1.default.writeFileSync(file, content, 'utf-8');
|
|
1427
|
-
return content;
|
|
1470
|
+
fs_1.default.writeFileSync(dotDisk + '/mkisofs', text + mkisofs, 'utf-8');
|
|
1428
1471
|
}
|
|
1429
1472
|
/**
|
|
1430
1473
|
*
|
|
@@ -1432,6 +1475,9 @@ class Ovary {
|
|
|
1432
1475
|
* @returns cmd 4 mkiso
|
|
1433
1476
|
*/
|
|
1434
1477
|
xorrisoCommand(clone = false, cryptedclone = false) {
|
|
1478
|
+
if (this.verbose) {
|
|
1479
|
+
console.log('Ovary: xorrisoCommand');
|
|
1480
|
+
}
|
|
1435
1481
|
const volid = utils_2.default.getVolid(this.settings.remix.name);
|
|
1436
1482
|
let prefix = this.settings.config.snapshot_prefix;
|
|
1437
1483
|
if (prefix.endsWith('rolling-')) {
|
|
@@ -1585,7 +1631,7 @@ class Ovary {
|
|
|
1585
1631
|
async makeIso(cmd, scriptOnly = false) {
|
|
1586
1632
|
// echo = { echo: true, ignore: false }
|
|
1587
1633
|
if (this.verbose) {
|
|
1588
|
-
console.log('
|
|
1634
|
+
console.log('Ovary: makeIso');
|
|
1589
1635
|
}
|
|
1590
1636
|
//Utils.writeX(`${this.settings.config.snapshot_dir}mkisofs`, cmd)
|
|
1591
1637
|
utils_2.default.writeX(`${this.settings.work_dir.ovarium}mkisofs`, cmd);
|
|
@@ -1629,6 +1675,9 @@ class Ovary {
|
|
|
1629
1675
|
* fill
|
|
1630
1676
|
*/
|
|
1631
1677
|
async usersFill() {
|
|
1678
|
+
if (this.verbose) {
|
|
1679
|
+
console.log('Ovary: usersFill');
|
|
1680
|
+
}
|
|
1632
1681
|
const usersArray = [];
|
|
1633
1682
|
await (0, promises_1.access)('/etc/passwd', fs_2.constants.R_OK | fs_2.constants.W_OK);
|
|
1634
1683
|
const passwd = fs_1.default.readFileSync('/etc/passwd', 'utf-8').split('\n');
|
|
@@ -1650,7 +1699,7 @@ exports.default = Ovary;
|
|
|
1650
1699
|
*/
|
|
1651
1700
|
async function makeIfNotExist(path, verbose = false) {
|
|
1652
1701
|
if (verbose) {
|
|
1653
|
-
console.log(`
|
|
1702
|
+
console.log(`Ovary: makeIfNotExist(${path})`);
|
|
1654
1703
|
}
|
|
1655
1704
|
const echo = utils_2.default.setEcho(verbose);
|
|
1656
1705
|
let cmd = `# ${path} alreasy exist`;
|
|
@@ -1666,6 +1715,9 @@ async function makeIfNotExist(path, verbose = false) {
|
|
|
1666
1715
|
* @param echo
|
|
1667
1716
|
*/
|
|
1668
1717
|
async function rexec(cmd, verbose = false) {
|
|
1718
|
+
if (verbose) {
|
|
1719
|
+
console.log(`Ovary: rexec(${cmd})`);
|
|
1720
|
+
}
|
|
1669
1721
|
const echo = utils_2.default.setEcho(verbose);
|
|
1670
1722
|
const check = await (0, utils_1.exec)(cmd, echo);
|
|
1671
1723
|
if (!cmd.startsWith('umount')) { // skip umount errors
|
package/dist/classes/pxe.js
CHANGED
|
@@ -50,13 +50,14 @@ class Pxe {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
|
-
this.eggRoot =
|
|
53
|
+
//this.eggRoot = path.dirname(this.settings.config.snapshot_mnt) + '/iso/'
|
|
54
|
+
this.eggRoot = this.settings.config.snapshot_mnt + 'iso/';
|
|
54
55
|
}
|
|
55
|
-
if (!utils_2.default.isLive() && !fs_1.default.existsSync(this.settings.config.
|
|
56
|
+
if (!utils_2.default.isLive() && !fs_1.default.existsSync(this.settings.config.snapshot_mnt)) {
|
|
56
57
|
console.log('no image available, build an image with: sudo eggs produce');
|
|
57
58
|
process.exit();
|
|
58
59
|
}
|
|
59
|
-
this.nest =
|
|
60
|
+
this.nest = this.settings.config.snapshot_mnt;
|
|
60
61
|
this.pxeRoot = this.nest + '/pxe';
|
|
61
62
|
/**
|
|
62
63
|
* se pxeRoot non esiste viene creato
|
|
@@ -81,7 +82,7 @@ class Pxe {
|
|
|
81
82
|
}
|
|
82
83
|
*/
|
|
83
84
|
/**
|
|
84
|
-
* installed: /home/eggs/
|
|
85
|
+
* installed: /home/eggs/mnt/iso/live
|
|
85
86
|
* live: this.iso/live
|
|
86
87
|
*/
|
|
87
88
|
const pathFiles = this.eggRoot + 'live';
|
package/dist/classes/utils.js
CHANGED
package/dist/commands/cuckoo.js
CHANGED
|
@@ -10,7 +10,7 @@ const utils_1 = tslib_1.__importDefault(require("../classes/utils"));
|
|
|
10
10
|
const pxe_1 = tslib_1.__importDefault(require("../classes/pxe"));
|
|
11
11
|
const tftp = require('tftp');
|
|
12
12
|
class Cuckoo extends core_1.Command {
|
|
13
|
-
async run(nest = '/home/eggs') {
|
|
13
|
+
async run(nest = '/home/eggs/mnt') {
|
|
14
14
|
const { args, flags } = await this.parse(Cuckoo);
|
|
15
15
|
utils_1.default.titles(this.id + ' ' + this.argv);
|
|
16
16
|
if (utils_1.default.isRoot()) {
|
|
@@ -9,23 +9,29 @@ const utils_2 = require("./utils");
|
|
|
9
9
|
*/
|
|
10
10
|
async function killMeSoftly(eggsRoot = `/home/eggs`, eggsMnt = '/home/eggs/mnt') {
|
|
11
11
|
const echo = utils_1.default.setEcho(false);
|
|
12
|
+
const liveFs = `${eggsMnt}filesystem.squashfs`;
|
|
13
|
+
/**
|
|
14
|
+
* refuse if /home/eggs/mnt/filesystem.squashfs
|
|
15
|
+
*/
|
|
16
|
+
if (haveBindedDirs(liveFs)) {
|
|
17
|
+
utils_1.default.warning(`You have binded dirs under ${liveFs}, kill is not possible!`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* if eggsMnt is mountpoint
|
|
22
|
+
*/
|
|
12
23
|
if (utils_1.default.isMountpoint(eggsMnt)) {
|
|
13
|
-
|
|
14
|
-
utils_1.default.warning(`You have binded dirs under ${eggsMnt}, kill is not possible!`);
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
// cancello SOLO:
|
|
24
|
+
// Just delete
|
|
18
25
|
await (0, utils_2.exec)(`rm -rf ${eggsMnt}efi-work`);
|
|
19
|
-
await (0, utils_2.exec)(`rm -rf ${eggsMnt}filesystem.squashfs`);
|
|
20
26
|
await (0, utils_2.exec)(`rm -rf ${eggsMnt}iso`);
|
|
21
27
|
await (0, utils_2.exec)(`rm -rf ${eggsMnt}memdiskDir`);
|
|
22
28
|
await (0, utils_2.exec)(`rm -rf ${eggsRoot}ovarium`);
|
|
23
|
-
|
|
29
|
+
// double check !haveBindedDirs
|
|
30
|
+
if (!haveBindedDirs(liveFs)) {
|
|
31
|
+
await (0, utils_2.exec)(`rm -rf ${liveFs}`);
|
|
32
|
+
}
|
|
24
33
|
process.exit(0);
|
|
25
34
|
}
|
|
26
|
-
if (isBinded(eggsRoot)) {
|
|
27
|
-
console.log(`Please, run:\nsudo umount ${eggsRoot}\nbefore to kill`);
|
|
28
|
-
}
|
|
29
35
|
await (0, utils_2.exec)(`rm ${eggsRoot} -rf`, echo);
|
|
30
36
|
}
|
|
31
37
|
exports.default = killMeSoftly;
|
|
@@ -34,7 +40,7 @@ exports.default = killMeSoftly;
|
|
|
34
40
|
* @param path
|
|
35
41
|
* @returns
|
|
36
42
|
*/
|
|
37
|
-
function
|
|
43
|
+
function haveBindedDirs(path) {
|
|
38
44
|
let retVal = false;
|
|
39
45
|
const dirs = [
|
|
40
46
|
'bin',
|