Import tool with package adding support and JSON configs.

This commit is contained in:
root 2025-03-02 18:44:24 -05:00
commit f9f2413e44
3 changed files with 128 additions and 0 deletions

28
goolinux.conf Normal file
View file

@ -0,0 +1,28 @@
system.packages = [ vim, tmux, go, ];
networking = {
hostname = "goolinux";
domain = "goolinux.org";
firewall.enable = true;
firewall = {
allowedPorts = [
22, 80, 443,
4533,
];
}
};
services = {
ssh.enable = true;
proxy.enable = true;
navidrome.enable = true;
navidrome = {
# provider = docker;
src = deluan/navidrome;
ports = [ 4533:4533 ];
volumes = [
/data/docker/navidrome:/data
/data/music:/music:ro
];
};
};

28
goolinux.json Normal file
View file

@ -0,0 +1,28 @@
{
"system": {
"packages": [
"tmux", "vim", "ripgrep",
"go"
]
},
"networking": {
},
"services": {
"proxy": { "enable": "true" },
"ssh": { "enable": "true" },
"navidrome": {
"enable": "true",
"provider": "docker",
"src": "deluan/navidrome",
"ports": [ "4533:4533" ],
"volumes": [
"/data/docker/navidrome:/data",
"/data/music:/music:ro"
]
}
}
}

72
main.go Normal file
View file

@ -0,0 +1,72 @@
package main
import (
"fmt"
"os"
"os/exec"
"github.com/bitly/go-simplejson"
)
func main() {
var err error
fd, err := os.Open("goolinux.json")
defer fd.Close()
if err != nil {
fmt.Println(err)
return
}
userJSON, err := simplejson.NewFromReader(fd)
if err != nil {
fmt.Println(err)
return
}
// Parse services
services := userJSON.Get("services").MustMap()
for service, _ := range services {
s := userJSON.Get("services").Get(service).MustMap()
if s["enable"] == "false" { continue }
fmt.Printf("Service: %s\n", service)
for key, value := range s {
fmt.Printf(" %s: %s\n", key, value)
}
}
// Parse package list
packages := userJSON.Get("system").Get("packages").MustStringArray()
fmt.Println(packages)
// Add extra packages needed
// ...
// Install packages
var installString = []string{"add", "--no-interactive", "--no-progress"}
var testArgs, args []string
var out []byte
testArgs = append(installString, "-s")
testArgs = append(testArgs, packages...)
out, err = exec.Command("/sbin/apk", testArgs...).CombinedOutput()
if err != nil {
fmt.Println("===")
fmt.Println(err)
fmt.Println(string(out))
fmt.Println("===")
fmt.Println("Error preparing packages")
return
}
args = append(installString, packages...)
out, err = exec.Command("/sbin/apk", args...).CombinedOutput()
if err != nil {
fmt.Println("===")
fmt.Println(err)
fmt.Println(string(out))
fmt.Println("===")
fmt.Println("Error installing packages")
return
}
}