■chroot-jessieにJava(JDK8)をインストールする。 まだSqueezeを使っている人はchroot環境位、自分で構築出来るだろうけど。。。 Squeeze上のsid chrootにjessieのchroot環境を構築、Squeezeへ移動 http://d.hatena.ne.jp/labunix/20130507 Wheezy上にchroot環境のWheezyを構築 http://labunix.hateblo.jp/entry/20130819/1376924059 ■ホストのWheezyに脆弱性の多いJavaを入れるのは気が引ける。 「脆弱性の多い」の頻度はCVE数で考えた場合のほぼ1日に1回か、2日に1回の割合。 ※影響度は考慮していない。 $ wget http://cve.mitre.org/data/downloads/allitems.csv.gz && \ gunzip allitems.csv.gz && \ grep -i java allitems.csv | \ awk -F, '/^CVE/ {print $1}' | cut -c 5-8 | \ awk '{a[$1]+=1};END{for (n in a){print n,a[n]}}' | sort -nr -k2 2013 331 2014 232 2009 231 2010 206 2006 202 2008 198 2007 193 2012 177 2011 168 2005 130 2002 117 2004 62 2015 54 2001 47 2003 34 2000 28 1999 18 ■インストール対象システムは、Jessie on Wheezy 64bit版 chroot環境なので、「df」コマンドは使えない。 $ cat /etc/debian_version 8.0 $ uname -m x86_64 $ df -h df: マウントされているファイルシステムのテーブルを読めません: そのようなファイルやディレクトリはありません ■chrootのホストであるWheezyには必要ならプロキシの設定がある前提。 Oracleが提示するライセンスに同意してダウンロード。 Java SE Development Kit 8u45 Java SE Development Kit 8u45 Demos and Samples Downloads http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ■scpなり、chroot-jessieのいずれかをマウントするなりして転送。 $ md5sum jdk-8u45-linux-x64* 003e3ed2cd19e3be7f94964a4d694492 jdk-8u45-linux-x64-demos.tar.gz 1ad9a5be748fb75b31cd3bd3aa339cac jdk-8u45-linux-x64.tar.gz ■ホストのWheezy側でパッケージのセクションの確認。 $ echo "fakeroot java-common java-package" | \ for list in `xargs`;do apt-cache show $list | grep ^Section;done Section: utils Section: java Section: contrib/misc ■chroot-jessieのsources.listにはcontribが無いので追加。 $ grep contrib /etc/apt/sources.list && \ sudo sed -i -e 's/main/& contrib/' /etc/apt/sources.list && \ sudo apt-get update $ echo "fakeroot java-common java-package" | \ for list in `xargs`;do \ dpkg -l $list | grep ^ii || sudo apt-get install -y $list; \ done ■ユーザ権限でインストールする。 $ fakeroot make-jpkg jdk-8u45-linux-x64.tar.gz | sed -e 's/.sh /& \\\n/g' Creating temporary directory: /tmp/make-jpkg.yeN0LktUcT Loading plugins: /usr/share/java-package/common.sh \ /usr/share/java-package/javase.sh \ /usr/share/java-package/jdk-doc.sh \ /usr/share/java-package/jdk.sh \ /usr/share/java-package/jre.sh \ /usr/share/java-package/oracle-jdk-doc.sh \ /usr/share/java-package/oracle-jdk.sh /usr/share/java-package/oracle-jre.sh Detected Debian build architecture: amd64 Detected Debian GNU type: x86_64-linux-gnu Detected product: Java(TM) Development Kit (JDK) Standard Edition, Version 8 Update 45 Oracle(TM) Is this correct [Y/n]: Y Checking free diskspace: done. In the next step, the binary file will be extracted. Probably a license agreement will be displayed. Please read this agreement carefully. If you do not agree to the displayed license terms, the package will not be built. Press [Return] to continue: Testing extracted archive... okay. Create debian package: dpkg-buildpackage: source package oracle-java8-jdk dpkg-buildpackage: source version 8u45 dpkg-buildpackage: source distribution unstable dpkg-buildpackage: source changed by Debian Java Maintainers <pkg-java-maintainers@lists.alioth.debian.org> dpkg-buildpackage: host architecture amd64 dpkg-source --before-build package dpkg-checkbuilddeps: Unmet build dependencies: libgl1-mesa-glx libgtk2.0-0 libxslt1.1 libxtst6 libxxf86vm1 dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting dpkg-buildpackage: warning: (Use -d flag to override.) Aborted (-us). Removing temporary directory: done ■まだライブラリが足りなかった。。。 $ echo "libgl1-mesa-glx libgtk2.0-0 libxslt1.1 libxtst6 libxxf86vm1" | \ for list in `xargs`;do apt-cache show $list | grep ^Section;done Section: libs Section: libs Section: libs Section: libs Section: libs $ echo "libgl1-mesa-glx libgtk2.0-0 libxslt1.1 libxtst6 libxxf86vm1" | \ for list in `xargs`;do \ dpkg -l $list | grep ^ii || sudo apt-get install -y $list; \ done ii libgl1-mesa-glx:amd64 10.3.2-1 amd64 free implementation of the OpenGL API -- GLX runtime ii libgtk2.0-0:amd64 2.24.25-3 amd64 GTK+ graphical user interface library ii libxslt1.1:amd64 1.1.28-2+b2 amd64 XSLT 1.0 processing library - runtime library ii libxtst6:amd64 2:1.2.2-1+b1 amd64 X11 Testing -- Record extension library ii libxxf86vm1:amd64 1:1.1.3-1+b1 amd64 X11 XFree86 video mode extension library ■もう一回。 $ fakeroot make-jpkg jdk-8u45-linux-x64.tar.gz | sed -e 's/.sh /& \\\n/g' ... The Debian package has been created in the current directory. You can install the package as root with: dpkg -i oracle-java8-jdk_8u45_amd64.deb Removing temporary directory: done ■大量のファイルを含んだdebパッケージの出来上がり。 インストール時に「update-alternatives」が自動で走る。 $ dpkg -c oracle-java8-jdk_8u45_amd64.deb | wc -l 1838 $ sudo dpkg -i oracle-java8-jdk_8u45_amd64.deb ■確認 $ whereis java javac java: /usr/bin/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz javac: /usr/bin/javac /usr/share/man/man1/javac.1.gz $ java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) ■作成したパッケージと同じ情報であること。 $ dpkg -l | grep oracle-java | awk '/^ii/ {print $2,$3}' oracle-java8-jdk 8u45 $ dpkg -L oracle-java8-jdk | wc -l 1838 ■余談1 今日インストールしたdebパッケージはどのくらい? 他にも色々インストールしたので、Javaのためだけではありませんが。。。 $ grep ^`date '+%Y-%m-%d'` /var/log/dpkg.log | awk '/installed/ {print}' | wc -l 433 ■余談2 bashのCVE数は年に数回見つかる程度。 ※影響度は考慮しない。 $ grep -i bash allitems.csv | \ awk -F, '/^CVE/ {print $1}' | cut -c 5-8 | \ awk '{a[$1]+=1};END{for (n in a){print n,a[n]}}' | sort -nr -k2 2014 8 2007 7 1999 6 2006 5 2013 3 2005 3 2010 2 2000 2 2012 1 2008 1 2004 1 2002 1 ■PHPはCVE数の推移だけ見ると成長しているように見えます。。。 $ grep -i " *php *" allitems.csv | awk -F, '/^CVE/ {print $1}' | cut -c 5-8 | \ awk '{a[$1]+=1};END{for (n in a){print n,a[n]}}' | sort -nr -k2 2006 3528 2008 3235 2007 3019 2002 1774 2009 1745 2005 1585 2010 1392 2001 1032 2014 896 2012 866 2011 846 2004 677 2013 628 2000 490 1999 356 2003 337 2015 156 $ grep -i " *python *" allitems.csv | \ awk -F, '/^CVE/ {print $1}' | cut -c 5-8 | \ awk '{a[$1]+=1};END{for (n in a){print n,a[n]}}' | sort -nr -k2 2008 33 2013 32 2014 31 2012 30 2011 24 2009 20 2010 16 2005 12 2006 11 2007 9 2015 6 2004 5 2002 5 2003 4