mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-24 11:57:44 +08:00
cleaned up ipfs init
This commit is contained in:
parent
e857a5bc9f
commit
7596bcce2d
@ -50,40 +50,112 @@ var initCmd = &cmds.Command{
|
||||
nBitsForKeypair = 4096
|
||||
}
|
||||
|
||||
return nil, doInit(req.Context().ConfigRoot, dspathOverride, force, nBitsForKeypair)
|
||||
return doInit(req.Context().ConfigRoot, dspathOverride, force, nBitsForKeypair)
|
||||
},
|
||||
}
|
||||
|
||||
var errCannotInitConfigExists = errors.New(`ipfs configuration file already exists!
|
||||
Reinitializing would overwrite your keys.
|
||||
(use -f to force overwrite)
|
||||
`)
|
||||
|
||||
var welcomeMsg = `Hello and Welcome to IPFS!
|
||||
|
||||
██╗██████╗ ███████╗███████╗
|
||||
██║██╔══██╗██╔════╝██╔════╝
|
||||
██║██████╔╝█████╗ ███████╗
|
||||
██║██╔═══╝ ██╔══╝ ╚════██║
|
||||
██║██║ ██║ ███████║
|
||||
╚═╝╚═╝ ╚═╝ ╚══════╝
|
||||
|
||||
If you're seeing this, you have successfully installed
|
||||
IPFS and are now interfacing with the ipfs merkledag!
|
||||
|
||||
For a short demo of what you can do, enter 'ipfs tour'
|
||||
`
|
||||
|
||||
// TODO add default welcome hash: eaa68bedae247ed1e5bd0eb4385a3c0959b976e4
|
||||
// NB: if dspath is not provided, it will be retrieved from the config
|
||||
func doInit(configRoot string, dspathOverride string, force bool, nBitsForKeypair int) error {
|
||||
func doInit(configRoot string, dspathOverride string, force bool, nBitsForKeypair int) (interface{}, error) {
|
||||
|
||||
u.POut("initializing ipfs node at %s\n", configRoot)
|
||||
|
||||
configFilename, err := config.Filename(configRoot)
|
||||
if err != nil {
|
||||
return errors.New("Couldn't get home directory path")
|
||||
return nil, errors.New("Couldn't get home directory path")
|
||||
}
|
||||
|
||||
fi, err := os.Lstat(configFilename)
|
||||
if fi != nil || (err != nil && !os.IsNotExist(err)) {
|
||||
if !force {
|
||||
// TODO multi-line string
|
||||
return errors.New("ipfs configuration file already exists!\nReinitializing would overwrite your keys.\n(use -f to force overwrite)")
|
||||
return nil, errCannotInitConfigExists
|
||||
}
|
||||
}
|
||||
|
||||
conf, err := initConfig(configFilename, dspathOverride, nBitsForKeypair)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
nd, err := core.NewIpfsNode(conf, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer nd.Close()
|
||||
|
||||
// Set up default file
|
||||
reader := bytes.NewBufferString(welcomeMsg)
|
||||
|
||||
defnd, err := imp.BuildDagFromReader(reader, nd.DAG, nd.Pinning.GetManual(), chunk.DefaultSplitter)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
k, _ := defnd.Key()
|
||||
fmt.Printf("done.\nto test, enter: ipfs cat %s\n", k)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func datastoreConfig(dspath string) (config.Datastore, error) {
|
||||
ds := config.Datastore{}
|
||||
if len(dspath) == 0 {
|
||||
var err error
|
||||
dspath, err = config.DataStorePath("")
|
||||
if err != nil {
|
||||
return ds, err
|
||||
}
|
||||
}
|
||||
ds.Path = dspath
|
||||
ds.Type = "leveldb"
|
||||
|
||||
// Construct the data store if missing
|
||||
if err := os.MkdirAll(dspath, os.ModePerm); err != nil {
|
||||
return ds, err
|
||||
}
|
||||
|
||||
// Check the directory is writeable
|
||||
if f, err := os.Create(filepath.Join(dspath, "._check_writeable")); err == nil {
|
||||
os.Remove(f.Name())
|
||||
} else {
|
||||
return ds, errors.New("Datastore '" + dspath + "' is not writeable")
|
||||
}
|
||||
|
||||
return ds, nil
|
||||
}
|
||||
|
||||
func initConfig(configFilename string, dspathOverride string, nBitsForKeypair int) (*config.Config, error) {
|
||||
ds, err := datastoreConfig(dspathOverride)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
identity, err := identityConfig(nBitsForKeypair)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
conf := config.Config{
|
||||
conf := &config.Config{
|
||||
|
||||
// setup the node addresses.
|
||||
Addresses: config.Addresses{
|
||||
@ -114,61 +186,11 @@ func doInit(configRoot string, dspathOverride string, force bool, nBitsForKeypai
|
||||
Version: config.VersionDefaultValue(),
|
||||
}
|
||||
|
||||
err = config.WriteConfigFile(configFilename, conf)
|
||||
if err != nil {
|
||||
return err
|
||||
if err := config.WriteConfigFile(configFilename, conf); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
nd, err := core.NewIpfsNode(&conf, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer nd.Close()
|
||||
|
||||
// Set up default file
|
||||
msg := `Hello and Welcome to IPFS!
|
||||
If you're seeing this, that means that you have successfully
|
||||
installed ipfs and are now interfacing with the wonderful
|
||||
world of DAGs and hashes!
|
||||
`
|
||||
reader := bytes.NewBufferString(msg)
|
||||
|
||||
defnd, err := imp.BuildDagFromReader(reader, nd.DAG, nd.Pinning.GetManual(), chunk.DefaultSplitter)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
k, _ := defnd.Key()
|
||||
fmt.Printf("Default file key: %s\n", k)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func datastoreConfig(dspath string) (config.Datastore, error) {
|
||||
ds := config.Datastore{}
|
||||
if len(dspath) == 0 {
|
||||
var err error
|
||||
dspath, err = config.DataStorePath("")
|
||||
if err != nil {
|
||||
return ds, err
|
||||
}
|
||||
}
|
||||
ds.Path = dspath
|
||||
ds.Type = "leveldb"
|
||||
|
||||
// Construct the data store if missing
|
||||
if err := os.MkdirAll(dspath, os.ModePerm); err != nil {
|
||||
return ds, err
|
||||
}
|
||||
|
||||
// Check the directory is writeable
|
||||
if f, err := os.Create(filepath.Join(dspath, "._check_writeable")); err == nil {
|
||||
os.Remove(f.Name())
|
||||
} else {
|
||||
return ds, errors.New("Datastore '" + dspath + "' is not writeable")
|
||||
}
|
||||
|
||||
return ds, nil
|
||||
return conf, nil
|
||||
}
|
||||
|
||||
func identityConfig(nbits int) (config.Identity, error) {
|
||||
@ -178,7 +200,7 @@ func identityConfig(nbits int) (config.Identity, error) {
|
||||
return ident, errors.New("Bitsize less than 1024 is considered unsafe.")
|
||||
}
|
||||
|
||||
fmt.Println("generating key pair...")
|
||||
fmt.Printf("generating key pair...")
|
||||
sk, pk, err := ci.GenerateKeyPair(ci.RSA, nbits)
|
||||
if err != nil {
|
||||
return ident, err
|
||||
|
||||
Loading…
Reference in New Issue
Block a user