Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d62180f9d6 | ||
|
b7f02ff970 |
@@ -31,7 +31,7 @@ gofmt linting:
|
|||||||
- apk -q update --repository http://dl-4.alpinelinux.org/alpine/edge/testing
|
- apk -q update --repository http://dl-4.alpinelinux.org/alpine/edge/testing
|
||||||
- apk -q add --repository http://dl-4.alpinelinux.org/alpine/edge/testing go staticcheck
|
- apk -q add --repository http://dl-4.alpinelinux.org/alpine/edge/testing go staticcheck
|
||||||
script:
|
script:
|
||||||
- .ci/check_linting.sh
|
- .gitlab-ci/check_linting.sh
|
||||||
|
|
||||||
build:
|
build:
|
||||||
stage: build
|
stage: build
|
||||||
|
108
main.go
108
main.go
@@ -71,14 +71,6 @@ func main() {
|
|||||||
log.Fatal("generateInitfsExtra: ", err)
|
log.Fatal("generateInitfsExtra: ", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := copyUbootFiles(workDir, devinfo); errors.Is(err, os.ErrNotExist) {
|
|
||||||
log.Println("u-boot files copying skipped: ", err)
|
|
||||||
} else {
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal("copyUbootFiles: ", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Final processing of initramfs / kernel is done by boot-deploy
|
// Final processing of initramfs / kernel is done by boot-deploy
|
||||||
if err := bootDeploy(workDir, *outDir); err != nil {
|
if err := bootDeploy(workDir, *outDir); err != nil {
|
||||||
log.Fatal("bootDeploy: ", err)
|
log.Fatal("bootDeploy: ", err)
|
||||||
@@ -94,29 +86,18 @@ func bootDeploy(workDir string, outDir string) error {
|
|||||||
if len(kernels) == 0 {
|
if len(kernels) == 0 {
|
||||||
return errors.New("Unable to find any kernels at " + filepath.Join(outDir, "vmlinuz*"))
|
return errors.New("Unable to find any kernels at " + filepath.Join(outDir, "vmlinuz*"))
|
||||||
}
|
}
|
||||||
|
kernFile, err := os.Open(kernels[0])
|
||||||
// Pick a kernel that does not have suffixes added by boot-deploy
|
|
||||||
var kernFile string
|
|
||||||
for _, f := range kernels {
|
|
||||||
if strings.HasSuffix(f, "-dtb") || strings.HasSuffix(f, "-mtk") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
kernFile = f
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
kernFd, err := os.Open(kernFile)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer kernFd.Close()
|
defer kernFile.Close()
|
||||||
|
|
||||||
kernFileCopy, err := os.Create(filepath.Join(workDir, "vmlinuz"))
|
kernFileCopy, err := os.Create(filepath.Join(workDir, "vmlinuz"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = io.Copy(kernFileCopy, kernFd); err != nil {
|
if _, err = io.Copy(kernFileCopy, kernFile); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
kernFileCopy.Close()
|
kernFileCopy.Close()
|
||||||
@@ -164,9 +145,10 @@ func getHookFiles(filesdir string) misc.StringSet {
|
|||||||
defer f.Close()
|
defer f.Close()
|
||||||
s := bufio.NewScanner(f)
|
s := bufio.NewScanner(f)
|
||||||
for s.Scan() {
|
for s.Scan() {
|
||||||
if err := getFile(files, s.Text(), true); err != nil {
|
if !exists(s.Text()) {
|
||||||
log.Fatalf("Unable to find file %q required by %q", s.Text(), path)
|
log.Fatalf("Unable to find file %q required by %q", s.Text(), path)
|
||||||
}
|
}
|
||||||
|
files[s.Text()] = false
|
||||||
}
|
}
|
||||||
if err := s.Err(); err != nil {
|
if err := s.Err(); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -250,42 +232,13 @@ func getFiles(files misc.StringSet, newFiles misc.StringSet, required bool) erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getFile(files misc.StringSet, file string, required bool) error {
|
func getFile(files misc.StringSet, file string, required bool) error {
|
||||||
// Expand glob expression
|
if !exists(file) {
|
||||||
expanded, _ := filepath.Glob(file)
|
|
||||||
if len(expanded) > 0 && expanded[0] != file {
|
|
||||||
for _, path := range expanded {
|
|
||||||
if err := getFile(files, path, required); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
fileInfo, err := os.Stat(file)
|
|
||||||
if err != nil {
|
|
||||||
if required {
|
if required {
|
||||||
return errors.New("getFile: File does not exist :" + file)
|
return errors.New("getFile: File does not exist :" + file)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if fileInfo.IsDir() {
|
|
||||||
// Recurse over directory contents
|
|
||||||
err := filepath.Walk(file, func(path string, f os.FileInfo, err error) error {
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if f.IsDir() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return getFile(files, path, required)
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
files[file] = false
|
files[file] = false
|
||||||
|
|
||||||
// get dependencies for binaries
|
// get dependencies for binaries
|
||||||
@@ -294,7 +247,8 @@ func getFile(files misc.StringSet, file string, required bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := getBinaryDeps(files, file); err != nil {
|
err := getBinaryDeps(files, file)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -417,7 +371,6 @@ func getInitfsExtraFiles(files misc.StringSet, devinfo deviceinfo.DeviceInfo) er
|
|||||||
log.Println("== Generating initramfs extra ==")
|
log.Println("== Generating initramfs extra ==")
|
||||||
binariesExtra := misc.StringSet{
|
binariesExtra := misc.StringSet{
|
||||||
"/lib/libz.so.1": false,
|
"/lib/libz.so.1": false,
|
||||||
"/sbin/btrfs": false,
|
|
||||||
"/sbin/dmsetup": false,
|
"/sbin/dmsetup": false,
|
||||||
"/sbin/e2fsck": false,
|
"/sbin/e2fsck": false,
|
||||||
"/usr/sbin/parted": false,
|
"/usr/sbin/parted": false,
|
||||||
@@ -450,7 +403,6 @@ func getInitfsFiles(files misc.StringSet, devinfo deviceinfo.DeviceInfo) error {
|
|||||||
"/usr/sbin/telnetd": false,
|
"/usr/sbin/telnetd": false,
|
||||||
"/sbin/kpartx": false,
|
"/sbin/kpartx": false,
|
||||||
"/etc/deviceinfo": false,
|
"/etc/deviceinfo": false,
|
||||||
"/usr/bin/unudhcpd": false,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hook files & scripts
|
// Hook files & scripts
|
||||||
@@ -575,50 +527,6 @@ func getKernelVersion() (string, error) {
|
|||||||
return strings.TrimSpace(string(contents)), nil
|
return strings.TrimSpace(string(contents)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Copy(srcFile, dstFile string) error {
|
|
||||||
out, err := os.Create(dstFile)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
defer out.Close()
|
|
||||||
|
|
||||||
in, err := os.Open(srcFile)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer in.Close()
|
|
||||||
|
|
||||||
_, err = io.Copy(out, in)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func copyUbootFiles(path string, devinfo deviceinfo.DeviceInfo) error {
|
|
||||||
if devinfo.UbootBoardname == "" {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
srcDir := filepath.Join("/usr/share/u-boot", devinfo.UbootBoardname)
|
|
||||||
entries, err := ioutil.ReadDir(srcDir)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
for _, entry := range entries {
|
|
||||||
sourcePath := filepath.Join(srcDir, entry.Name())
|
|
||||||
destPath := filepath.Join(path, entry.Name())
|
|
||||||
|
|
||||||
if err := Copy(sourcePath, destPath); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func generateInitfs(name string, path string, kernVer string, devinfo deviceinfo.DeviceInfo) error {
|
func generateInitfs(name string, path string, kernVer string, devinfo deviceinfo.DeviceInfo) error {
|
||||||
initfsArchive, err := archive.New()
|
initfsArchive, err := archive.New()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -16,7 +16,6 @@ import (
|
|||||||
type DeviceInfo struct {
|
type DeviceInfo struct {
|
||||||
AppendDtb string
|
AppendDtb string
|
||||||
Arch string
|
Arch string
|
||||||
UbootBoardname string
|
|
||||||
BootimgAppendSEAndroidEnforce string
|
BootimgAppendSEAndroidEnforce string
|
||||||
BootimgBlobpack string
|
BootimgBlobpack string
|
||||||
BootimgDtbSecond string
|
BootimgDtbSecond string
|
||||||
|
Reference in New Issue
Block a user