summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rwxr-xr-xsetup.py202
1 files changed, 202 insertions, 0 deletions
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..846d8e7
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,202 @@
+#!/usr/bin/python
+#
+# Windows Azure Linux Agent setup.py
+#
+# Copyright 2013 Microsoft Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+import glob
+import os
+import sys
+import platform
+import setuptools
+from setuptools.command.install import install
+
+from distutils.errors import DistutilsArgError
+
+def getDistro():
+ """
+ Try to figure out the distribution we are running on
+ """
+ distro = platform.linux_distribution()[0].lower()
+ # Manipulate the distribution to meet our needs we treat
+ # Fedora, RHEL, and CentOS the same
+ # openSUSE and SLE the same
+ if distro.find('suse') != -1:
+ distro = 'suse'
+ if (distro.find('fedora') != -1
+ or distro.find('red hat') != -1
+ or distro.find('centos') != -1):
+ distro = 'redhat'
+
+ return distro
+
+
+class InstallData(install):
+ user_options = install.user_options + [
+ # This will magically show up in member variable 'init_system'
+ ('init-system=', None, 'init system to configure [default: sysV]'),
+ ('lnx-distro=', None, 'target Linux distribution'),
+ ]
+
+ def initialize_options(self):
+ install.initialize_options(self)
+ self.init_system = 'sysV'
+ self.lnx_distro = None
+
+ def finalize_options(self):
+ install.finalize_options(self)
+ if not self.lnx_distro:
+ self.lnx_distro = getDistro()
+ if self.init_system not in ['sysV', 'systemd', 'upstart']:
+ print 'Do not know how to handle %s init system' %self.init_system
+ sys.exit(1)
+ if self.init_system == 'sysV':
+ if not os.path.exists('distro/%s' %self.lnx_distro):
+ msg = 'Unknown distribution "%s"' %self.lnx_distro
+ msg += ', no entry in distro directory'
+ sys.exit(1)
+
+ def run(self):
+ """
+ Install the files for the Windows Azure Linux Agent
+ """
+ distro = self.lnx_distro
+ init = self.init_system
+ prefix = self.prefix
+ tgtDir = self.root
+ if prefix and prefix[-1] != '/':
+ prefix += '/'
+ else:
+ prefix = '/'
+ if tgtDir and tgtDir[-1] != '/':
+ tgtDir += '/'
+ else:
+ tgtDir = '/'
+ # Handle the different init systems
+ if init == 'sysV':
+ initdir = 'etc/init.d'
+ if self.lnx_distro == 'redhat':
+ initdir = 'etc/rc.d/init.d'
+ if not os.path.exists(tgtDir + initdir):
+ try:
+ self.mkpath(tgtDir + initdir, 0755)
+ except:
+ msg = 'Could not create init script directory '
+ msg += tgtDir
+ msg += initdir
+ print msg
+ print sys.exc_info()[0]
+ sys.exit(1)
+ initScripts = glob.glob('distro/%s/*.sysV' %distro)
+ try:
+ for f in initScripts:
+ newName = f.split('/')[-1].split('.')[0]
+ self.copy_file(f, tgtDir + initdir + '/' + newName)
+ except:
+ print 'Could not install systemV init script',
+ sys.exit(1)
+ elif init == 'systemd':
+ if not os.path.exists(tgtDir + prefix +'lib/systemd/system'):
+ try:
+ self.mkpath(tgtDir + prefix + 'lib/systemd/system', 0755)
+ except:
+ msg = 'Could not create systemd service directory '
+ msg += tgtDir + prefix
+ msg += 'lib/systemd/system'
+ print msg
+ sys.exit(1)
+ services = glob.glob('distro/systemd/*')
+ for f in services:
+ try:
+ baseName = f.split('/')[-1]
+ self.copy_file(f,
+ tgtDir + prefix +'lib/systemd/system/' + baseName)
+ except:
+ print 'Could not install systemd service files'
+ sys.exit(1)
+ elif init == 'upstart':
+ print 'Upstart init files installation not supported at this time.'
+ print 'Need an implementation, please submit a patch ;)'
+ print 'See WALinuxAgent/debian directory for Debian/Ubuntu packaging'
+
+ # Configuration file
+ if not os.path.exists(tgtDir + 'etc'):
+ try:
+ self.mkpath(tgtDir + 'etc', 0755)
+ except:
+ msg = 'Could not create config dir '
+ msg += tgtDir
+ msg += 'etc'
+ print msg
+ sys.exit(1)
+ try:
+ self.copy_file('config/waagent.conf', tgtDir + 'etc/waagent.conf')
+ except:
+ print 'Could not install configuration file %etc' %tgtDir
+ sys.exit(1)
+ if not os.path.exists(tgtDir + 'etc/logrotate.d'):
+ try:
+ self.mkpath(tgtDir + 'etc/logrotate.d', 0755)
+ except:
+ msg = 'Could not create ' + tgtDir + 'etc/logrotate.d'
+ print msg
+ sys.exit(1)
+ try:
+ self.copy_file('config/waagent.logrotate',
+ tgtDir + 'etc/logrotate.d/waagent')
+ except:
+ msg = 'Could not install logrotate file in '
+ msg += tgtDir + 'etc/logrotate.d'
+ print msg
+ sys.exit(1)
+
+ # Daemon
+ if not os.path.exists(tgtDir + prefix + 'sbin'):
+ try:
+ self.mkpath(tgtDir + prefix + 'sbin', 0755)
+ except:
+ msg = 'Could not create target daemon dir '
+ msg+= tgtDir + prefix + 'sbin'
+ print msg
+ sys.exit(1)
+ try:
+ self.copy_file('waagent', tgtDir + prefix + 'sbin/waagent')
+ except:
+ print 'Could not install daemon %s%ssbin/waagent' %(tgtDir,prefix)
+ sys.exit(1)
+ os.chmod('%s%ssbin/waagent' %(tgtDir,prefix), 0755)
+
+def readme():
+ with open('README') as f:
+ return f.read()
+
+setuptools.setup(name = 'waagent',
+ version = '1.4.0',
+ description = 'Windows Azure Linux Agent',
+ long_description = readme(),
+ author = 'Stephen Zarkos, Eric Gable',
+ author_email = 'walinuxagent@microsoft.com',
+ platforms = 'Linux',
+ url = 'https://github.com/Windows-Azure/',
+ license = 'Apache License Version 2.0',
+ cmdclass = {
+ # Use a subclass for install that handles
+ # install, we do not have a "true" python package
+ 'install': InstallData,
+ },
+)
+
+
+