linsk/cmd/root.go

67 lines
2.6 KiB
Go
Raw Normal View History

2023-08-25 15:12:19 +01:00
package cmd
import (
"os"
2023-08-30 09:19:02 +01:00
"path/filepath"
"runtime"
2023-08-25 15:12:19 +01:00
2023-08-25 16:54:58 +01:00
"log/slog"
2023-08-25 15:12:19 +01:00
"github.com/spf13/cobra"
)
var rootCmd = &cobra.Command{
2023-08-29 10:37:52 +01:00
Use: "linsk",
Short: "Access Linux-native file system infrastructure (including LVM and LUKS) on macOS and Linux. Powered by a lightweight Alpine Linux VM and FTP.",
Long: `Linsk is a utility that allows you to access Linux-native file system infrastructure, including device mapping technologies like LVM and LUKS without compromise on other operating systems that have little ` +
`to no support for Linux's wide range of file systems, mainly aiming macOS and Windows. Linsk does not reimplement any file system. Instead, Linsk ` +
`utilizes a lightweight Alpine Linux VM to tap into the native Linux software ecosystem. The files are then exposed to the host via fast and widely-supported FTP, ` +
`operating at near-hardware speeds.`,
2023-08-25 15:12:19 +01:00
}
func Execute() {
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}
2023-08-26 11:27:38 +01:00
var vmDebugFlag bool
2023-08-29 10:00:12 +01:00
var unrestrictedNetworkingFlag bool
2023-08-29 11:51:06 +01:00
var vmMemAllocFlag uint32
var vmSSHSetupTimeoutFlag uint32
var vmOSUpTimeoutFlag uint32
2023-08-30 09:19:02 +01:00
var dataDirFlag string
2023-08-29 10:59:50 +01:00
// TODO: Version command.
2023-08-26 11:27:38 +01:00
2023-08-25 15:12:19 +01:00
func init() {
2023-08-25 16:54:58 +01:00
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, nil)))
2023-08-25 15:12:19 +01:00
rootCmd.AddCommand(lsCmd)
2023-08-25 16:54:58 +01:00
rootCmd.AddCommand(runCmd)
2023-08-26 11:27:38 +01:00
rootCmd.AddCommand(shellCmd)
2023-08-30 09:43:41 +01:00
rootCmd.AddCommand(cleanCmd)
2023-08-26 11:27:38 +01:00
2023-08-29 10:59:50 +01:00
rootCmd.PersistentFlags().BoolVar(&vmDebugFlag, "vmdebug", false, "Enables the VM debug mode. This will open an accessible VM monitor. You can log in with root user and no password.")
rootCmd.PersistentFlags().BoolVar(&unrestrictedNetworkingFlag, "unrestricted-networking", false, "Enables unrestricted networking. This will allow the VM to connect to the internet.")
2023-08-29 11:51:06 +01:00
rootCmd.PersistentFlags().Uint32Var(&vmMemAllocFlag, "vm-mem-alloc", 512, "Specifies the VM memory allocation in KiB")
rootCmd.PersistentFlags().Uint32Var(&vmOSUpTimeoutFlag, "vm-os-up-timeout", 30, "Specifies the VM OS-up timeout in seconds.")
rootCmd.PersistentFlags().Uint32Var(&vmSSHSetupTimeoutFlag, "vm-ssh-setup-timeout", 60, "Specifies the VM SSH server setup timeout in seconds. This cannot be lower than the OS-up timeout.")
2023-08-30 09:19:02 +01:00
defaultDataDir := "linsk-data-dir"
homeDir, err := os.UserHomeDir()
if err != nil {
slog.Error("Failed to get user home directory, will use a local directory as a fallback", "error", err.Error(), "dir", defaultDataDir)
} else {
homeDirName := ".linsk"
if runtime.GOOS == "windows" {
homeDirName = "Linsk"
}
defaultDataDir = filepath.Join(homeDir, homeDirName)
}
rootCmd.PersistentFlags().StringVar(&dataDirFlag, "data-dir", defaultDataDir, "Specifies the data directory (folder) to use. The VM images will be stored here.")
2023-08-25 15:12:19 +01:00
}