configure.ac 13.4 KB
Newer Older
1
# Configure script for Ganeti
2
m4_define([gnt_version_major], [2])
3
4
m4_define([gnt_version_minor], [4])
m4_define([gnt_version_revision], [0])
Iustin Pop's avatar
Iustin Pop committed
5
m4_define([gnt_version_suffix], [])
6
7
8
9
10
m4_define([gnt_version_full],
          m4_format([%d.%d.%d%s],
                    gnt_version_major, gnt_version_minor,
                    gnt_version_revision, gnt_version_suffix))

Iustin Pop's avatar
Iustin Pop committed
11
AC_PREREQ(2.59)
12
AC_INIT(ganeti, gnt_version_full, ganeti@googlegroups.com)
13
AC_CONFIG_AUX_DIR(autotools)
Michael Hanselmann's avatar
Michael Hanselmann committed
14
AC_CONFIG_SRCDIR(configure)
15
AM_INIT_AUTOMAKE([1.9 foreign tar-ustar -Wall -Wno-portability])
Iustin Pop's avatar
Iustin Pop committed
16

17
18
19
20
21
22
AC_SUBST([VERSION_MAJOR], gnt_version_major)
AC_SUBST([VERSION_MINOR], gnt_version_minor)
AC_SUBST([VERSION_REVISION], gnt_version_revision)
AC_SUBST([VERSION_SUFFIX], gnt_version_suffix)
AC_SUBST([VERSION_FULL], gnt_version_full)

23
24
# --with-ssh-initscript=...
AC_ARG_WITH([ssh-initscript],
25
  [AS_HELP_STRING([--with-ssh-initscript=SCRIPT],
26
27
    [SSH init script to use (default is /etc/init.d/ssh)]
  )],
28
29
30
  [ssh_initd_script="$withval"],
  [ssh_initd_script="/etc/init.d/ssh"])
AC_SUBST(SSH_INITD_SCRIPT, $ssh_initd_script)
31

32
33
34
# --with-export-dir=...
AC_ARG_WITH([export-dir],
  [AS_HELP_STRING([--with-export-dir=DIR],
35
36
    [directory to use by default for instance image]
    [ exports (default is /srv/ganeti/export)]
37
38
39
40
41
  )],
  [export_dir="$withval"],
  [export_dir="/srv/ganeti/export"])
AC_SUBST(EXPORT_DIR, $export_dir)

42
43
44
45
46
47
48
49
50
51
# --with-ssh-config-dir=...
AC_ARG_WITH([ssh-config-dir],
  [AS_HELP_STRING([--with-ssh-config-dir=DIR],
    [ directory with ssh host keys ]
    [ (default is /etc/ssh)]
  )],
  [ssh_config_dir="$withval"],
  [ssh_config_dir="/etc/ssh"])
AC_SUBST(SSH_CONFIG_DIR, $ssh_config_dir)

52
53
54
55
# --with-os-search-path=...
# do a bit of black sed magic to for quoting of the strings in the list
AC_ARG_WITH([os-search-path],
  [AS_HELP_STRING([--with-os-search-path=LIST],
56
57
    [comma separated list of directories to]
    [ search for OS images (default is /srv/ganeti/os)]
58
59
60
61
62
  )],
  [os_search_path=`echo -n "$withval" | sed -e "s/\([[^,]]*\)/'\1'/g"`],
  [os_search_path="'/srv/ganeti/os'"])
AC_SUBST(OS_SEARCH_PATH, $os_search_path)

63
64
65
66
67
68
69
70
71
72
73
# --with-iallocator-search-path=...
# do a bit of black sed magic to for quoting of the strings in the list
AC_ARG_WITH([iallocator-search-path],
  [AS_HELP_STRING([--with-iallocator-search-path=LIST],
    [comma separated list of directories to]
    [ search for instance allocators (default is $libdir/ganeti/iallocators)]
  )],
  [iallocator_search_path=`echo -n "$withval" | sed -e "s/\([[^,]]*\)/'\1'/g"`],
  [iallocator_search_path="'$libdir/$PACKAGE_NAME/iallocators'"])
AC_SUBST(IALLOCATOR_SEARCH_PATH, $iallocator_search_path)

74
75
76
77
78
79
80
81
82
# --with-xen-bootloader=...
AC_ARG_WITH([xen-bootloader],
  [AS_HELP_STRING([--with-xen-bootloader=PATH],
    [bootloader for Xen hypervisor (default is empty)]
  )],
  [xen_bootloader="$withval"],
  [xen_bootloader=])
AC_SUBST(XEN_BOOTLOADER, $xen_bootloader)

83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# --with-xen-kernel=...
AC_ARG_WITH([xen-kernel],
  [AS_HELP_STRING([--with-xen-kernel=PATH],
    [DomU kernel image for Xen hypervisor (default is /boot/vmlinuz-2.6-xenU)]
  )],
  [xen_kernel="$withval"],
  [xen_kernel="/boot/vmlinuz-2.6-xenU"])
AC_SUBST(XEN_KERNEL, $xen_kernel)

# --with-xen-initrd=...
AC_ARG_WITH([xen-initrd],
  [AS_HELP_STRING([--with-xen-initrd=PATH],
    [DomU initrd image for Xen hypervisor (default is /boot/initrd-2.6-xenU)]
  )],
  [xen_initrd="$withval"],
  [xen_initrd="/boot/initrd-2.6-xenU"])
AC_SUBST(XEN_INITRD, $xen_initrd)

101
102
103
104
105
106
# --with-file-storage-dir=...
AC_ARG_WITH([file-storage-dir],
  [AS_HELP_STRING([--with-file-storage-dir=PATH],
    [directory to store files for file-based backend]
    [ (default is /srv/ganeti/file-storage)]
  )],
107
108
109
110
111
112
113
114
  [[file_storage_dir="$withval";
    if test "$withval" != no; then
      enable_file_storage=True
    else
      enable_file_storage=False
    fi
  ]],
  [[file_storage_dir="/srv/ganeti/file-storage"; enable_file_storage="True"]])
115
AC_SUBST(FILE_STORAGE_DIR, $file_storage_dir)
116
AC_SUBST(ENABLE_FILE_STORAGE, $enable_file_storage)
117

118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# --with-shared-file-storage-dir=...
AC_ARG_WITH([shared-file-storage-dir],
  [AS_HELP_STRING([--with-shared-file-storage-dir=PATH],
    [directory to store files for shared file-based backend]
    [ (default is /srv/ganeti/shared-file-storage)]
  )],
  [[shared_file_storage_dir="$withval";
    if test "$withval" != no; then
      enable_shared_file_storage=True
    else
      enable_shared_file_storage=False
    fi
  ]],
  [[shared_file_storage_dir="/srv/ganeti/shared-file-storage"; enable_shared_file_storage="True"]])
AC_SUBST(SHARED_FILE_STORAGE_DIR, $shared_file_storage_dir)
AC_SUBST(ENABLE_SHARED_FILE_STORAGE, $enable_shared_file_storage)

135
136
137
138
139
140
141
142
143
144
# --with-kvm-path=...
AC_ARG_WITH([kvm-path],
  [AS_HELP_STRING([--with-kvm-path=PATH],
    [absolute path to the kvm binary]
    [ (default is /usr/bin/kvm)]
  )],
  [kvm_path="$withval"],
  [kvm_path="/usr/bin/kvm"])
AC_SUBST(KVM_PATH, $kvm_path)

145
# --with-lvm-stripecount=...
146
147
148
AC_ARG_WITH([lvm-stripecount],
  [AS_HELP_STRING([--with-lvm-stripecount=NUM],
    [the number of stripes to use for LVM volumes]
Iustin Pop's avatar
Iustin Pop committed
149
    [ (default is 1)]
150
151
  )],
  [lvm_stripecount="$withval"],
Iustin Pop's avatar
Iustin Pop committed
152
  [lvm_stripecount="1"])
153
154
AC_SUBST(LVM_STRIPECOUNT, $lvm_stripecount)

155
156
157
158
159
160
# --with-user-prefix=...
AC_ARG_WITH([user-prefix],
  [AS_HELP_STRING([--with-user-prefix=PREFIX],
    [prefix for daemon users]
    [ (default is to run all daemons as root)]
  )],
161
  [user_masterd="${withval}masterd";
162
   user_rapi="${withval}rapi";
163
   user_confd="${withval}confd";
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
   user_noded="root"],
  [user_masterd="root";
   user_rapi="root";
   user_confd="root";
   user_noded="root"])
AC_SUBST(MASTERD_USER, $user_masterd)
AC_SUBST(RAPI_USER, $user_rapi)
AC_SUBST(CONFD_USER, $user_confd)
AC_SUBST(NODED_USER, $user_noded)

# --with-group-prefix=...
AC_ARG_WITH([group-prefix],
  [AS_HELP_STRING([--with-group-prefix=PREFIX],
    [prefix for daemon POSIX groups]
    [ (default is to run all daemons under group root)]
  )],
180
181
182
183
  [group_rapi="${withval}rapi";
   group_admin="${withval}admin";
   group_confd="${withval}confd";
   group_masterd="${withval}masterd";
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
   group_daemons="${withval}daemons";],
  [group_rapi="root";
   group_admin="root";
   group_confd="root";
   group_masterd="root";
   group_daemons="root"])
AC_SUBST(RAPI_GROUP, $group_rapi)
AC_SUBST(ADMIN_GROUP, $group_admin)
AC_SUBST(CONFD_GROUP, $group_confd)
AC_SUBST(MASTERD_GROUP, $group_masterd)
AC_SUBST(DAEMONS_GROUP, $group_daemons)

# Print the config to the user
AC_MSG_NOTICE([Running ganeti-masterd as $group_masterd:$group_masterd])
AC_MSG_NOTICE([Running ganeti-rapi as $user_rapi:$group_rapi])
AC_MSG_NOTICE([Running ganeti-confd as $user_confd:$group_confd])
AC_MSG_NOTICE([Group for daemons is $group_daemons])
AC_MSG_NOTICE([Group for clients is $group_admin])

203
204
205
206
207
208
209
210
211
212
213
214
215
# --enable-drbd-barriers
AC_ARG_ENABLE([drbd-barriers],
  [AS_HELP_STRING([--enable-drbd-barriers],
    [enable the DRBD barrier functionality (>= 8.0.12) (default: enabled)])],
  [[if test "$enableval" != no; then
      DRBD_BARRIERS=True
    else
      DRBD_BARRIERS=False
    fi
  ]],
  [DRBD_BARRIERS=True])
AC_SUBST(DRBD_BARRIERS, $DRBD_BARRIERS)

216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
# --enable-syslog[=no/yes/only]
AC_ARG_ENABLE([syslog],
  [AS_HELP_STRING([--enable-syslog],
    [enable use of syslog (default: disabled), one of no/yes/only])],
  [[case "$enableval" in
      no)
        SYSLOG=no
        ;;
      yes)
        SYSLOG=yes
        ;;
      only)
        SYSLOG=only
        ;;
      *)
        SYSLOG=
        ;;
    esac
  ]],
  [SYSLOG=no])

if test -z "$SYSLOG"
then
  AC_MSG_ERROR([invalid value for syslog, choose one of no/yes/only])
fi
AC_SUBST(SYSLOG_USAGE, $SYSLOG)

243
244
245
246
247
248
249
250
# --enable-htools
HTOOLS=
AC_ARG_ENABLE([htools],
        [AS_HELP_STRING([--enable-htools],
        [enable use of htools (needs GHC and libraries, default: check)])],
        [],
        [enable_htools=check])

251
252
253
254
255
256
257
258
259
# --with-disk-separator=...
AC_ARG_WITH([disk-separator],
  [AS_HELP_STRING([--with-disk-separator=STRING],
    [Disk index separator, useful if the default of ':' is handled specially by the hypervisor]
  )],
  [disk_separator="$withval"],
  [disk_separator=":"])
AC_SUBST(DISK_SEPARATOR, $disk_separator)

260
# Check common programs
Iustin Pop's avatar
Iustin Pop committed
261
AC_PROG_INSTALL
Michael Hanselmann's avatar
Michael Hanselmann committed
262
AC_PROG_LN_S
Iustin Pop's avatar
Iustin Pop committed
263

Iustin Pop's avatar
Iustin Pop committed
264
# Check for pandoc
Iustin Pop's avatar
Iustin Pop committed
265
266
267
268
269
270
271
AC_ARG_VAR(PANDOC, [pandoc path])
AC_PATH_PROG(PANDOC, [pandoc], [])
if test -z "$PANDOC"
then
  AC_MSG_WARN([pandoc not found, man pages rebuild will not be possible])
fi

272
273
274
275
# Check for python-sphinx
AC_ARG_VAR(SPHINX, [sphinx-build path])
AC_PATH_PROG(SPHINX, [sphinx-build], [])
if test -z "$SPHINX"
Michael Hanselmann's avatar
Michael Hanselmann committed
276
then
277
  AC_MSG_WARN([sphinx-build not found, documentation rebuild will not be possible])
Michael Hanselmann's avatar
Michael Hanselmann committed
278
279
fi

280
281
282
283
284
# Check for graphviz (dot)
AC_ARG_VAR(DOT, [dot path])
AC_PATH_PROG(DOT, [dot], [])
if test -z "$DOT"
then
Iustin Pop's avatar
Iustin Pop committed
285
  AC_MSG_WARN([dot (from the graphviz suite) not found, documentation rebuild not possible])
286
287
fi

288
289
290
291
292
293
294
295
# Check for pylint
AC_ARG_VAR(PYLINT, [pylint path])
AC_PATH_PROG(PYLINT, [pylint], [])
if test -z "$PYLINT"
then
  AC_MSG_WARN([pylint not found, checking code will not be possible])
fi

296
297
298
# Check for socat
AC_ARG_VAR(SOCAT, [socat path])
AC_PATH_PROG(SOCAT, [socat], [])
299
300
if test -z "$SOCAT"
then
301
  AC_MSG_ERROR([socat not found])
302
303
fi

304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
if test "$enable_htools" != "no"; then

# Check for ghc
AC_ARG_VAR(GHC, [ghc path])
AC_PATH_PROG(GHC, [ghc], [])
if test -z "$GHC"; then
  if test "$enable_htools" != "check"; then
    AC_MSG_FAILURE([ghc not found, htools compilation will not possible])
  fi
fi

# Check for ghc-pkg
HTOOLS_MODULES=
AC_ARG_VAR(GHC_PKG, [ghc-pkg path])
AC_PATH_PROG(GHC_PKG, [ghc-pkg], [])
if test -z "$GHC_PKG"; then
  if test "$enable_htools" != "check"; then
    AC_MSG_FAILURE([ghc-pkg not found, htools compilation will not be possible])
  fi
else
  # check for modules
  AC_MSG_NOTICE([checking for required haskell modules])
  AC_MSG_CHECKING([curl])
  GHC_PKG_CURL=$($GHC_PKG latest curl)
  if test -z "$GHC_PKG_CURL"; then
    AC_MSG_WARN([The curl library not found, htools will be compiled
                 without RAPI support])
    AC_SUBST(HTOOLS_NOCURL, [-DNO_CURL])
  fi
  AC_MSG_RESULT($GHC_PKG_CURL)
  AC_SUBST(GHC_PKG_CURL)
  AC_MSG_CHECKING([parallel])
  GHC_PKG_PARALLEL=$($GHC_PKG --simple-output list 'parallel-2.*')
  if test -z "$GHC_PKG_PARALLEL"
  then
    GHC_PKG_PARALLEL=$($GHC_PKG --simple-output list 'parallel-1.*')
  fi
  AC_SUBST(GHC_PKG_PARALLEL)
  AC_MSG_RESULT($GHC_PKG_PARALLEL)
  AC_MSG_CHECKING([json])
  GHC_PKG_JSON=$($GHC_PKG latest json)
  AC_MSG_RESULT($GHC_PKG_JSON)
  AC_MSG_CHECKING([network])
  GHC_PKG_NETWORK=$($GHC_PKG latest network)
  AC_MSG_RESULT($GHC_PKG_NETWORK)
  if test -z "$GHC_PKG_PARALLEL" || test -z "$GHC_PKG_JSON" || \
     test -z "$GHC_PKG_NETWORK"; then
    if test "$enable_htools" != "check"; then
      AC_MSG_FAILURE([Required Haskell modules not found, htools compilation
                      disabled])

    fi
  else
    # we leave the other modules to be auto-selected
    HTOOLS_MODULES="-package $GHC_PKG_PARALLEL"
  fi
fi
AC_SUBST(HTOOLS_MODULES)

if test "$enable_htools" != "no"; then
  if test -z "$GHC" || test -z "$HTOOLS_MODULES"; then
    AC_MSG_WARN([Haskell compiler/required libraries not found, htools
                 compilation disabled])
  else
    HTOOLS=yes
  fi
fi
AC_SUBST(HTOOLS)

# Check for HsColour
HTOOLS_APIDOC=no
AC_ARG_VAR(HSCOLOUR, [HsColour path])
AC_PATH_PROG(HSCOLOUR, [HsColour], [])
if test -z "$HSCOLOUR"; then
  AC_MSG_WARN([HsColour not found, htools API documentation will not be
               generated])
fi

# Check for haddock
AC_ARG_VAR(HADDOCK, [haddock path])
AC_PATH_PROG(HADDOCK, [haddock], [])
if test -z "$HADDOCK"; then
  AC_MSG_WARN([haddock not found, htools API documentation will not be
               generated])
fi
if test "$HADDOCK" && test "$HSCOLOUR"; then
  HTOOLS_APIDOC=yes
fi
AC_SUBST(HTOOLS_APIDOC)

fi # end if enable_htools, define automake conditions

AM_CONDITIONAL([WANT_HTOOLS], [test x$HTOOLS = xyes])
AM_CONDITIONAL([WANT_HTOOLSAPIDOC], [test x$HTOOLS_APIDOC = xyes])


400
401
402
403
404
405
406
407
408
409
410
411
412
SOCAT_USE_ESCAPE=
AC_ARG_ENABLE([socat-escape],
  [AS_HELP_STRING([--enable-socat-escape],
    [use escape functionality available in socat >= 1.7 (default: detect
     automatically)])],
  [[if test "$enableval" = yes; then
      SOCAT_USE_ESCAPE=True
    else
      SOCAT_USE_ESCAPE=False
    fi
  ]])

if test -z "$SOCAT_USE_ESCAPE"
413
then
414
415
416
417
418
  if $SOCAT -hh | grep -w -q escape; then
    SOCAT_USE_ESCAPE=True
  else
    SOCAT_USE_ESCAPE=False
  fi
419
420
fi

421
422
AC_SUBST(SOCAT_USE_ESCAPE)

423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
SOCAT_USE_COMPRESS=
AC_ARG_ENABLE([socat-compress],
  [AS_HELP_STRING([--enable-socat-compress],
    [use OpenSSL compression option available in patched socat builds
     (see INSTALL for details; default: detect automatically)])],
  [[if test "$enableval" = yes; then
      SOCAT_USE_COMPRESS=True
    else
      SOCAT_USE_COMPRESS=False
    fi
  ]])

if test -z "$SOCAT_USE_COMPRESS"
then
  if $SOCAT -hhh | grep -w -q openssl-compress; then
    SOCAT_USE_COMPRESS=True
  else
    SOCAT_USE_COMPRESS=False
  fi
fi

AC_SUBST(SOCAT_USE_COMPRESS)

446
447
448
449
450
451
452
453
454
455
456
if man --help | grep -q -e --warnings
then
  MAN_HAS_WARNINGS=1
else
  MAN_HAS_WARNINGS=
  AC_MSG_WARN([man doesn't support --warnings, man pages checks
               will not be possible])
fi

AC_SUBST(MAN_HAS_WARNINGS)

457
# Check for Python
Iustin Pop's avatar
Iustin Pop committed
458
459
AM_PATH_PYTHON(2.4)

460
461
462
AC_PYTHON_MODULE(OpenSSL, t)
AC_PYTHON_MODULE(simplejson, t)
AC_PYTHON_MODULE(pyparsing, t)
463
AC_PYTHON_MODULE(pyinotify, t)
464
AC_PYTHON_MODULE(pycurl, t)
465

466
467
468
469
470
471
472
# This is optional but then we've limited functionality
AC_PYTHON_MODULE(paramiko)
if test "$HAVE_PYMOD_PARAMIKO" = "no"; then
  AC_MSG_WARN([You do not have paramiko installed. While this is optional you
               have to setup SSH and noded on the joining nodes yourself.])
fi

473
AC_CONFIG_FILES([ Makefile ])
Iustin Pop's avatar
Iustin Pop committed
474

Iustin Pop's avatar
Iustin Pop committed
475
AC_OUTPUT