lib/dev-lxc.rb in dev-lxc-1.7.0 vs lib/dev-lxc.rb in dev-lxc-2.0.0
- old
+ new
@@ -4,113 +4,109 @@
require "dev-lxc/container"
require "dev-lxc/server"
require "dev-lxc/cluster"
module DevLXC
- def self.create_platform_image(platform_image_name, platform_image_options, lxc_config_path='/var/lib/lxc')
- platform_image = DevLXC::Container.new(platform_image_name, lxc_config_path)
- if platform_image.defined?
- puts "Using existing platform image '#{platform_image.name}'"
- return platform_image
+ def self.create_base_container(base_container_name, base_container_options)
+ base_container = DevLXC::Container.new(base_container_name)
+ if base_container.defined?
+ puts "Using existing base container '#{base_container.name}'"
+ return base_container
end
- puts "Creating platform image '#{platform_image.name}'"
+ puts "Creating base container '#{base_container.name}'"
template = "download"
- case platform_image.name
- when "p-ubuntu-1004"
- options = ["-d", "ubuntu", "-r", "lucid", "-a", "amd64"]
- when "p-ubuntu-1204"
+ case base_container.name
+ when "b-ubuntu-1204"
options = ["-d", "ubuntu", "-r", "precise", "-a", "amd64"]
- when "p-ubuntu-1404"
+ when "b-ubuntu-1404"
options = ["-d", "ubuntu", "-r", "trusty", "-a", "amd64"]
- when "p-ubuntu-1604"
+ when "b-ubuntu-1604"
options = ["-d", "ubuntu", "-r", "xenial", "-a", "amd64"]
- when "p-centos-5"
+ when "b-centos-5"
template = "centos"
options = ["-R", "5"]
- when "p-centos-6"
+ when "b-centos-6"
options = ["-d", "centos", "-r", "6", "-a", "amd64"]
- when "p-centos-7"
+ when "b-centos-7"
options = ["-d", "centos", "-r", "7", "-a", "amd64"]
end
- options.concat(platform_image_options.split) unless platform_image_options.nil?
- platform_image.create(template, "btrfs", {}, 0, options)
- if platform_image.name == "p-centos-7"
- # Centos 7 needs setpcap capabilities
- # ref: https://bugzilla.redhat.com/show_bug.cgi?id=1176816
- # ref: https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/1339781
- # ref: http://vfamilyserver.org/blog/2015/05/centos-7-lxc-container-slow-boot/
- DevLXC.search_file_replace(platform_image.config_file_name, /centos.common.conf/, 'fedora.common.conf')
- platform_image.clear_config
- platform_image.load_config
+ options.concat(base_container_options.split) unless base_container_options.nil?
+ base_container.create(template, "btrfs", {}, 0, options)
+
+ # if base container is centos then `/etc/hosts` file needs to be modified so `hostname -f`
+ # provides the FQDN instead of `localhost`
+ if base_container.name.start_with?('b-centos-')
+ IO.write("#{base_container.config_item('lxc.rootfs')}/etc/hosts", "127.0.0.1 localhost\n127.0.1.1 #{base_container.name}\n")
end
- unless platform_image.config_item("lxc.mount.auto").nil?
- platform_image.set_config_item("lxc.mount.auto", "proc:rw sys:rw")
+
+ # Centos 7 needs setpcap capabilities
+ # ref: https://bugzilla.redhat.com/show_bug.cgi?id=1176816
+ # ref: https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/1339781
+ # ref: http://vfamilyserver.org/blog/2015/05/centos-7-lxc-container-slow-boot/
+ if base_container.name == "b-centos-7"
+ DevLXC.search_file_replace(base_container.config_file_name, /centos.common.conf/, 'fedora.common.conf')
+ base_container.clear_config
+ base_container.load_config
end
- if platform_image.config_item("lxc.network.0.hwaddr").nil?
+
+ unless base_container.config_item("lxc.mount.auto").nil?
+ base_container.set_config_item("lxc.mount.auto", "proc:rw sys:rw")
+ end
+ if base_container.config_item("lxc.network.0.hwaddr").nil?
hwaddr = '00:16:3e:' + Digest::SHA1.hexdigest(Time.now.to_s).slice(0..5).unpack('a2a2a2').join(':')
- puts "Setting '#{platform_image.name}' platform image's lxc.network.hwaddr to #{hwaddr}"
- platform_image.set_config_item("lxc.network.hwaddr", hwaddr)
+ puts "Setting '#{base_container.name}' base container's lxc.network.hwaddr to #{hwaddr}"
+ base_container.set_config_item("lxc.network.hwaddr", hwaddr)
end
- platform_image.save_config
- platform_image.start
- puts "Installing packages in platform image '#{platform_image.name}'"
- case platform_image.name
- when "p-ubuntu-1004"
- # Disable certain sysctl.d files in Ubuntu 10.04, they cause `start procps` to fail
- if File.exist?("#{platform_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf")
- FileUtils.mv("#{platform_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf",
- "#{platform_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf.orig")
- end
- platform_image.run_command("apt-get update")
- platform_image.run_command("apt-get install -y standard^ server^ vim-nox emacs23-nox curl tree openssh-server")
- IO.write("#{platform_image.config_item('lxc.rootfs')}/etc/rc.local", "#!/usr/bin/env bash\n\n/usr/sbin/dpkg-reconfigure openssh-server\n")
- FileUtils.chmod(0755, "#{platform_image.config_item('lxc.rootfs')}/etc/rc.local")
- when "p-ubuntu-1204", "p-ubuntu-1404"
- platform_image.run_command("apt-get update")
- platform_image.run_command("apt-get install -y standard^ server^ vim-nox emacs23-nox tree openssh-server")
- IO.write("#{platform_image.config_item('lxc.rootfs')}/etc/rc.local", "#!/usr/bin/env bash\n\n/usr/sbin/dpkg-reconfigure openssh-server\n")
- FileUtils.chmod(0755, "#{platform_image.config_item('lxc.rootfs')}/etc/rc.local")
- when "p-ubuntu-1604"
- platform_image.run_command("apt-get update")
- platform_image.run_command("apt-get install -y standard^ server^ vim-nox emacs24-nox tree openssh-server")
- IO.write("#{platform_image.config_item('lxc.rootfs')}/etc/rc.local", "#!/usr/bin/env bash\n\n/usr/sbin/dpkg-reconfigure openssh-server\n")
- FileUtils.chmod(0755, "#{platform_image.config_item('lxc.rootfs')}/etc/rc.local")
- when "p-centos-5"
+ base_container.save_config
+ base_container.start
+ puts "Installing packages in base container '#{base_container.name}'"
+ case base_container.name
+ when "b-ubuntu-1204", "b-ubuntu-1404"
+ base_container.run_command("apt-get update")
+ base_container.run_command("apt-get install -y standard^ server^ vim-nox emacs23-nox tree openssh-server")
+ IO.write("#{base_container.config_item('lxc.rootfs')}/etc/rc.local", "#!/usr/bin/env bash\n\n/usr/sbin/dpkg-reconfigure openssh-server\n")
+ FileUtils.chmod(0755, "#{base_container.config_item('lxc.rootfs')}/etc/rc.local")
+ when "b-ubuntu-1604"
+ base_container.run_command("apt-get update")
+ base_container.run_command("apt-get install -y standard^ server^ vim-nox emacs24-nox tree openssh-server")
+ IO.write("#{base_container.config_item('lxc.rootfs')}/etc/rc.local", "#!/usr/bin/env bash\n\n/usr/sbin/dpkg-reconfigure openssh-server\n")
+ FileUtils.chmod(0755, "#{base_container.config_item('lxc.rootfs')}/etc/rc.local")
+ when "b-centos-5"
# downgrade openssl temporarily to overcome an install bug
# reference: http://www.hack.net.br/blog/2014/02/12/openssl-conflicts-with-file-from-package-openssl/
- platform_image.run_command("yum downgrade -y openssl")
- platform_image.run_command("yum install -y @base @core vim-enhanced emacs-nox tree openssh-server")
- FileUtils.mkdir_p("#{platform_image.config_item('lxc.rootfs')}/etc/sudoers.d")
- FileUtils.chmod(0750, "#{platform_image.config_item('lxc.rootfs')}/etc/sudoers.d")
- append_line_to_file("#{platform_image.config_item('lxc.rootfs')}/etc/sudoers", "\n#includedir /etc/sudoers.d\n")
- when "p-centos-6"
- platform_image.run_command("yum install -y @base @core vim-enhanced emacs-nox tree openssh-server")
- when "p-centos-7"
- platform_image.run_command("yum install -y @base @core vim-enhanced emacs-nox tree openssh-server")
+ base_container.run_command("yum downgrade -y openssl")
+ base_container.run_command("yum install -y @base @core vim-enhanced emacs-nox tree openssh-server")
+ FileUtils.mkdir_p("#{base_container.config_item('lxc.rootfs')}/etc/sudoers.d")
+ FileUtils.chmod(0750, "#{base_container.config_item('lxc.rootfs')}/etc/sudoers.d")
+ append_line_to_file("#{base_container.config_item('lxc.rootfs')}/etc/sudoers", "\n#includedir /etc/sudoers.d\n")
+ when "b-centos-6"
+ base_container.run_command("yum install -y @base @core vim-enhanced emacs-nox tree openssh-server")
+ when "b-centos-7"
+ base_container.run_command("yum install -y @base @core vim-enhanced emacs-nox tree openssh-server")
end
- platform_image.run_command("useradd --create-home --shell /bin/bash --password $6$q3FDMpMZ$zfahCxEWHbzuEV98QPzhGZ7fLtGcLNZrbKK7OAYGXmJXZc07WbcxVnDwrMyX/cL6vSp4/IjlrVUZFBp7Orhyu1 dev-lxc")
+ base_container.run_command("useradd --create-home --shell /bin/bash --password $6$q3FDMpMZ$zfahCxEWHbzuEV98QPzhGZ7fLtGcLNZrbKK7OAYGXmJXZc07WbcxVnDwrMyX/cL6vSp4/IjlrVUZFBp7Orhyu1 dev-lxc")
- FileUtils.mkdir_p("#{platform_image.config_item('lxc.rootfs')}/home/dev-lxc/.ssh")
- FileUtils.chmod(0700, "#{platform_image.config_item('lxc.rootfs')}/home/dev-lxc/.ssh")
- FileUtils.touch("#{platform_image.config_item('lxc.rootfs')}/home/dev-lxc/.ssh/authorized_keys")
- FileUtils.chmod(0600, "#{platform_image.config_item('lxc.rootfs')}/home/dev-lxc/.ssh/authorized_keys")
- platform_image.run_command("chown -R dev-lxc:dev-lxc /home/dev-lxc/.ssh")
+ FileUtils.mkdir_p("#{base_container.config_item('lxc.rootfs')}/home/dev-lxc/.ssh")
+ FileUtils.chmod(0700, "#{base_container.config_item('lxc.rootfs')}/home/dev-lxc/.ssh")
+ FileUtils.touch("#{base_container.config_item('lxc.rootfs')}/home/dev-lxc/.ssh/authorized_keys")
+ FileUtils.chmod(0600, "#{base_container.config_item('lxc.rootfs')}/home/dev-lxc/.ssh/authorized_keys")
+ base_container.run_command("chown -R dev-lxc:dev-lxc /home/dev-lxc/.ssh")
- IO.write("#{platform_image.config_item('lxc.rootfs')}/etc/sudoers.d/dev-lxc", "dev-lxc ALL=NOPASSWD:ALL\n")
- FileUtils.chmod(0440, "#{platform_image.config_item('lxc.rootfs')}/etc/sudoers.d/dev-lxc")
- platform_image.stop
- return platform_image
+ IO.write("#{base_container.config_item('lxc.rootfs')}/etc/sudoers.d/dev-lxc", "dev-lxc ALL=NOPASSWD:ALL\n")
+ FileUtils.chmod(0440, "#{base_container.config_item('lxc.rootfs')}/etc/sudoers.d/dev-lxc")
+ base_container.stop
+ return base_container
end
def self.assign_ip_address(ipaddress, container_name, hwaddr)
puts "Assigning IP address #{ipaddress} to '#{container_name}' container's lxc.network.hwaddr #{hwaddr}"
search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /(^#{hwaddr}|,#{ipaddress}$)/)
append_line_to_file("/etc/lxc/dhcp-hosts.conf", "#{hwaddr},#{ipaddress}\n")
reload_dnsmasq
end
- def self.create_dns_record(api_fqdn, container_name, ipaddress)
- dns_record = "#{ipaddress} #{container_name} #{api_fqdn}\n"
+ def self.create_dns_record(fqdn, container_name, ipaddress)
+ dns_record = "#{ipaddress} #{container_name} #{fqdn}\n"
puts "Creating DNS record: #{dns_record}"
search_file_delete_line("/etc/lxc/addn-hosts.conf", /^#{ipaddress}\s/)
append_line_to_file("/etc/lxc/addn-hosts.conf", dns_record)
reload_dnsmasq
end