31 namespace swissknife {
36 "cvmfs_preload -u <Stratum 0 URL>\n"
37 " -r <alien cache directory>\n"
38 " [-d <path to dirtab file>]\n"
39 " [-k <public key>]\n"
40 " [-m <fully qualified repository name>]\n"
41 " [-n <num of parallel download threads>]\n"
42 " [-t <timeout in seconds (default %d)>]\n"
43 " [-a <number of retries (default %d)>]\n"
44 " [-x <directory for temporary files>]\n\n",
50 "-----BEGIN PUBLIC KEY-----\n"
51 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo8uKvscgW7FNxzb65Uhm\n"
52 "yr8jPJiyrl2kVzb/hhgdfN14C0tCbfFoE6ciuZFg+9ytLeiL9pzM96gSC+atIFl4\n"
53 "7wTgtAFO1W4PtDQBwA/IG2bnwvNrzk19ob0JYhjZlS9tYKeh7TKCub55+vMwcEbP\n"
54 "urzo3WSNCzJngiGMh1vM5iSlGLpCdSGzdwxLGwc1VjRM7q3KAd7M7TJCynKqXZPX\n"
55 "R2xiD6I/p4xv39AnwphCFSmDh0MWE1WeeNHIiiveikvvN+l8d/ZNASIDhKNCsz6o\n"
56 "aFDsGXvjGy7dg43YzjSSYSFGUnONtl5Fe6y4bQZj1LEPbeInW334MAbMwYF4LKma\n"
58 "-----END PUBLIC KEY-----\n";
61 "-----BEGIN PUBLIC KEY-----\n"
62 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzlAraXimfJP5ie0KtDAE\n"
63 "rNUU5d9bzst+kqfhnb0U0OUtmCIbsueaDlbMmTdRSHMr+T0jI8i9CZxJwtxDqll+\n"
64 "UuB3Li2hYBhk0tYTy29JJYvofVULvrw1kMSLKyTWnV30/MHjYxhLHoZWfdepTjVg\n"
65 "lM0rP58K10wR3Z/AaaikOcy4z6P/MHs9ES1jdZqEBQEmmzKw5nf7pfU2QuVWJrKP\n"
66 "wZ9XeYDzipVbMc1zaLEK0slE+bm2ge/Myvuj/rpYKT+6qzbasQg62abGFuOrjgKI\n"
67 "X4/BVnilkhUfH6ssRKw4yehlKG1M5KJje2+y+iVvLbfoaw3g1Sjrf4p3Gq+ul7AC\n"
69 "-----END PUBLIC KEY-----\n";
72 "-----BEGIN PUBLIC KEY-----\n"
73 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqFzLLZAg2xmHJLbbq0+N\n"
74 "eYtjRDghUK5mYhARndnC3skFVowDTiqJVc9dIDX5zuxQ9HyC0iKM1HbvN64IH/Uf\n"
75 "qoXLyZLiXbFwpg6BtEJxwhijdZCiCC5PC//Bb7zSFIVZvWjndujr6ejaY6kx3+jI\n"
76 "sU1HSJ66pqorj+D1fbZCziLcWbS1GzceZ7aTYYPUdGZF1CgjBK5uKrEAoBsPgjWo\n"
77 "+YOEkjskY7swfhUzkCe0YyMyAaS0gsWgYrY2ebrpauFFqKxveKWjDVBTGcwDhiBX\n"
78 "60inUgD6CJXhUpvGHfU8V7Bv6l7dmyzhq/Bk2kRC92TIvxfaHRmS7nuknUY0hW6t\n"
80 "-----END PUBLIC KEY-----\n";
85 for (
unsigned i = 0; i < params.length(); ++i) {
86 char param = params[i];
87 if (args->find(param) == args->end()) {
105 return hash_src != hash_dst;
109 int main(
int argc,
char *argv[]) {
114 args[
'n'].Reset(
new string(
"4"));
116 string option_string =
"u:r:k:m:x:d:n:t:a:vh";
118 while ((c = getopt(argc, argv, option_string.c_str())) != -1) {
119 if ((c ==
'v') || (c ==
'h')) {
123 args[c].Reset(
new string(optarg));
127 string necessary_params =
"ur";
130 printf(
"Argument not included but necessary: -%c\n\n", result);
135 if (args.find(
'm') == args.end()) {
139 args[
'm'].Reset(
new string(fqrn));
142 if (args.find(
'x') == args.end())
143 args[
'x'].Reset(
new string(*args[
'r'] +
"/txn"));
145 const string cache_directory = *args[
'r'];
146 const string fqrn = *args[
'm'];
147 const string dirtab =
148 (args.find(
'd') == args.end()) ?
"/dev/null" : *args[
'd'];
149 const string dirtab_in_cache = cache_directory +
"/dirtab." + fqrn;
152 if (args.find(
't') == args.end())
154 if (args.find(
'a') == args.end())
158 const string& alien_cache_dir = *(args[
'r']);
159 retval =
MkdirDeep(alien_cache_dir, 0770);
162 alien_cache_dir.c_str());
173 string cern_pk_base_path = *args[
'x'];
174 string cern_pk_it1_path = cern_pk_base_path +
"/cern-it1.cern.ch.pub";
175 string cern_pk_it4_path = cern_pk_base_path +
"/cern-it4.cern.ch.pub";
176 string cern_pk_it5_path = cern_pk_base_path +
"/cern-it5.cern.ch.pub";
177 bool keys_created =
false;
178 if (args.find(
'k') == args.end()) {
189 char path_separator =
':';
190 args[
'k'].Reset(
new string(cern_pk_it1_path + path_separator +
191 cern_pk_it4_path + path_separator +
213 cache_directory.c_str());
218 unlink(cern_pk_it1_path.c_str());
219 unlink(cern_pk_it4_path.c_str());
220 unlink(cern_pk_it5_path.c_str());
bool MakeCacheDirectories(const std::string &path, const mode_t mode)
int Main(const ArgumentList &args)
NameString GetFileName(const PathString &path)
bool HashFile(const std::string &filename, Any *any_digest)
assert((mem||(size==0))&&"Out Of Memory")
bool CopyPath2Path(const string &src, const string &dest)
const char gCernIt1PublicKey[]
bool CopyMem2Path(const unsigned char *buffer, const unsigned buffer_size, const string &path)
static char CheckParameters(const string ¶ms, swissknife::ArgumentList *args)
const int kDefaultPreloaderTimeout
bool MkdirDeep(const std::string &path, const mode_t mode, bool verify_writable)
string StringifyInt(const int64_t value)
const char gCernIt5PublicKey[]
static Uuid * Create(const std::string &store_path)
static bool HasDirtabChanged(const string &dirtab_src, const string &dirtab_dst)
std::map< char, SharedPtr< std::string > > ArgumentList
const int kDefaultPreloaderRetries
const char gCernIt4PublicKey[]
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)