fix(init): log to kmsg after /dev is mounted (#218)

This commit is contained in:
Andrew Rynhard 2018-11-17 11:35:04 -08:00 committed by GitHub
parent f00e05af08
commit fde2639c97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 14 deletions

View File

@ -6,6 +6,7 @@ import "C"
import (
"flag"
"fmt"
"log"
"os"
@ -17,11 +18,8 @@ import (
"github.com/autonomy/talos/src/initramfs/cmd/init/pkg/system"
"github.com/autonomy/talos/src/initramfs/cmd/init/pkg/system/services"
"github.com/autonomy/talos/src/initramfs/pkg/userdata"
)
const (
prefix = "[talos] "
flags = 0
"golang.org/x/sys/unix"
)
var (
@ -38,24 +36,32 @@ func recovery() {
}
func init() {
out, err := os.OpenFile("/dev/kmsg", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
log.SetOutput(out)
log.SetPrefix(prefix)
log.SetFlags(flags)
switchRoot = flag.Bool("switch-root", false, "perform a switch_root")
flag.Parse()
}
func kmsg(prefix string) error {
out, err := os.OpenFile("/dev/kmsg", os.O_RDWR|unix.O_CLOEXEC|unix.O_NONBLOCK|unix.O_NOCTTY, 0666)
if err != nil {
return fmt.Errorf("failed to open /dev/kmsg: %v", err)
}
log.SetOutput(out)
log.SetPrefix(prefix + " ")
log.SetFlags(0)
return nil
}
func initram() (err error) {
// Read the block devices and populate the mount point definitions.
log.Println("initializing mount points")
if err = mount.Init(constants.NewRoot); err != nil {
return
}
// Setup logging to /dev/kmsg.
// NB: We should not attempt to open /dev/kmsg until after /dev is mounted.
if err = kmsg("[talos] [initramfs]"); err != nil {
return
}
// Discover the platform.
log.Println("discovering the platform")
p, err := platform.NewPlatform()
@ -93,6 +99,10 @@ func initram() (err error) {
}
func root() (err error) {
// Setup logging to /dev/kmsg.
if err = kmsg("[talos]"); err != nil {
return
}
// Read the user data.
log.Printf("reading the user data: %s\n", constants.UserDataPath)
data, err := userdata.Open(constants.UserDataPath)

View File

@ -12,6 +12,8 @@ import (
"github.com/autonomy/talos/src/initramfs/cmd/init/pkg/system/runner"
processlogger "github.com/autonomy/talos/src/initramfs/cmd/init/pkg/system/runner/process/log"
"github.com/autonomy/talos/src/initramfs/pkg/userdata"
"golang.org/x/sys/unix"
)
// Process is a runner.Runner that runs a process on the host.
@ -53,7 +55,7 @@ func (p *Process) build(data *userdata.UserData, args *runner.Args, opts *runner
var writer io.Writer
if data.Debug {
out, err := os.OpenFile("/dev/kmsg", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
out, err := os.OpenFile("/dev/kmsg", os.O_RDWR|unix.O_CLOEXEC|unix.O_NONBLOCK|unix.O_NOCTTY, 0666)
if err != nil {
return nil, err
}