mirror of
https://github.com/EnumeratedDev/bpm.git
synced 2026-09-16 02:26:12 +00:00
Bind mount etc/resolv.conf in package scripts for internet access
This commit is contained in:
+36
-1
@@ -376,9 +376,44 @@ func executePackageScript(pkg, rootDir string, verbose bool, packageScript strin
|
||||
cmd := exec.Command("/bin/bash", "-c", content)
|
||||
// Setup subprocess environment
|
||||
cmd.Dir = "/"
|
||||
// Run hook in chroot if using the -R flag
|
||||
// Run package script in chroot if using the -R flag
|
||||
if rootDir != "/" {
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Chroot: rootDir}
|
||||
|
||||
// Bind mount /etc/resolv.conf
|
||||
mounted, err := func() (bool, error) {
|
||||
if _, err := os.Stat("/etc/resolv.conf"); err != nil {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
if _, err := os.Stat(path.Join(rootDir, "etc/resolv.conf")); os.IsNotExist(err) {
|
||||
err = os.WriteFile(path.Join(rootDir, "/etc/resolv.conf"), nil, 0644)
|
||||
if err != nil {
|
||||
return false, nil
|
||||
}
|
||||
} else if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
mntCmd := exec.Command("mount", "-o", "ro,bind", "/etc/resolv.conf", path.Join(rootDir, "/etc/resolv.conf"))
|
||||
if verbose {
|
||||
mntCmd.Stdout = os.Stdout
|
||||
mntCmd.Stderr = os.Stderr
|
||||
}
|
||||
err = mntCmd.Run()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if mounted {
|
||||
defer exec.Command("umount", "-f", path.Join(rootDir, "/etc/resolv.conf")).Run()
|
||||
}
|
||||
}
|
||||
// Show output if verbose
|
||||
if verbose {
|
||||
|
||||
Reference in New Issue
Block a user