使用" vagrant up"安装java 8(jdk 1.8)。没有在debian上工作

时间:2018-01-20 12:59:23

标签: java shell sed vagrant

当我使用shell运行My Vagrantfile时,我正在努力解决Java 8安装错误:

StackOverflow - jdk-8-is-not-installed-error-404-not-found

为了解决这个错误,我添加了这些行:

sudo sed -i 's|JAVA_VERSION=8u151|JAVA_VERSION=8u162|' /var/lib/dpkg/info/oracle-java8-installer.*
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/|' /var/lib/dpkg/info/oracle-java8-installer.*
sudo sed -i 's|SHA256SUM_TGZ="c78200ce409367b296ec39be4427f020e2c585470c4eed01021feada576f027f"|SHA256SUM_TGZ="68ec82d47fd9c2b8eb84225b6db398a72008285fafc98631b1ff8d2229680257"|' /var/lib/dpkg/info/oracle-java8-installer.*
sudo sed -i 's|J_DIR=jdk1.8.0_151|J_DIR=jdk1.8.0_162|' /var/lib/dpkg/info/oracle-java8-installer.*

我在我的Shell中有这个块用于java部分:

# /*======================
# =            JAVA      =
# ======================*/
# https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-debian-8
sudo apt-get install -y software-properties-common
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/webupd8team-java.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
sudo apt-get update

# Silent !! Sshh !
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections

# see https://stackoverflow.com/questions/46815897/jdk-8-is-not-installed-error-404-not-found
# Still not work
sudo sed -i 's|JAVA_VERSION=8u151|JAVA_VERSION=8u162|' /var/lib/dpkg/info/oracle-java8-installer.*
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/|' /var/lib/dpkg/info/oracle-java8-installer.*
sudo sed -i 's|SHA256SUM_TGZ="c78200ce409367b296ec39be4427f020e2c585470c4eed01021feada576f027f"|SHA256SUM_TGZ="68ec82d47fd9c2b8eb84225b6db398a72008285fafc98631b1ff8d2229680257"|' /var/lib/dpkg/info/oracle-java8-installer.*
sudo sed -i 's|J_DIR=jdk1.8.0_151|J_DIR=jdk1.8.0_162|' /var/lib/dpkg/info/oracle-java8-installer.*

sudo apt-get install -y oracle-java8-installer
sudo apt-get install -y oracle-java8-set-default

奇怪的是:当启动框时,这些行通过SSH逐个获取,你可以安装Java,它可以工作。但是当我第一次配置我的流浪盒时,它无法正常工作。

问题来自sed还是其他命令?我认为它是sed的命令,但不知道如何修复它,因为如果我通过SSH粘贴它们它会起作用。

我想在没有任何人工干预的情况下完成这项工作。

您可以使用此github repo(V2)测试我的VM: VagrantFile + shells

如何使用vagrant来完成这项工作?

编辑:

  • 我在Vagrant 2.0和virtualBox 5.6上测试了它
  • 还测试了vagrant 1.7和virtualBox 5.1

3 个答案:

答案 0 :(得分:1)

以下代码片段修复了来自webupd8team repo的Java的静默安装,用于Debian发布

sudo apt-get -y install software-properties-common
sudo add-apt-repository -y ppa:webupd8team/java
sudo bash -c "echo deb http://http.debian.net/debian jessie-backports main >> /etc/apt/sources.list"
sudo bash -c "echo deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main >> /etc/apt/sources.list.d/webupd8team-java.list"
sudo bash -c "echo deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main >> /etc/apt/sources.list.d/webupd8team-java.list"
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
sudo apt-get update
sudo apt-get -y upgrade

echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selectionssudo 

sudo apt-get -y install oracle-java8-installer oracle-java8-set-default

截至今天,它安装了以下内容

vagrant@debian-8:~$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

答案 1 :(得分:1)

我正在考虑这个以防万一有人对Debian基本版本没问题,但是错过了它。我认为它应该已经安装在除了最简单的系统之外的任何东西上。

要让openJDK正常工作,这是Debians标准回购中提供的版本,您只需要使用

apt-get install -y openjdk-8-jdk

还有其他调试和文档包。

Debian还在contrib repos中提供了一个名为java-package的软件包,它可以从Oracle站点转换源tarball(你必须自己完成它以确定条款和条件),然后创建一个deb从中。不幸的是,似乎没有办法直接对所提出的问题假设是,所以它需要一个expect脚本或其他东西。

config.vm.provision "shell", inline: <<-SHELL
    # add contrib repos into source files.
    mv /etc/apt/sources.list /etc/apt/sources.bk
    sed -r ‘s/stretch([^ ]*) main$/& contrib/‘ /etc/apt/sources.bk | sudo tee /etc/apt/sources.list
    # vi -c ':%s/stretch\([^ ]*\) main$/& contrib/g' /etc/apt/sources.list -c 'wq'
    apt-get update
    apt-get install -y java-package java-common expect
    # some `expect` needed magic here
    sudo -u vagrant fakeroot make-jpkg /vagrant/jdk-8*
    dpkg -i oracle-java8*
SHELL

就我使用make-jpkg进行的交互而言,此脚本有效(来自命令行)

expect -c '
set timeout -1
spawn fakeroot make-jpkg /vagrant/jdk-8u162-linux-x64.tar.gz

expect "Is this correct \\\[Y/n\\\]: $" { send "Y\r" }
expect "Press \\\[Return\\\] to continue: "  { send "\r" }
expect "*Press \\\[Return\\\] to continue or Ctrl-C to abort."      { send "\r" }
expect eof { exit 0 }
'

但可能会以其他方式完成。

这几乎是一个答案,但可能会让你更近一点。

答案 2 :(得分:1)

对不起我迟到的回答。另一种选择是安装驱动器并静默安装oracle rpm软件包。

  1. 创建目录并将Vagrantfile放在那里。这是项目的根源。 (./)
  2. <强> Vagrantfile

    # All Vagrant configuration is done below. The "2" in Vagrant.configure
    # configures the configuration version (we support older styles for
    # backwards compatibility). Please don't change it unless you know what
    # you're doing.
    Vagrant.configure("2") do |config|
    
      # The most common configuration options are documented and commented below.
      # For a complete reference, please see the online documentation at
      # https://docs.vagrantup.com.
      # Every Vagrant development environment requires a box. You can search for
      # boxes at https://atlas.hashicorp.com/search.
      config.vm.box = "bento/centos-7.4"
      config.vm.boot_timeout = 240
    
      # Provider-specific configuration so you can fine-tune various
      # backing providers for Vagrant. These expose provider-specific options.
      # View the documentation for the provider you are using for more
      # information on available options.
      config.vm.provider "virtualbox" do |vb|
    
        # Enable the Host I/O cache for more performance
        vb.customize [
                     "storagectl", :id,
                     "--name", "SATA Controller",
                     "--hostiocache", "on"
                     ]
        vb.auto_nat_dns_proxy = false
        vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
        vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
        vb.customize ["modifyvm", :id, "--nictype1", "virtio"]
        vb.customize ["modifyvm", :id, "--nictype2", "virtio"
    
        vb.customize ["modifyvm", :id, "--memory", 4096]
        vb.customize ["modifyvm", :id, "--hwvirtex", "on"]
        vb.cpus = 4
      end
    
      # Synced folders are configured within your Vagrantfile using the config.vm.synced_folder method.
      # Vagrant shares by default the root directory of (./) with guest on /vagrant
      config.vm.synced_folder ".", "/vagrant", disabled: true
    
      # Synced folder is set as read-only for guest machine. You can configure the files on the host machine.
      # For more mount options check: http://manpages.ubuntu.com/manpages/precise/man8/mount.vboxsf.8.html
      config.vm.synced_folder "./installfiles", "/installfiles",
                               owner: "vagrant", group: "vagrant", mount_options: ["ro"]
    
      # Bootstrap shell scripts.
      config.vm.provision "shell", path: "./bootstrap/setup.sh"
    
      config.vm.post_up_message = "Finsihed provisioning!\n" \
                                  "Type \"vagrant ssh\" to get started"
    end
    
    1. 从项目的根目录创建另一个名为bootstrap的目录。创建一个名为setup.sh的空文件,将下面的内容放在setup.sh文件中。文件路径为./bootstrap/setup.sh
    2. <强> setup.sh

      #!/usr/bin/env bash
      echo "installing Java 8 64 bit"
      sudo rpm -i /installfiles/java8/jdk-8u144-linux-x64.rpm
      unzip /installfiles/java8/jce_policy-8.zip -d /tmp
      sudo cp -f /tmp/UnlimitedJCEPolicyJDK8/* $JAVA_HOME/lib/security/
      
      1. 转到oracle网站下载正确的32或64位rpm linux软件包。 oracle网站上提供的版本可能会更改。在这个例子中,我下载了jdk-8u144-linux-x64.rpm包。我还从oracle网站下载了无限加密强度策略,文件名是:jce_policy-8.zip。

      2. 从项目的根目录创建名为installfiles / java8的两个目录。将下载的文件放在那里。文件路径为:./ installfiles/java8/jdk-8u144-linux-x64.rpm和./installfiles/java8/jce_policy-8.zip

      3. 运行命令 vagrant up 。在主机上,目录./installfiles将与路径/ installfiles上的virtualbox guest计算机同步。在流浪汉的配置状态期间,将自动安装java-8。请记住,rpm包管理器是开箱即用的Red Hat发行版。但也可以在debian发行版上安装rpm软件包。