From c4938b55c77e7f559c726a063bb219c9081e38c5 Mon Sep 17 00:00:00 2001 From: jcsiadal Date: Fri, 11 Feb 2022 18:10:32 +0000 Subject: [PATCH] Update to support show correctly Signed-off-by: jcsiadal --- internal/pkg/configure/common.go | 6 ++- internal/pkg/configure/ssh.go | 89 +++++++++++++++++--------------- internal/pkg/configure/tftp.go | 30 ++++++----- 3 files changed, 66 insertions(+), 59 deletions(-) diff --git a/internal/pkg/configure/common.go b/internal/pkg/configure/common.go index 286cd1e1..713e08be 100644 --- a/internal/pkg/configure/common.go +++ b/internal/pkg/configure/common.go @@ -7,8 +7,10 @@ import ( ) func Configure(s string, v bool) error { - fmt.Printf("################################################################################\n") - fmt.Printf("Configuring: %s\n", s) + if !v { + fmt.Printf("################################################################################\n") + fmt.Printf("Configuring: %s\n", s) + } var err error switch s { diff --git a/internal/pkg/configure/ssh.go b/internal/pkg/configure/ssh.go index 00a5f470..cf699253 100644 --- a/internal/pkg/configure/ssh.go +++ b/internal/pkg/configure/ssh.go @@ -12,58 +12,61 @@ import ( ) func configureSSH(show bool) error { - if os.Getuid() == 0 { - fmt.Printf("Updating system keys\n") + if !show { + if os.Getuid() == 0 { + fmt.Printf("Updating system keys\n") - wwkeydir := path.Join(buildconfig.SYSCONFDIR(), "warewulf/keys") + "/" + wwkeydir := path.Join(buildconfig.SYSCONFDIR(), "warewulf/keys") + "/" - err := os.MkdirAll(path.Join(buildconfig.SYSCONFDIR(), "warewulf/keys"), 0755) + err := os.MkdirAll(path.Join(buildconfig.SYSCONFDIR(), "warewulf/keys"), 0755) + if err != nil { + wwlog.Printf(wwlog.ERROR, "Could not create base directory: %s\n", err) + os.Exit(1) + } + + for _, k := range [4]string{"rsa", "dsa", "ecdsa", "ed25519"} { + keytype := "ssh_host_" + k + "_key" + if !util.IsFile(path.Join(wwkeydir, keytype)) { + fmt.Printf("Setting up key: %s\n", keytype) + wwlog.Printf(wwlog.DEBUG, "Creating new %s key\n", keytype) + err = util.ExecInteractive("ssh-keygen", "-q", "-t", k, "-f", path.Join(wwkeydir, keytype), "-C", "", "-N", "") + if err != nil { + wwlog.Printf(wwlog.ERROR, "Failed to exec ssh-keygen: %s\n", err) + return errors.Wrap(err, "failed to exec ssh-keygen command") + } + } else { + fmt.Printf("Skipping, key already exists: %s\n", keytype) + } + } + } else { + fmt.Printf("Updating user's keys\n") + } + + homeDir, err := os.UserHomeDir() if err != nil { - wwlog.Printf(wwlog.ERROR, "Could not create base directory: %s\n", err) + wwlog.Printf(wwlog.ERROR, "Could not obtain the user's home directory: %s\n", err) os.Exit(1) } - for _, k := range [4]string{"rsa", "dsa", "ecdsa", "ed25519"} { - keytype := "ssh_host_" + k + "_key" - if !util.IsFile(path.Join(wwkeydir, keytype)) { - fmt.Printf("Setting up key: %s\n", keytype) - wwlog.Printf(wwlog.DEBUG, "Creating new %s key\n", keytype) - err = util.ExecInteractive("ssh-keygen", "-q", "-t", k, "-f", path.Join(wwkeydir, keytype), "-C", "", "-N", "") - if err != nil { - wwlog.Printf(wwlog.ERROR, "Failed to exec ssh-keygen: %s\n", err) - return errors.Wrap(err, "failed to exec ssh-keygen command") - } - } else { - fmt.Printf("Skipping, key already exists: %s\n", keytype) + authorizedKeys := path.Join(homeDir, "/.ssh/authorized_keys") + rsaPriv := path.Join(homeDir, "/.ssh/id_rsa") + rsaPub := path.Join(homeDir, "/.ssh/id_rsa.pub") + + if !util.IsFile(authorizedKeys) { + fmt.Printf("Setting up: %s\n", authorizedKeys) + err = util.ExecInteractive("ssh-keygen", "-q", "-t", "rsa", "-f", rsaPriv, "-C", "", "-N", "") + if err != nil { + return errors.Wrap(err, "failed to exec ssh-keygen command") } + err := util.CopyFile(rsaPub, authorizedKeys) + if err != nil { + return errors.Wrap(err, "failed to copy keys") + } + } else { + fmt.Printf("Skipping, authorized_keys already exists: %s\n", authorizedKeys) } } else { - fmt.Printf("Updating user's keys\n") + fmt.Printf("'ssh -s' is not yet implemented.\n") } - - homeDir, err := os.UserHomeDir() - if err != nil { - wwlog.Printf(wwlog.ERROR, "Could not obtain the user's home directory: %s\n", err) - os.Exit(1) - } - - authorizedKeys := path.Join(homeDir, "/.ssh/authorized_keys") - rsaPriv := path.Join(homeDir, "/.ssh/id_rsa") - rsaPub := path.Join(homeDir, "/.ssh/id_rsa.pub") - - if !util.IsFile(authorizedKeys) { - fmt.Printf("Setting up: %s\n", authorizedKeys) - err = util.ExecInteractive("ssh-keygen", "-q", "-t", "rsa", "-f", rsaPriv, "-C", "", "-N", "") - if err != nil { - return errors.Wrap(err, "failed to exec ssh-keygen command") - } - err := util.CopyFile(rsaPub, authorizedKeys) - if err != nil { - return errors.Wrap(err, "failed to copy keys") - } - } else { - fmt.Printf("Skipping, authorized_keys already exists: %s\n", authorizedKeys) - } - return nil } diff --git a/internal/pkg/configure/tftp.go b/internal/pkg/configure/tftp.go index 237827e1..9cbbfa31 100644 --- a/internal/pkg/configure/tftp.go +++ b/internal/pkg/configure/tftp.go @@ -15,25 +15,25 @@ import ( var tftpdir string = path.Join(buildconfig.TFTPDIR(), "warewulf") func configureTFTP(show bool) error { - controller, err := warewulfconf.New() - if err != nil { - wwlog.Printf(wwlog.ERROR, "%s\n", err) - os.Exit(1) - } - - err = os.MkdirAll(tftpdir, 0755) - if err != nil { - wwlog.Printf(wwlog.ERROR, "%s\n", err) - os.Exit(1) - } - if !show { + controller, err := warewulfconf.New() + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + return err + } + + err = os.MkdirAll(tftpdir, 0755) + if err != nil { + wwlog.Printf(wwlog.ERROR, "%s\n", err) + return err + } + fmt.Printf("Writing PXE files to: %s\n", tftpdir) for _, f := range [4]string{"x86.efi", "i386.efi", "i386.kpxe", "arm64.efi"} { err = staticfiles.WriteData(path.Join("files/tftp", f), path.Join(tftpdir, f)) if err != nil { wwlog.Printf(wwlog.ERROR, "%s\n", err) - os.Exit(1) + return err } } @@ -41,8 +41,10 @@ func configureTFTP(show bool) error { err = util.SystemdStart(controller.Tftp.SystemdName) if err != nil { wwlog.Printf(wwlog.ERROR, "%s\n", err) - os.Exit(1) + return err } + } else { + fmt.Printf("'tftp -s' is not yet implemented.\n") } return nil