X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fvcopy-init.hc;fp=src%2Fvcopy-init.hc;h=51db03a07b61835c28d6338f4b02dee87bc72821;hb=3f3cf95f755f3ef1c31ad8e38153deb4ee214c66;hp=0000000000000000000000000000000000000000;hpb=bfa4b37aaa195007a09bc166e8c8563d5a3c2ef1;p=util-vserver.git diff --git a/src/vcopy-init.hc b/src/vcopy-init.hc new file mode 100644 index 0000000..51db03a --- /dev/null +++ b/src/vcopy-init.hc @@ -0,0 +1,115 @@ +// $Id: vcopy-init.hc,v 1.3 2005/03/18 00:24:27 ensc Exp $ --*- c -*-- + +// Copyright (C) 2004 Enrico Scholz +// +// This program 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; version 2 of the License. +// +// This program 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 this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +static void +createSkeleton(char const *name) +{ + char const * app_dir; + + app_dir = vc_getVserverAppDir(name, vcCFG_AUTO, "vunify"); + if (app_dir==0 && + vc_createSkeleton(name, vcCFG_AUTO, vcSKEL_FILESYSTEM|vcSKEL_PKGMGMT)==-1) { + perror("vc_createSkeleton()"); + exit(1); + } + + if (app_dir==0) { + app_dir = vc_getVserverAppDir(name, vcCFG_AUTO, ""); + + PathInfo path = { + .d = app_dir, + .l = strlen(app_dir), + }; + PathInfo rhs_path = { + .d = "vunify", + .l = sizeof("vunify")-1 + }; + + char p_buf[ENSC_PI_APPSZ(path, rhs_path)]; + PathInfo_append(&path, &rhs_path, p_buf); + + Emkdir(path.d, 0755); + } + + free(const_cast(char *)(app_dir)); +} + + +static void +initModeManually(int argc, char *argv[]) +{ + int count=argc/2; + + if (count!=2) { + WRITE_MSG(2, "Bad arguments; try '--help' for more information\n"); + exit(1); + } + + MatchList_initManually(&global_info.dst_list, 0, strdup(argv[0]), argv[1]); + MatchList_initManually(&global_info.src_list, 0, strdup(argv[2]), argv[3]); +} + + +static void +initModeVserver(int argc, char *argv[]) +{ + int count = argc; + struct MatchVserverInfo src_vserver = { + .name = argv[1], + .use_pkgmgmt = true + }; + + if (!MatchVserverInfo_init(&src_vserver)) { + WRITE_MSG(2, "Failed to initialize unification for source-vserver\n"); + exit(1); + } + + if (count!=2) { + WRITE_MSG(2, "Bad arguments; try '--help' for more information\n"); + exit(1); + } + + if (!MatchList_initByVserver(&global_info.src_list, &src_vserver)) { + WRITE_MSG(2, "unification not configured for source vserver\n"); + exit(1); + } + + MatchVserverInfo_free(&src_vserver); + + + + struct MatchVserverInfo dst_vserver = { + .name = argv[0], + .use_pkgmgmt = false + }; + + if (!global_args->is_strict) + createSkeleton(dst_vserver.name); + + if (!MatchVserverInfo_init(&dst_vserver)) { + WRITE_MSG(2, "Failed to initialize unification for destination-vserver\n"); + exit(1); + } + + if (!MatchList_initByVserver(&global_info.dst_list, &dst_vserver)) { + WRITE_MSG(2, "unification not configured for destination vserver\n"); + exit(1); + } + + MatchVserverInfo_free(&dst_vserver); +}