cmd/mkinitfs: simplify archive creation by using filelisters/features
I'm going to rename "filelist" to "feature" soon...
This commit is contained in:
@@ -15,8 +15,10 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/archive"
|
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/archive"
|
||||||
|
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist"
|
||||||
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/hookfiles"
|
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/hookfiles"
|
||||||
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/hookscripts"
|
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/hookscripts"
|
||||||
|
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/initramfs"
|
||||||
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/modules"
|
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/modules"
|
||||||
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/osksdl"
|
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist/osksdl"
|
||||||
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/misc"
|
"gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/misc"
|
||||||
@@ -57,12 +59,26 @@ func main() {
|
|||||||
log.Print("Generating for kernel version: ", kernVer)
|
log.Print("Generating for kernel version: ", kernVer)
|
||||||
log.Print("Output directory: ", *outDir)
|
log.Print("Output directory: ", *outDir)
|
||||||
|
|
||||||
if err := generateInitfs("initramfs", workDir, kernVer, devinfo); err != nil {
|
log.Println("== Generating initramfs ==")
|
||||||
log.Fatal("generateInitfs: ", err)
|
if err := generateArchive("initramfs", workDir, []filelist.FileLister{
|
||||||
|
hookfiles.New("/usr/share/mkinitfs/files"),
|
||||||
|
hookfiles.New("/etc/mkinitfs/files"),
|
||||||
|
hookscripts.New("/usr/share/mkinitfs/hooks"),
|
||||||
|
hookscripts.New("/etc/mkinitfs/hooks"),
|
||||||
|
modules.New(strings.Fields(devinfo.ModulesInitfs)),
|
||||||
|
}); err != nil {
|
||||||
|
log.Fatalf("failed to generate %q: %s\n", "initramfs", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := generateInitfsExtra("initramfs-extra", workDir, devinfo); err != nil {
|
log.Println("== Generating initramfs-extra ==")
|
||||||
log.Fatal("generateInitfsExtra: ", err)
|
if err := generateArchive("initramfs-extra", workDir, []filelist.FileLister{
|
||||||
|
hookfiles.New("/usr/share/mkinitfs/files-extra"),
|
||||||
|
hookfiles.New("/etc/mkinitfs/files-extra"),
|
||||||
|
hookscripts.New("/usr/share/mkinitfs/hooks-extra"),
|
||||||
|
hookscripts.New("/etc/mkinitfs/hooks-extra"),
|
||||||
|
osksdl.New(devinfo.MesaDriver),
|
||||||
|
}); err != nil {
|
||||||
|
log.Fatalf("failed to generate %q: %s\n", "initramfs-extra", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := copyUbootFiles(workDir, devinfo); errors.Is(err, os.ErrNotExist) {
|
if err := copyUbootFiles(workDir, devinfo); errors.Is(err, os.ErrNotExist) {
|
||||||
@@ -136,43 +152,6 @@ func bootDeploy(workDir string, outDir string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getInitfsExtraFiles(devinfo deviceinfo.DeviceInfo) (files []string, err error) {
|
|
||||||
log.Println("== Generating initramfs extra ==")
|
|
||||||
|
|
||||||
// Hook files & scripts
|
|
||||||
if misc.Exists("/etc/mkinitfs/files-extra") {
|
|
||||||
log.Println("- Including hook files")
|
|
||||||
hookFiles := hookfiles.New("/etc/mkinitfs/files-extra")
|
|
||||||
|
|
||||||
if list, err := hookFiles.List(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
} else {
|
|
||||||
files = append(files, list...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if misc.Exists("/etc/mkinitfs/hooks-extra") {
|
|
||||||
log.Println("- Including extra hook scripts")
|
|
||||||
hookScripts := hookscripts.New("/etc/mkinitfs/hooks-extra")
|
|
||||||
|
|
||||||
if list, err := hookScripts.List(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
} else {
|
|
||||||
files = append(files, list...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
osksdlFiles := osksdl.New(devinfo.MesaDriver)
|
|
||||||
if filelist, err := osksdlFiles.List(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
} else if len(filelist) > 0 {
|
|
||||||
log.Println("- Including osk-sdl support")
|
|
||||||
files = append(files, filelist...)
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Copy(srcFile, dstFile string) error {
|
func Copy(srcFile, dstFile string) error {
|
||||||
out, err := os.Create(dstFile)
|
out, err := os.Create(dstFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -217,103 +196,19 @@ func copyUbootFiles(path string, devinfo deviceinfo.DeviceInfo) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateInitfs(name string, path string, kernVer string, devinfo deviceinfo.DeviceInfo) error {
|
func generateArchive(name string, path string, features []filelist.FileLister) error {
|
||||||
initfsArchive, err := archive.New()
|
a, err := archive.New()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("== Generating initramfs ==")
|
fs := initramfs.New(features)
|
||||||
|
if err := a.AddItems(fs); err != nil {
|
||||||
files := []string{}
|
|
||||||
// Hook files & scripts
|
|
||||||
if misc.Exists("/etc/mkinitfs/files") {
|
|
||||||
log.Println("- Including hook files")
|
|
||||||
hookFiles := hookfiles.New("/etc/mkinitfs/files")
|
|
||||||
if list, err := hookFiles.List(); err != nil {
|
|
||||||
return err
|
|
||||||
} else {
|
|
||||||
files = append(files, list...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if misc.Exists("/etc/mkinitfs/hooks") {
|
|
||||||
log.Println("- Including hook scripts")
|
|
||||||
hookScripts := hookscripts.New("/etc/mkinitfs/hooks")
|
|
||||||
|
|
||||||
if list, err := hookScripts.List(); err != nil {
|
|
||||||
return err
|
|
||||||
} else {
|
|
||||||
files = append(files, list...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
items := make(map[string]string)
|
|
||||||
// copy files into a map, where the source(key) and dest(value) are the
|
|
||||||
// same
|
|
||||||
for _, f := range files {
|
|
||||||
items[f] = f
|
|
||||||
}
|
|
||||||
if err := initfsArchive.AddItems(items); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("- Including kernel modules")
|
log.Println("- Writing and verifying archive: ", name)
|
||||||
modules := modules.New(strings.Fields(devinfo.ModulesInitfs))
|
if err := a.Write(filepath.Join(path, name), os.FileMode(0644)); err != nil {
|
||||||
if list, err := modules.List(); err != nil {
|
|
||||||
return err
|
|
||||||
} else {
|
|
||||||
items := make(map[string]string)
|
|
||||||
// copy files into a map, where the source(key) and dest(value) are the
|
|
||||||
// same
|
|
||||||
for _, f := range list {
|
|
||||||
items[f] = f
|
|
||||||
}
|
|
||||||
if err := initfsArchive.AddItems(items); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := initfsArchive.AddItem("/usr/share/postmarketos-mkinitfs/init.sh", "/init"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// initfs_functions
|
|
||||||
if err := initfsArchive.AddItem("/usr/share/mkinitfs/init_functions.sh", "/init_functions.sh"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Println("- Writing and verifying initramfs archive")
|
|
||||||
if err := initfsArchive.Write(filepath.Join(path, name), os.FileMode(0644)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func generateInitfsExtra(name string, path string, devinfo deviceinfo.DeviceInfo) error {
|
|
||||||
initfsExtraArchive, err := archive.New()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if files, err := getInitfsExtraFiles(devinfo); err != nil {
|
|
||||||
return err
|
|
||||||
} else {
|
|
||||||
|
|
||||||
items := make(map[string]string)
|
|
||||||
// copy files into a map, where the source(key) and dest(value) are the
|
|
||||||
// same
|
|
||||||
for _, f := range files {
|
|
||||||
items[f] = f
|
|
||||||
}
|
|
||||||
if err := initfsExtraArchive.AddItems(items); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Println("- Writing and verifying initramfs-extra archive")
|
|
||||||
if err := initfsExtraArchive.Write(filepath.Join(path, name), os.FileMode(0644)); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user