pull-through dist server
This commit is contained in:
@ -109,7 +109,7 @@ func qemuImgBootImg(format string) func(out io.Writer, ctx *renderContext) (err
|
|||||||
var grubSupportVersion = flag.String("grub-support", "1.1.0", "GRUB support version")
|
var grubSupportVersion = flag.String("grub-support", "1.1.0", "GRUB support version")
|
||||||
|
|
||||||
func setupBootImage(bootImg *os.File, ctx *renderContext) (err error) {
|
func setupBootImage(bootImg *os.File, ctx *renderContext) (err error) {
|
||||||
path, err := ctx.distFetch("grub-support", *grubSupportVersion)
|
path, err := distFetch("grub-support", *grubSupportVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ func buildBootTar(out io.Writer, ctx *renderContext) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// kernel
|
// kernel
|
||||||
kernelPath, err := ctx.distFetch("kernels", ctx.Host.Kernel)
|
kernelPath, err := distFetch("kernels", ctx.Host.Kernel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -92,7 +92,7 @@ func buildBootEFITar(out io.Writer, ctx *renderContext) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// kernel
|
// kernel
|
||||||
kernelPath, err := ctx.distFetch("kernels", ctx.Host.Kernel)
|
kernelPath, err := distFetch("kernels", ctx.Host.Kernel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ func buildInitrd(out io.Writer, ctx *renderContext) (err error) {
|
|||||||
cat := cpiocat.New(out)
|
cat := cpiocat.New(out)
|
||||||
|
|
||||||
// initrd
|
// initrd
|
||||||
initrdPath, err := ctx.distFetch("initrd", ctx.Host.Initrd)
|
initrdPath, err := distFetch("initrd", ctx.Host.Initrd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@ func buildInitrd(out io.Writer, ctx *renderContext) (err error) {
|
|||||||
case "modules":
|
case "modules":
|
||||||
|
|
||||||
layerVersion := ctx.Host.Versions[layer]
|
layerVersion := ctx.Host.Versions[layer]
|
||||||
modulesPath, err := ctx.distFetch("layers", layer, layerVersion)
|
modulesPath, err := distFetch("layers", layer, layerVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -165,7 +165,7 @@ func buildBootstrap(out io.Writer, ctx *renderContext) (err error) {
|
|||||||
return fmt.Errorf("layer %q not mapped to a version", layer)
|
return fmt.Errorf("layer %q not mapped to a version", layer)
|
||||||
}
|
}
|
||||||
|
|
||||||
outPath, err := ctx.distFetch("layers", layer, layerVersion)
|
outPath, err := distFetch("layers", layer, layerVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func renderKernel(w http.ResponseWriter, r *http.Request, ctx *renderContext) error {
|
func renderKernel(w http.ResponseWriter, r *http.Request, ctx *renderContext) error {
|
||||||
path, err := ctx.distFetch("kernels", ctx.Host.Kernel)
|
path, err := distFetch("kernels", ctx.Host.Kernel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -19,7 +19,7 @@ func renderKernel(w http.ResponseWriter, r *http.Request, ctx *renderContext) er
|
|||||||
}
|
}
|
||||||
|
|
||||||
func fetchKernel(out io.Writer, ctx *renderContext) (err error) {
|
func fetchKernel(out io.Writer, ctx *renderContext) (err error) {
|
||||||
path, err := ctx.distFetch("kernels", ctx.Host.Kernel)
|
path, err := distFetch("kernels", ctx.Host.Kernel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ func main() {
|
|||||||
staticHandler := http.FileServer(http.FS(dlshtml.FS))
|
staticHandler := http.FileServer(http.FS(dlshtml.FS))
|
||||||
http.Handle("/favicon.ico", staticHandler)
|
http.Handle("/favicon.ico", staticHandler)
|
||||||
http.Handle("/ui/", staticHandler)
|
http.Handle("/ui/", staticHandler)
|
||||||
http.Handle("/dist/", http.StripPrefix("/dist/", http.FileServer(http.Dir(*dataDir+"/dist"))))
|
http.Handle("/dist/", http.StripPrefix("/dist/", upstreamServer{}))
|
||||||
|
|
||||||
http.Handle("/public-state", streamsse.StreamHandler(wPublicState))
|
http.Handle("/public-state", streamsse.StreamHandler(wPublicState))
|
||||||
http.Handle("/state", requireAdmin(streamsse.StreamHandler(wState)))
|
http.Handle("/state", requireAdmin(streamsse.StreamHandler(wState)))
|
||||||
|
@ -138,7 +138,7 @@ func (ctx *renderContext) render(templateText string) (ba []byte, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctx *renderContext) distFilePath(path ...string) string {
|
func distFilePath(path ...string) string {
|
||||||
return filepath.Join(append([]string{*dataDir, "dist"}, path...)...)
|
return filepath.Join(append([]string{*dataDir, "dist"}, path...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,9 +9,11 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
gopath "path"
|
gopath "path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/dustin/go-humanize"
|
"github.com/dustin/go-humanize"
|
||||||
@ -22,8 +24,22 @@ var (
|
|||||||
upstreamURL = flag.String("upstream", "https://dkl.novit.io/dist", "Upstream server for dist elements")
|
upstreamURL = flag.String("upstream", "https://dkl.novit.io/dist", "Upstream server for dist elements")
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ctx *renderContext) distFetch(path ...string) (outPath string, err error) {
|
type upstreamServer struct{}
|
||||||
outPath = ctx.distFilePath(path...)
|
|
||||||
|
func (_ upstreamServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||||
|
path := path.Clean(req.URL.Path)
|
||||||
|
outPath, err := distFetch(strings.Split(path, "/")...)
|
||||||
|
if err != nil {
|
||||||
|
w.WriteHeader(http.StatusBadGateway)
|
||||||
|
w.Write([]byte(err.Error() + "\n"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
http.ServeFile(w, req, outPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func distFetch(path ...string) (outPath string, err error) {
|
||||||
|
outPath = distFilePath(path...)
|
||||||
|
|
||||||
if _, err = os.Stat(outPath); err == nil {
|
if _, err = os.Stat(outPath); err == nil {
|
||||||
return
|
return
|
||||||
|
Reference in New Issue
Block a user