4 Commits
2.5.0 ... 2.6.0

Author SHA1 Message Date
Clayton Craft
741c0553d5 Allow including initramfs-extra files in the initramfs (MR 48)
This uses a "deviceinfo_create_initfs_extra" to allow including
initramfs-extra files in the initramfs and skip creating a separate
initramfs-extra archive when it's set to "false".
If this variable is unset, mkinitfs uses a default value of "false".
2024-09-27 12:13:24 -07:00
Clayton Craft
cd97df108a filelist: trim whitespace from lines read from files (MR 55)
Fixes issues with leading/trailing whitespaces really messing with mkinitfs
2024-07-11 14:18:55 -07:00
Arnav Singh
1fed057a82 doc: fix spelling typo 2024-06-25 11:26:10 -07:00
Caleb Connolly
5efdb9f170 archive: add /usr/sbin symlinks for UsrMerge (MR 53)
[ci:skip-build]: already built successfully in CI
2024-06-18 23:59:34 +02:00
11 changed files with 67 additions and 38 deletions

View File

@@ -106,30 +106,6 @@ func main() {
modules.New("/usr/share/mkinitfs/modules"), modules.New("/usr/share/mkinitfs/modules"),
modules.New("/etc/mkinitfs/modules"), modules.New("/etc/mkinitfs/modules"),
}) })
if err := initramfsAr.AddItems(initfs); err != nil {
log.Println(err)
log.Println("failed to generate: ", "initramfs")
retCode = 1
return
}
if err := initramfsAr.Write(filepath.Join(workDir, "initramfs"), os.FileMode(0644)); err != nil {
log.Println(err)
log.Println("failed to generate: ", "initramfs")
retCode = 1
return
}
misc.TimeFunc(start, "initramfs")
//
// initramfs-extra
//
// deviceinfo.InitfsExtraCompression needs a little more post-processing
compressionFormat, compressionLevel = archive.ExtractFormatLevel(devinfo.InitfsExtraCompression)
log.Printf("== Generating %s ==\n", "initramfs-extra")
log.Printf("- Using compression format %s with level %q\n", compressionFormat, compressionLevel)
start = time.Now()
initramfsExtraAr := archive.New(compressionFormat, compressionLevel)
initfsExtra := initramfs.New([]filelist.FileLister{ initfsExtra := initramfs.New([]filelist.FileLister{
hookfiles.New("/usr/share/mkinitfs/files-extra"), hookfiles.New("/usr/share/mkinitfs/files-extra"),
hookfiles.New("/etc/mkinitfs/files-extra"), hookfiles.New("/etc/mkinitfs/files-extra"),
@@ -138,19 +114,58 @@ func main() {
modules.New("/usr/share/mkinitfs/modules-extra"), modules.New("/usr/share/mkinitfs/modules-extra"),
modules.New("/etc/mkinitfs/modules-extra"), modules.New("/etc/mkinitfs/modules-extra"),
}) })
if err := initramfsExtraAr.AddItemsExclude(initfsExtra, initfs); err != nil {
if err := initramfsAr.AddItems(initfs); err != nil {
log.Println(err) log.Println(err)
log.Println("failed to generate: ", "initramfs-extra") log.Println("failed to generate: ", "initramfs")
retCode = 1 retCode = 1
return return
} }
if err := initramfsExtraAr.Write(filepath.Join(workDir, "initramfs-extra"), os.FileMode(0644)); err != nil {
// Include initramfs-extra files in the initramfs if not making a separate
// archive
if !devinfo.CreateInitfsExtra {
if err := initramfsAr.AddItems(initfsExtra); err != nil {
log.Println(err)
log.Println("failed to generate: ", "initramfs")
retCode = 1
return
}
}
if err := initramfsAr.Write(filepath.Join(workDir, "initramfs"), os.FileMode(0644)); err != nil {
log.Println(err) log.Println(err)
log.Println("failed to generate: ", "initramfs-extra") log.Println("failed to generate: ", "initramfs")
retCode = 1 retCode = 1
return return
} }
misc.TimeFunc(start, "initramfs-extra") misc.TimeFunc(start, "initramfs")
if devinfo.CreateInitfsExtra {
//
// initramfs-extra
//
// deviceinfo.InitfsExtraCompression needs a little more post-processing
compressionFormat, compressionLevel = archive.ExtractFormatLevel(devinfo.InitfsExtraCompression)
log.Printf("== Generating %s ==\n", "initramfs-extra")
log.Printf("- Using compression format %s with level %q\n", compressionFormat, compressionLevel)
start = time.Now()
initramfsExtraAr := archive.New(compressionFormat, compressionLevel)
if err := initramfsExtraAr.AddItemsExclude(initfsExtra, initfs); err != nil {
log.Println(err)
log.Println("failed to generate: ", "initramfs-extra")
retCode = 1
return
}
if err := initramfsExtraAr.Write(filepath.Join(workDir, "initramfs-extra"), os.FileMode(0644)); err != nil {
log.Println(err)
log.Println("failed to generate: ", "initramfs-extra")
retCode = 1
return
}
misc.TimeFunc(start, "initramfs-extra")
}
// Final processing of initramfs / kernel is done by boot-deploy // Final processing of initramfs / kernel is done by boot-deploy
if !disableBootDeploy { if !disableBootDeploy {

View File

@@ -42,6 +42,7 @@ mkinitfs reads deviceinfo values from */usr/share/deviceinfo/deviceinfo* and
*/etc/deviceinfo*, in that order. The following variables */etc/deviceinfo*, in that order. The following variables
are *required* by mkinitfs: are *required* by mkinitfs:
- deviceinfo_create_initfs_extra
- deviceinfo_generate_systemd_boot - deviceinfo_generate_systemd_boot
- deviceinfo_initfs_compression - deviceinfo_initfs_compression
- deviceinfo_initfs_extra_compression - deviceinfo_initfs_extra_compression
@@ -146,7 +147,7 @@ create/manage. mkinitfs reads configuration from */usr/share/mkinitfs* first, an
## /usr/share/mkinitfs/modules, /etc/mkinitfs/modules ## /usr/share/mkinitfs/modules, /etc/mkinitfs/modules
## /usr/share/mkinitfs/modules-extra, /etc/mkinitfs/modules-extra ## /usr/share/mkinitfs/modules-extra, /etc/mkinitfs/modules-extra
Files with the *.modules* extention in these directories are lists of Files with the *.modules* extension in these directories are lists of
kernel modules to include in the initramfs. Individual modules and kernel modules to include in the initramfs. Individual modules and
directories can be listed in the files here. Globbing is also supported. directories can be listed in the files here. Globbing is also supported.

View File

@@ -421,6 +421,7 @@ func (archive *Archive) writeCpio() error {
archive.addSymlink("/bin", "/bin") archive.addSymlink("/bin", "/bin")
archive.addSymlink("/sbin", "/sbin") archive.addSymlink("/sbin", "/sbin")
archive.addSymlink("/lib", "/lib") archive.addSymlink("/lib", "/lib")
archive.addSymlink("/usr/sbin", "/usr/sbin")
} }
// having a transient function for actually adding files to the archive // having a transient function for actually adding files to the archive
// allows the deferred fd.close to run after every copy and prevent having // allows the deferred fd.close to run after every copy and prevent having

View File

@@ -78,12 +78,17 @@ func (b *BootDeploy) Run() error {
} }
// boot-deploy -i initramfs -k vmlinuz-postmarketos-rockchip -d /tmp/cpio -o /tmp/foo initramfs-extra // boot-deploy -i initramfs -k vmlinuz-postmarketos-rockchip -d /tmp/cpio -o /tmp/foo initramfs-extra
cmd := exec.Command("boot-deploy", args := []string{
"-i", "initramfs", "-i", "initramfs",
"-k", kernFilename, "-k", kernFilename,
"-d", b.inDir, "-d", b.inDir,
"-o", b.outDir, "-o", b.outDir,
"initramfs-extra") }
if b.devinfo.CreateInitfsExtra {
args = append(args, "initramfs-extra")
}
cmd := exec.Command("boot-deploy", args...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr

View File

@@ -44,7 +44,7 @@ func (h *HookDirs) List() (*filelist.FileList, error) {
s := bufio.NewScanner(f) s := bufio.NewScanner(f)
for s.Scan() { for s.Scan() {
dir := s.Text() dir := strings.TrimSpace(s.Text())
if len(dir) == 0 || strings.HasPrefix(dir, "#") { if len(dir) == 0 || strings.HasPrefix(dir, "#") {
continue continue
} }

View File

@@ -59,7 +59,7 @@ func slurpFiles(fd io.Reader) (*filelist.FileList, error) {
s := bufio.NewScanner(fd) s := bufio.NewScanner(fd)
for s.Scan() { for s.Scan() {
line := s.Text() line := strings.TrimSpace(s.Text())
if len(line) == 0 || strings.HasPrefix(line, "#") { if len(line) == 0 || strings.HasPrefix(line, "#") {
continue continue
} }

View File

@@ -83,7 +83,7 @@ func slurpModules(fd io.Reader, modDir string) (*filelist.FileList, error) {
files := filelist.NewFileList() files := filelist.NewFileList()
s := bufio.NewScanner(fd) s := bufio.NewScanner(fd)
for s.Scan() { for s.Scan() {
line := s.Text() line := strings.TrimSpace(s.Text())
if len(line) == 0 || strings.HasPrefix(line, "#") { if len(line) == 0 || strings.HasPrefix(line, "#") {
continue continue
} }
@@ -103,8 +103,8 @@ func slurpModules(fd io.Reader, modDir string) (*filelist.FileList, error) {
} }
} else if dir == "" { } else if dir == "" {
// item is a module name // item is a module name
if modFilelist, err := getModule(s.Text(), modDir); err != nil { if modFilelist, err := getModule(line, modDir); err != nil {
return nil, fmt.Errorf("unable to get module file %q: %w", s.Text(), err) return nil, fmt.Errorf("unable to get module file %q: %w", line, err)
} else { } else {
for _, file := range modFilelist { for _, file := range modFilelist {
files.Add(file, file) files.Add(file, file)
@@ -188,7 +188,7 @@ func getModuleDeps(modName string, modulesDep io.Reader) ([]string, error) {
s := bufio.NewScanner(modulesDep) s := bufio.NewScanner(modulesDep)
for s.Scan() { for s.Scan() {
line := s.Text() line := strings.TrimSpace(s.Text())
if len(line) == 0 || strings.HasPrefix(line, "#") { if len(line) == 0 || strings.HasPrefix(line, "#") {
continue continue
} }

View File

@@ -18,6 +18,7 @@ func TestStripExts(t *testing.T) {
{"another_file", "another_file"}, {"another_file", "another_file"},
{"a.b.c.d.e.f.g.h.i", "a"}, {"a.b.c.d.e.f.g.h.i", "a"},
{"virtio_blk.ko", "virtio_blk"}, {"virtio_blk.ko", "virtio_blk"},
{"virtio_blk.ko ", "virtio_blk"},
} }
for _, table := range tables { for _, table := range tables {
out := stripExts(table.in) out := stripExts(table.in)

View File

@@ -21,6 +21,7 @@ type DeviceInfo struct {
UbootBoardname string UbootBoardname string
GenerateSystemdBoot string GenerateSystemdBoot string
FormatVersion string FormatVersion string
CreateInitfsExtra bool
} }
// Reads the relevant entries from "file" into DeviceInfo struct // Reads the relevant entries from "file" into DeviceInfo struct
@@ -112,6 +113,7 @@ func (d DeviceInfo) String() string {
%s: %v %s: %v
%s: %v %s: %v
%s: %v %s: %v
%s: %v
}`, }`,
"deviceinfo_format_version", d.FormatVersion, "deviceinfo_format_version", d.FormatVersion,
"deviceinfo_", d.FormatVersion, "deviceinfo_", d.FormatVersion,
@@ -120,5 +122,6 @@ func (d DeviceInfo) String() string {
"deviceinfo_ubootBoardname", d.UbootBoardname, "deviceinfo_ubootBoardname", d.UbootBoardname,
"deviceinfo_generateSystemdBoot", d.GenerateSystemdBoot, "deviceinfo_generateSystemdBoot", d.GenerateSystemdBoot,
"deviceinfo_formatVersion", d.FormatVersion, "deviceinfo_formatVersion", d.FormatVersion,
"deviceinfo_createInitfsExtra", d.CreateInitfsExtra,
) )
} }

View File

@@ -42,6 +42,7 @@ func TestNameToField(t *testing.T) {
{"modules_initfs", "ModulesInitfs"}, {"modules_initfs", "ModulesInitfs"},
{"deviceinfo_initfs_compression___", "InitfsCompression"}, {"deviceinfo_initfs_compression___", "InitfsCompression"},
{"deviceinfo_initfs_extra_compression", "InitfsExtraCompression"}, {"deviceinfo_initfs_extra_compression", "InitfsExtraCompression"},
{"deviceinfo_create_initfs_extra", "CreateInitfsExtra"},
} }
for _, table := range tables { for _, table := range tables {
@@ -65,6 +66,7 @@ func TestUnmarshal(t *testing.T) {
UbootBoardname: "foobar-bazz", UbootBoardname: "foobar-bazz",
InitfsCompression: "zstd:--foo=1 -T0 --bar=bazz", InitfsCompression: "zstd:--foo=1 -T0 --bar=bazz",
InitfsExtraCompression: "", InitfsExtraCompression: "",
CreateInitfsExtra: true,
}, },
}, },
} }

View File

@@ -4,3 +4,4 @@ deviceinfo_uboot_boardname="foobar-bazz"
deviceinfo_initfs_compression="zstd:--foo=1 -T0 --bar=bazz" deviceinfo_initfs_compression="zstd:--foo=1 -T0 --bar=bazz"
# empty option # empty option
deviceinfo_initfs_extra_compression="" deviceinfo_initfs_extra_compression=""
deviceinfo_create_initfs_extra="true"