2009-11-18 02:42:52 +03:00
/*-*- Mode: C; c-basic-offset: 8 -*-*/
2010-02-03 15:03:47 +03:00
/***
This file is part of systemd .
Copyright 2010 Lennart Poettering
systemd is free software ; you can redistribute it and / or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
systemd is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
General Public License for more details .
You should have received a copy of the GNU General Public License
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
2010-02-01 05:33:24 +03:00
# include <dbus/dbus.h>
2009-11-18 02:42:52 +03:00
# include <stdio.h>
# include <errno.h>
# include <string.h>
2010-01-20 21:19:53 +03:00
# include <unistd.h>
2010-04-06 23:59:25 +04:00
# include <sys/types.h>
# include <sys/stat.h>
2009-11-18 02:42:52 +03:00
# include "manager.h"
2010-01-20 21:19:53 +03:00
# include "log.h"
2010-04-06 23:59:25 +04:00
# include "mount-setup.h"
2009-11-18 02:42:52 +03:00
int main ( int argc , char * argv [ ] ) {
Manager * m = NULL ;
2010-01-26 23:39:06 +03:00
Unit * target = NULL ;
2009-11-18 02:42:52 +03:00
Job * job = NULL ;
int r , retval = 1 ;
2010-04-05 00:49:26 +04:00
const char * default_unit ;
if ( argc > = 2 )
default_unit = argv [ 1 ] ;
else
default_unit = SPECIAL_DEFAULT_TARGET ;
2009-11-18 02:42:52 +03:00
2010-04-06 23:59:25 +04:00
/* Move out of the way, so that we won't block unmounts */
assert_se ( chdir ( " / " ) = = 0 ) ;
/* Reset all signal handlers. */
assert_se ( reset_all_signal_handlers ( ) = = 0 ) ;
/* Become a session leader if we aren't one yet. */
setsid ( ) ;
/* Disable the umask logic */
umask ( 0 ) ;
/* Make sure D-Bus doesn't fiddle with the SIGPIPE handlers */
dbus_connection_set_change_sigpipe ( FALSE ) ;
/* Mount /dev, /sys and friends */
mount_setup ( ) ;
/* Set up logging */
log_set_target ( LOG_TARGET_CONSOLE ) ;
/* Open the logging devices, if possible and necessary*/
log_open_syslog ( ) ;
log_open_kmsg ( ) ;
2010-03-31 18:29:55 +04:00
if ( ( r = manager_new ( & m ) ) < 0 ) {
log_error ( " Failed to allocate manager object: %s " , strerror ( - r ) ) ;
2009-11-18 02:42:52 +03:00
goto finish ;
}
2010-01-29 05:18:09 +03:00
if ( ( r = manager_coldplug ( m ) ) < 0 ) {
log_error ( " Failed to retrieve coldplug information: %s " , strerror ( - r ) ) ;
goto finish ;
}
2010-04-05 00:49:26 +04:00
log_debug ( " Activating default unit: %s " , default_unit ) ;
if ( ( r = manager_load_unit ( m , default_unit , & target ) ) < 0 ) {
2010-01-26 21:06:50 +03:00
log_error ( " Failed to load default target: %s " , strerror ( - r ) ) ;
2009-11-18 02:42:52 +03:00
goto finish ;
}
2010-01-28 04:44:47 +03:00
printf ( " → By units: \n " ) ;
manager_dump_units ( m , stdout , " \t " ) ;
2010-01-27 02:20:21 +03:00
if ( ( r = manager_add_job ( m , JOB_START , target , JOB_REPLACE , false , & job ) ) < 0 ) {
log_error ( " Failed to start default target: %s " , strerror ( - r ) ) ;
goto finish ;
}
2010-01-19 06:15:20 +03:00
2010-01-26 09:02:51 +03:00
printf ( " → By jobs: \n " ) ;
2010-01-20 06:02:39 +03:00
manager_dump_jobs ( m , stdout , " \t " ) ;
2010-01-29 06:26:30 +03:00
if ( ( r = manager_loop ( m ) ) < 0 ) {
log_error ( " Failed to run mainloop: %s " , strerror ( - r ) ) ;
goto finish ;
}
2010-01-24 02:39:29 +03:00
2009-11-18 02:42:52 +03:00
retval = 0 ;
finish :
if ( m )
manager_free ( m ) ;
2010-01-27 06:36:30 +03:00
log_debug ( " Exit. " ) ;
2010-02-01 05:33:24 +03:00
dbus_shutdown ( ) ;
2009-11-18 02:42:52 +03:00
return retval ;
}