Package org.platformlayer.ops

Examples of org.platformlayer.ops.ChrootOpsTarget


      // mknod -m 666 ${ROOT}/dev/tty4 c 4 4
      // mknod -m 666 ${ROOT}/dev/tty5 c 4 5
      // mknod -m 666 ${ROOT}/dev/tty6 c 4 6

      {
        ChrootOpsTarget chrootTarget = new ChrootOpsTarget(getRoot(), new File("/tmp"), target);
        if (sshPublicKey != null) {
          SshAuthorizedKey.ensureSshAuthorization(chrootTarget, "root", sshPublicKey);
        }
      }
View Full Code Here


      throw new OpsException("Error running debootstrap", e);
    }

    // TODO: Switch to ChrootOpsTarget, so we can move this stuff into utility functions
    ChrootOpsTarget chrootTarget = new ChrootOpsTarget(rootfsDir, new File("/tmp"), target);

    FileUpload.upload(target, new File(rootfsDir, "etc/hostname"), hostname);

    {
      // Stop services being started in the chroot
      String policy = ResourceUtils.get(getClass(), "usr.sbin.policy-rc.d");
      File policyFile = new File(rootfsDir, "usr/sbin/policy-rc.d");
      FileUpload.upload(target, policyFile, policy);
      target.chmod(policyFile, "755");
    }

    target.executeCommand("mount -t proc proc {0}", new File(rootfsDir, "proc"));

    apt.update(chrootTarget, true);
    target.executeCommand("chroot {0} locale-gen en_US.utf8", rootfsDir);

    target.executeCommand("chroot {0} /bin/bash -c \"DEBIAN_FRONTEND=noninteractive dpkg-reconfigure locales\"",
        rootfsDir);

    if (!buildTar) {
      {
        File kernelImgConf = new File(rootfsDir, "etc/kernel-img.conf");

        String preseedData = ResourceUtils.get(getClass(), "kernel-img.conf");
        FileUpload.upload(target, kernelImgConf, preseedData);
      }

      {
        File preseedTmpDir = target.createTempDir();
        File preseedFile = new File(preseedTmpDir, "kernel.preseed");

        String preseedData = ResourceUtils.get(getClass(), "kernel.preseed");
        FileUpload.upload(target, preseedFile, preseedData);

        target.executeCommand(Command.build("cat {0} | chroot {1} debconf-set-selections", preseedFile,
            rootfsDir));
        apt.install(chrootTarget, kernelPackage);
      }
    }

    preconfigurePackages(chrootTarget, recipe.configurePackage);

    if (recipe.repositoryKey != null) {
      addRepositoryKeys(chrootTarget, recipe.repositoryKey);
    }

    if (recipe.repository != null) {
      addRepositories(chrootTarget, recipe.repository);

      apt.update(chrootTarget, true);
    }

    if (recipe.addPackage != null) {
      apt.install(chrootTarget, recipe.addPackage);

      if (recipe.addPackage.contains("jenkins")) {
        // It looks like jenkins doesn't honor policy-rc.d (?)
        // TODO: Fix this monstrosity...
        log.warn("Hard-coding service stop after jenkins installation");
        target.executeCommand(Command.build("chroot {0} /etc/init.d/jenkins stop", rootfsDir));
      }
    }

    apt.upgrade(chrootTarget);
    apt.clean(chrootTarget);

    if (!buildTar) {
      String uuid;
      {
        ProcessExecution uuidExecution = target.executeCommand("blkid -o value -s UUID {0}", loopbackPartition);
        uuid = uuidExecution.getStdOut().trim();
      }

      // Set up /etc/fstab
      String fstab = "# /etc/fstab: static file system information.\n";
      // TODO: Swap
      fstab += "proc\t/proc\tproc\tnodev,noexec,nosuid\t0\t0\n";
      // fstab += "/dev/sda1\t/\t" + filesystem +
      // "\terrors=remount-ro\t0\t1\n";
      fstab += String.format("UUID=%s\t/\t%s\terrors=remount-ro\t0\t1\n", uuid, filesystem);

      if (supportCloudConfigDisk) {
        if (useConfigDriveSymlinks) {
          // Use configuration from cloud_config mount
          target.mkdir(new File(rootfsDir, "media/config"));
          fstab += "/dev/disk/by-label/" + configDriveLabel + "\t/media/config\tudf,iso9660\tro\t0\t0\n";
        }
      }

      FileUpload.upload(target, new File(rootfsDir, "etc/fstab"), fstab);
      log.info("fstab = " + fstab);

      // Set up extlinux
      {
        ProcessExecution kernelExecution = target.executeCommand("chroot {0} find boot/ -name \"vmlinuz-*\"",
            rootfsDir);
        List<String> kernels = Lists.newArrayList();
        for (String kernel : kernelExecution.getStdOut().split("\n")) {
          kernel = kernel.trim();
          if (kernel.isEmpty()) {
            continue;
          }
          kernels.add(kernel);
        }

        if (kernels.size() > 1) {
          throw new IllegalStateException("Multiple kernels found");
        } else if (kernels.size() != 1) {
          throw new IllegalStateException("No kernels found");
        }

        ProcessExecution initrdExecution = target.executeCommand("chroot {0} find boot/ -name \"initrd*\"",
            rootfsDir);
        List<String> initrds = Lists.newArrayList();
        for (String initrd : initrdExecution.getStdOut().split("\n")) {
          initrd = initrd.trim();
          if (initrd.isEmpty()) {
            continue;
          }
          if (initrd.endsWith(".bak")) {
            continue;
          }
          initrds.add(initrd);
        }

        if (initrds.size() > 1) {
          throw new IllegalStateException("Multiple initrds found");
        } else if (initrds.size() != 1) {
          throw new IllegalStateException("No initrds found");
        }

        String conf = String.format(
            "default linux\ntimeout 1\n\nlabel linux\nkernel %s\nappend initrd=%s root=UUID=%s ro quiet",
            kernels.get(0), initrds.get(0), uuid);
        FileUpload.upload(target, new File(rootfsDir, "extlinux.conf"), conf);
        log.info("extlinux.conf = " + conf);
      }
      target.executeCommand(Command.build("extlinux --install  {0}", rootfsDir).setTimeout(TimeSpan.FIVE_MINUTES));
    }

    if (supportCloudConfigDisk) {
      if (useConfigDriveSymlinks) {
        target.rm(new File(rootfsDir, "etc/network/interfaces"));
        target.executeCommand("ln -s /media/config/etc/network/interfaces {0}", new File(rootfsDir,
            "etc/network/interfaces"));

        target.mkdir(new File(rootfsDir, "root/.ssh"));
        target.executeCommand("ln -s /media/config/root/.ssh/authorized_keys {0}", new File(rootfsDir,
            "root/.ssh/authorized_keys"));
      } else {
        String initScript = ResourceUtils.get(getClass(), "openstack-config");
        File initScriptFile = new File(rootfsDir, "etc/init.d/openstack-config");

        FileUpload.upload(target, initScriptFile, initScript);
        target.executeCommand("chmod +x {0}", initScriptFile);

        chrootTarget.executeCommand("/usr/sbin/update-rc.d openstack-config defaults");
      }
    }

    {
      // Remove policy file
View Full Code Here

TOP

Related Classes of org.platformlayer.ops.ChrootOpsTarget

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.