Merge pull request #19170 from dfr/freebsd-mtab
libpod: don't make a broken symlink for /etc/mtab on FreeBSD
This commit is contained in:
commit
d31b9eb9e7
|
@ -1638,18 +1638,8 @@ func (c *Container) mountStorage() (_ string, deferredErr error) {
|
||||||
}
|
}
|
||||||
defer unix.Close(etcInTheContainerFd)
|
defer unix.Close(etcInTheContainerFd)
|
||||||
|
|
||||||
// If /etc/mtab does not exist in container image, then we need to
|
if err := c.makePlatformMtabLink(etcInTheContainerFd, rootUID, rootGID); err != nil {
|
||||||
// create it, so that mount command within the container will work.
|
return "", err
|
||||||
err = unix.Symlinkat("/proc/mounts", etcInTheContainerFd, "mtab")
|
|
||||||
if err != nil && !os.IsExist(err) {
|
|
||||||
return "", fmt.Errorf("creating /etc/mtab symlink: %w", err)
|
|
||||||
}
|
|
||||||
// If the symlink was created, then also chown it to root in the container
|
|
||||||
if err == nil && (rootUID != 0 || rootGID != 0) {
|
|
||||||
err = unix.Fchownat(etcInTheContainerFd, "mtab", rootUID, rootGID, unix.AT_SYMLINK_NOFOLLOW)
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("chown /etc/mtab: %w", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tz := c.Timezone()
|
tz := c.Timezone()
|
||||||
|
|
|
@ -336,3 +336,8 @@ func (s *safeMountInfo) Close() {
|
||||||
func (c *Container) safeMountSubPath(mountPoint, subpath string) (s *safeMountInfo, err error) {
|
func (c *Container) safeMountSubPath(mountPoint, subpath string) (s *safeMountInfo, err error) {
|
||||||
return &safeMountInfo{mountPoint: filepath.Join(mountPoint, subpath)}, nil
|
return &safeMountInfo{mountPoint: filepath.Join(mountPoint, subpath)}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Container) makePlatformMtabLink(etcInTheContainerFd, rootUID, rootGID int) error {
|
||||||
|
// /etc/mtab does not exist on FreeBSD
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -784,3 +784,20 @@ func (c *Container) safeMountSubPath(mountPoint, subpath string) (s *safeMountIn
|
||||||
mountPoint: npath,
|
mountPoint: npath,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Container) makePlatformMtabLink(etcInTheContainerFd, rootUID, rootGID int) error {
|
||||||
|
// If /etc/mtab does not exist in container image, then we need to
|
||||||
|
// create it, so that mount command within the container will work.
|
||||||
|
err := unix.Symlinkat("/proc/mounts", etcInTheContainerFd, "mtab")
|
||||||
|
if err != nil && !os.IsExist(err) {
|
||||||
|
return fmt.Errorf("creating /etc/mtab symlink: %w", err)
|
||||||
|
}
|
||||||
|
// If the symlink was created, then also chown it to root in the container
|
||||||
|
if err == nil && (rootUID != 0 || rootGID != 0) {
|
||||||
|
err = unix.Fchownat(etcInTheContainerFd, "mtab", rootUID, rootGID, unix.AT_SYMLINK_NOFOLLOW)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("chown /etc/mtab: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue