github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/cmd/podman/early_init_linux.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"syscall"
     7  
     8  	"github.com/hanks177/podman/v4/libpod/define"
     9  	"github.com/pkg/errors"
    10  )
    11  
    12  func setRLimits() error {
    13  	rlimits := new(syscall.Rlimit)
    14  	rlimits.Cur = define.RLimitDefaultValue
    15  	rlimits.Max = define.RLimitDefaultValue
    16  	if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
    17  		if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
    18  			return errors.Wrapf(err, "error getting rlimits")
    19  		}
    20  		rlimits.Cur = rlimits.Max
    21  		if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
    22  			return errors.Wrapf(err, "error setting new rlimits")
    23  		}
    24  	}
    25  	return nil
    26  }
    27  
    28  func setUMask() {
    29  	// Be sure we can create directories with 0755 mode.
    30  	syscall.Umask(0022)
    31  }
    32  
    33  func earlyInitHook() {
    34  	if err := setRLimits(); err != nil {
    35  		fmt.Fprintf(os.Stderr, "Failed to set rlimits: %s\n", err.Error())
    36  	}
    37  
    38  	setUMask()
    39  }