From: Colin Patrick McCabe Date: Mon, 14 Mar 2011 14:24:32 +0000 (-0700) Subject: cfuse: set proper defaults X-Git-Tag: v0.26~134 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=df8c00945f8ddb0553b74fe169af70b4e2d202b2;p=ceph.git cfuse: set proper defaults Since cfuse usually runs as a nonprivileged user, its defaults must be a little different from those of the other daemons. Add a flag to common_init which can be used to set unprivileged daemon defaults. SimpleMessenger::start() now just takes a boolean telling it whether to daemonize. It doesn't need to check global variables or other arguments; it just daemonizes if you tell it to; otherwise not. Signed-off-by: Colin McCabe --- diff --git a/src/cauthtool.cc b/src/cauthtool.cc index 7d42fff1a3fa..133e4ddc87da 100644 --- a/src/cauthtool.cc +++ b/src/cauthtool.cc @@ -53,7 +53,7 @@ int main(int argc, const char **argv) env_to_vec(args); DEFINE_CONF_VARS(usage); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); EntityName ename(*g_conf.name); const char *me = argv[0]; diff --git a/src/cconf.cc b/src/cconf.cc index bf0857114c58..7b8a18b1e1ca 100644 --- a/src/cconf.cc +++ b/src/cconf.cc @@ -145,7 +145,7 @@ int main(int argc, const char **argv) } } - common_init(nargs, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(nargs, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); if (do_help) { usage(); diff --git a/src/cfuse.cc b/src/cfuse.cc index aa146ebf41b9..41341ea35251 100644 --- a/src/cfuse.cc +++ b/src/cfuse.cc @@ -53,10 +53,8 @@ int main(int argc, const char **argv, const char *envp[]) { argv_to_vec(argc, argv, args); env_to_vec(args); - g_conf.daemonize = true; - g_conf.pid_file = 0; - g_conf.log_per_instance = true; - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_DAEMON, + CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS); keyring_init(&g_conf); vector nargs; @@ -102,12 +100,9 @@ int main(int argc, const char **argv, const char *envp[]) { } // we need to handle the forking ourselves. - bool daemonize = g_conf.daemonize; - g_conf.daemonize = false; - int fd[2] = {0, 0}; // parent's, child's pid_t childpid = 0; - if (daemonize) { + if (g_conf.daemonize) { int r = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (r < 0) { cerr << "cfuse[" << getpid() << "]: unable to create socketpair: " << strerror(errno) << std::endl; @@ -123,7 +118,7 @@ int main(int argc, const char **argv, const char *envp[]) { cout << "cfuse[" << getpid() << "]: starting ceph client" << std::endl; - messenger->start(); + messenger->start(false); // Do not daemonize here // start client client->init(); @@ -151,7 +146,7 @@ int main(int argc, const char **argv, const char *envp[]) { // wait for messenger to finish messenger->wait(); - if (daemonize) { + if (g_conf.daemonize) { //cout << "child signalling parent with " << r << std::endl; int32_t out = r; int ret = safe_write(fd[1], &out, sizeof(out)); diff --git a/src/cmds.cc b/src/cmds.cc index 6e5d837b7fce..f920cd14391b 100644 --- a/src/cmds.cc +++ b/src/cmds.cc @@ -65,7 +65,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_MDS, CODE_ENVIRONMENT_DAEMON); + common_init(args, CEPH_ENTITY_TYPE_MDS, CODE_ENVIRONMENT_DAEMON, 0); keyring_init(&g_conf); // mds specific args @@ -153,7 +153,7 @@ int main(int argc, const char **argv) messenger->set_policy(entity_name_t::TYPE_CLIENT, SimpleMessenger::Policy::stateful_server(supported, 0)); - messenger->start(); + messenger->start(g_conf.daemonize); // start mds MDS *mds = new MDS(g_conf.name->get_id().c_str(), messenger, &mc); diff --git a/src/cmon.cc b/src/cmon.cc index 06c40e8e32f6..56edc862c602 100644 --- a/src/cmon.cc +++ b/src/cmon.cc @@ -61,7 +61,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_MON, CODE_ENVIRONMENT_DAEMON); + common_init(args, CEPH_ENTITY_TYPE_MON, CODE_ENVIRONMENT_DAEMON, 0); keyring_init(&g_conf); FOR_EACH_ARG(args) { @@ -216,7 +216,7 @@ int main(int argc, const char **argv) messenger->set_default_send_priority(CEPH_MSG_PRIO_HIGH); Monitor *mon = new Monitor(g_conf.name->get_id(), &store, messenger, &monmap); - messenger->start(); // may daemonize + messenger->start(g_conf.daemonize); uint64_t supported = CEPH_FEATURE_UID | diff --git a/src/common/common_init.cc b/src/common/common_init.cc index 8a7e5701e1aa..ccb4216d5f72 100644 --- a/src/common/common_init.cc +++ b/src/common/common_init.cc @@ -86,7 +86,7 @@ int keyring_init(md_config_t *conf) } md_config_t *common_preinit(const CephInitParameters &iparams, - enum code_environment_t code_env) + enum code_environment_t code_env, int flags) { // set code environment g_code_env = code_env; @@ -102,8 +102,10 @@ md_config_t *common_preinit(const CephInitParameters &iparams, switch (code_env) { case CODE_ENVIRONMENT_DAEMON: conf->daemonize = true; - conf->log_dir = strdup("/var/log/ceph"); - conf->pid_file = strdup("/var/run/ceph/$type.$id.pid"); + if (!(flags & CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS)) { + conf->log_dir = strdup("/var/log/ceph"); + conf->pid_file = strdup("/var/run/ceph/$type.$id.pid"); + } conf->log_to_stderr = LOG_TO_STDERR_SOME; break; default: @@ -115,11 +117,11 @@ md_config_t *common_preinit(const CephInitParameters &iparams, } void common_init(std::vector < const char* >& args, - uint32_t module_type, code_environment_t code_env) + uint32_t module_type, code_environment_t code_env, int flags) { CephInitParameters iparams = ceph_argparse_early_args(args, module_type); - md_config_t *conf = common_preinit(iparams, code_env); + md_config_t *conf = common_preinit(iparams, code_env, flags); int ret = conf->parse_config_files(iparams.get_conf_files()); if (ret == -EDOM) { diff --git a/src/common/common_init.h b/src/common/common_init.h index 2980d9f86302..dddf030ea806 100644 --- a/src/common/common_init.h +++ b/src/common/common_init.h @@ -10,10 +10,15 @@ class md_config_t; class CephInitParameters; +enum common_init_flags_t { + // Set up defaults that make sense for an unprivileged deamon + CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS = 0x1, +}; + int keyring_init(md_config_t *conf); md_config_t *common_preinit(const CephInitParameters &iparams, - enum code_environment_t code_env); + enum code_environment_t code_env, int flags); void common_init(std::vector < const char* >& args, - uint32_t module_type, code_environment_t code_env); + uint32_t module_type, code_environment_t code_env, int flags); #endif diff --git a/src/cosd.cc b/src/cosd.cc index d5827cd2249c..02b3bff5168d 100644 --- a/src/cosd.cc +++ b/src/cosd.cc @@ -55,7 +55,7 @@ int main(int argc, const char **argv) env_to_vec(args); vector::iterator args_iter; - common_init(args, CEPH_ENTITY_TYPE_OSD, CODE_ENVIRONMENT_DAEMON); + common_init(args, CEPH_ENTITY_TYPE_OSD, CODE_ENVIRONMENT_DAEMON, 0); ceph_heap_profiler_init(); @@ -269,9 +269,9 @@ int main(int argc, const char **argv) return 1; } - client_messenger->start(); - messenger_hb->start(true); // only need to daemon() once - cluster_messenger->start(true); + client_messenger->start(g_conf.daemonize); + messenger_hb->start(false); // do not daemonize (only need to daemonize once) + cluster_messenger->start(false); // do not daemonize (only need to daemonize once) // start osd err = osd->init(); diff --git a/src/csyn.cc b/src/csyn.cc index 2e73777b4646..e18d9d227696 100644 --- a/src/csyn.cc +++ b/src/csyn.cc @@ -46,7 +46,7 @@ int main(int argc, const char **argv, char *envp[]) vector args; argv_to_vec(argc, argv, args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); keyring_init(&g_conf); parse_syn_options(args); // for SyntheticClient @@ -75,7 +75,7 @@ int main(int argc, const char **argv, char *envp[]) SyntheticClient *syn = new SyntheticClient(client); clients.push_back(client); synclients.push_back(syn); - messengers[i]->start(); + messengers[i]->start(false); // do not daemonize } for (list::iterator p = synclients.begin(); diff --git a/src/dumpjournal.cc b/src/dumpjournal.cc index bba38f663f73..694cb8465233 100644 --- a/src/dumpjournal.cc +++ b/src/dumpjournal.cc @@ -81,7 +81,7 @@ int main(int argc, const char **argv, const char *envp[]) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); vec_to_argv(args, argc, argv); @@ -95,8 +95,7 @@ int main(int argc, const char **argv, const char *envp[]) // start up network SimpleMessenger *messenger = new SimpleMessenger(); messenger->bind(); - g_conf.daemonize = false; // not us! - messenger->start(); + messenger->start(false); // do not daemonize messenger->register_entity(entity_name_t::CLIENT()); messenger->add_dispatcher_head(&dispatcher); diff --git a/src/dupstore.cc b/src/dupstore.cc index ff45ca7673af..37f8c3aa6863 100644 --- a/src/dupstore.cc +++ b/src/dupstore.cc @@ -88,7 +88,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); // args if (args.size() != 4) diff --git a/src/libceph.cc b/src/libceph.cc index d0bdb5c62764..c722f9e9701b 100644 --- a/src/libceph.cc +++ b/src/libceph.cc @@ -45,7 +45,7 @@ extern "C" int ceph_initialize(int argc, const char **argv) argv_to_vec(argc, argv, args); // The libceph API needs to be fixed so that we don't have to call // common_init here. Libraries should never call common_init. - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_LIBRARY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_LIBRARY, 0); keyring_init(&g_conf); //monmap @@ -61,7 +61,7 @@ extern "C" int ceph_initialize(int argc, const char **argv) //at last the client client = new Client(messenger, monclient); - messenger->start(); + messenger->start(false); // do not daemonize client->init(); } diff --git a/src/librados-config.cc b/src/librados-config.cc index 0b2b438c452b..cc07d7d738cb 100644 --- a/src/librados-config.cc +++ b/src/librados-config.cc @@ -57,7 +57,7 @@ int main(int argc, const char **argv) ++i; } - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); FOR_EACH_ARG(args) { usage_exit(); diff --git a/src/librados.cc b/src/librados.cc index 8627288f8fb9..dc509adf5a11 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -567,7 +567,7 @@ connect() messenger->add_dispatcher_head(this); - messenger->start(1); + messenger->start(false); // do not daemonize messenger->add_dispatcher_head(this); dout(1) << "setting wanted keys" << dendl; @@ -2595,7 +2595,7 @@ extern "C" int rados_create(rados_t *pcluster, const char * const id) // TODO: store this conf pointer in the RadosClient and use it as our // configuration - md_config_t *conf = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY); + md_config_t *conf = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0); conf->parse_env(); // environment variables override ++rados_initialized; diff --git a/src/mds/Dumper.cc b/src/mds/Dumper.cc index 2145dfe62754..3b0902a4008e 100644 --- a/src/mds/Dumper.cc +++ b/src/mds/Dumper.cc @@ -56,7 +56,7 @@ void Dumper::init(int rank) messenger->register_entity(entity_name_t::CLIENT()); messenger->add_dispatcher_head(this); - messenger->start(true); + messenger->start(false); // do not daemonize monc->set_want_keys(CEPH_ENTITY_TYPE_MON|CEPH_ENTITY_TYPE_OSD|CEPH_ENTITY_TYPE_MDS); monc->set_messenger(messenger); diff --git a/src/mon/MonClient.cc b/src/mon/MonClient.cc index 73f4a2668703..2946ef2ac9a8 100644 --- a/src/mon/MonClient.cc +++ b/src/mon/MonClient.cc @@ -173,7 +173,7 @@ int MonClient::get_monmap_privately() messenger = smessenger = new SimpleMessenger(); smessenger->register_entity(entity_name_t::CLIENT(-1)); messenger->add_dispatcher_head(this); - smessenger->start(true); // do not daemonize! + smessenger->start(false); // do not daemonize! temp_msgr = true; } diff --git a/src/msg/SimpleMessenger.cc b/src/msg/SimpleMessenger.cc index 23e6b29dce0b..357ba57d1a7e 100644 --- a/src/msg/SimpleMessenger.cc +++ b/src/msg/SimpleMessenger.cc @@ -2406,7 +2406,7 @@ int SimpleMessenger::write_pid_file(int pid) return 0; } -int SimpleMessenger::start(bool nodaemon) +int SimpleMessenger::start(bool daemonize) { // register at least one entity, first! assert(my_type >= 0); @@ -2426,7 +2426,7 @@ int SimpleMessenger::start(bool nodaemon) lock.Unlock(); // daemonize? - if (g_conf.daemonize && !nodaemon) { + if (daemonize) { int num_threads = Thread::get_num_threads(); if (num_threads > 1) { derr << "messenger.start BUG: there are " << num_threads - 1 diff --git a/src/msg/SimpleMessenger.h b/src/msg/SimpleMessenger.h index 1e2eaa047921..4c57ecc95892 100644 --- a/src/msg/SimpleMessenger.h +++ b/src/msg/SimpleMessenger.h @@ -562,7 +562,7 @@ public: int bind(entity_addr_t& bind_addr, int64_t force_nonce = -1); int bind(int64_t force_nonce = -1) { return bind(g_conf.public_addr, force_nonce); } - int start(bool nodaemon = false); + int start(bool daemonize); void wait(); int write_pid_file(int pid); diff --git a/src/osdmaptool.cc b/src/osdmaptool.cc index 3f3871d445a8..05b164e44c86 100644 --- a/src/osdmaptool.cc +++ b/src/osdmaptool.cc @@ -49,7 +49,7 @@ int main(int argc, const char **argv) env_to_vec(args); DEFINE_CONF_VARS(usage); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); const char *me = argv[0]; diff --git a/src/rados.cc b/src/rados.cc index 857a837293d1..30843e761387 100644 --- a/src/rados.cc +++ b/src/rados.cc @@ -98,7 +98,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); keyring_init(&g_conf); vector nargs; diff --git a/src/rbd.cc b/src/rbd.cc index ddafb0b778cf..ebc37a196f05 100644 --- a/src/rbd.cc +++ b/src/rbd.cc @@ -582,7 +582,7 @@ int main(int argc, const char **argv) env_to_vec(args); int opt_cmd = OPT_NO_CMD; - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); keyring_init(&g_conf); const char *poolname = NULL; diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 34d3244ff4c2..e029e7fa8b56 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -91,7 +91,7 @@ int main(int argc, char **argv) argv_to_vec(argc, (const char **)argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); keyring_init(&g_conf); const char *user_id = 0; diff --git a/src/streamtest.cc b/src/streamtest.cc index 367dc18fe5fb..109acc4af184 100644 --- a/src/streamtest.cc +++ b/src/streamtest.cc @@ -97,7 +97,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); keyring_init(&g_conf); // args diff --git a/src/test/TestDoutStreambuf.cc b/src/test/TestDoutStreambuf.cc index ed7cd402e97c..5aa3e5852b95 100644 --- a/src/test/TestDoutStreambuf.cc +++ b/src/test/TestDoutStreambuf.cc @@ -36,7 +36,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); DoutStreambuf *dos = new DoutStreambuf(); diff --git a/src/test/TestSignalHandlers.cc b/src/test/TestSignalHandlers.cc index 64a24fd187c0..2159fabe6d53 100644 --- a/src/test/TestSignalHandlers.cc +++ b/src/test/TestSignalHandlers.cc @@ -94,7 +94,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); DEFINE_CONF_VARS(usage); FOR_EACH_ARG(args) { diff --git a/src/test/TestTimers.cc b/src/test/TestTimers.cc index 1dfb873bc158..f3c9d78a7860 100644 --- a/src/test/TestTimers.cc +++ b/src/test/TestTimers.cc @@ -255,7 +255,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); int ret; Mutex safe_timer_lock("safe_timer_lock"); diff --git a/src/test_trans.cc b/src/test_trans.cc index 706255efc27e..263cef4a5376 100644 --- a/src/test_trans.cc +++ b/src/test_trans.cc @@ -36,7 +36,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); // args if (args.size() < 2) return -1; diff --git a/src/testmsgr.cc b/src/testmsgr.cc index 34e58db0c3ad..8834d2c276b7 100644 --- a/src/testmsgr.cc +++ b/src/testmsgr.cc @@ -70,7 +70,7 @@ int main(int argc, const char **argv, const char *envp[]) { argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); vec_to_argv(args, argc, argv); @@ -96,7 +96,7 @@ int main(int argc, const char **argv, const char *envp[]) { messenger->set_default_send_priority(CEPH_MSG_PRIO_HIGH); messenger->add_dispatcher_head(&dispatcher); - rank->start(); + rank->start(false); // do not daemonize int isend = 0; if (whoami == 0) diff --git a/src/tools/ceph.cc b/src/tools/ceph.cc index 6e52a960d0e6..e024a07f10fc 100644 --- a/src/tools/ceph.cc +++ b/src/tools/ceph.cc @@ -114,7 +114,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); keyring_init(&g_conf); vec_to_argv(args, argc, argv); diff --git a/src/tools/common.cc b/src/tools/common.cc index 66356f05d35c..6579843ced7f 100644 --- a/src/tools/common.cc +++ b/src/tools/common.cc @@ -553,7 +553,7 @@ int ceph_tool_common_init(ceph_tool_mode_t mode) // start up network messenger = new SimpleMessenger(); messenger->register_entity(entity_name_t::CLIENT()); - messenger->start(); + messenger->start(false); // do not daemonize messenger->add_dispatcher_head(&dispatcher); g.lock.Lock(); diff --git a/src/tools/gceph.cc b/src/tools/gceph.cc index a37a729eb170..105de642bfee 100644 --- a/src/tools/gceph.cc +++ b/src/tools/gceph.cc @@ -75,7 +75,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); - common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY); + common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); keyring_init(&g_conf); vec_to_argv(args, argc, argv);