[lxc-devel] [distrobuilder/master] sources/oracle: Add support for Oracle Linux 8
monstermunchkin on Github
lxc-bot at linuxcontainers.org
Wed Oct 23 09:11:02 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 364 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20191023/afa82d50/attachment.bin>
-------------- next part --------------
From f904cb27d4f418dd34ea5b7933e7334830d9121a Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Wed, 23 Oct 2019 11:07:24 +0200
Subject: [PATCH] sources/oracle: Add support for Oracle Linux 8
Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
sources/oraclelinux-http.go | 125 ++++++++++++++++++++----------------
1 file changed, 69 insertions(+), 56 deletions(-)
diff --git a/sources/oraclelinux-http.go b/sources/oraclelinux-http.go
index b3a1117..e02564a 100644
--- a/sources/oraclelinux-http.go
+++ b/sources/oraclelinux-http.go
@@ -10,6 +10,7 @@ import (
"syscall"
lxd "github.com/lxc/lxd/shared"
+ "golang.org/x/sys/unix"
"gopkg.in/antchfx/htmlquery.v1"
"github.com/lxc/distrobuilder/shared"
@@ -63,7 +64,7 @@ func (s *OracleLinuxHTTP) unpackISO(latestUpdate, filePath, rootfsDir string) er
if err != nil {
return err
}
- defer syscall.Unmount(isoDir, 0)
+ defer unix.Unmount(isoDir, 0)
var rootfsImage string
squashfsImage := filepath.Join(isoDir, "LiveOS", "squashfs.img")
@@ -75,7 +76,7 @@ func (s *OracleLinuxHTTP) unpackISO(latestUpdate, filePath, rootfsDir string) er
if err != nil {
return err
}
- defer syscall.Unmount(squashfsDir, 0)
+ defer unix.Unmount(squashfsDir, 0)
rootfsImage = filepath.Join(squashfsDir, "LiveOS", "rootfs.img")
} else {
@@ -133,53 +134,47 @@ func (s *OracleLinuxHTTP) unpackISO(latestUpdate, filePath, rootfsDir string) er
}
}
- if rpmPkg == "" {
- return fmt.Errorf("Couldn't determine RPM package")
- }
-
- if yumPkg == "" {
- return fmt.Errorf("Couldn't determine YUM package")
- }
+ if rpmPkg != "" && yumPkg != "" {
+ rpmFileName := filepath.Join(tempRootDir, filepath.Base(rpmPkg))
+ yumFileName := filepath.Join(tempRootDir, filepath.Base(yumPkg))
+ gpgFileName := filepath.Join(tempRootDir, "RPM-GPG-KEY-oracle")
- rpmFileName := filepath.Join(tempRootDir, filepath.Base(rpmPkg))
- yumFileName := filepath.Join(tempRootDir, filepath.Base(yumPkg))
- gpgFileName := filepath.Join(tempRootDir, "RPM-GPG-KEY-oracle")
-
- rpmFile, err := os.Create(rpmFileName)
- if err != nil {
- return err
- }
- defer rpmFile.Close()
+ rpmFile, err := os.Create(rpmFileName)
+ if err != nil {
+ return err
+ }
+ defer rpmFile.Close()
- yumFile, err := os.Create(yumFileName)
- if err != nil {
- return err
- }
- defer yumFile.Close()
+ yumFile, err := os.Create(yumFileName)
+ if err != nil {
+ return err
+ }
+ defer yumFile.Close()
- gpgFile, err := os.Create(gpgFileName)
- if err != nil {
- return err
- }
- defer gpgFile.Close()
+ gpgFile, err := os.Create(gpgFileName)
+ if err != nil {
+ return err
+ }
+ defer gpgFile.Close()
- _, err = lxd.DownloadFileHash(http.DefaultClient, "", nil, nil, rpmFileName, fmt.Sprintf("%s/%s", baseURL, rpmPkg), "", nil, rpmFile)
- if err != nil {
- return err
- }
- rpmFile.Close()
+ _, err = lxd.DownloadFileHash(http.DefaultClient, "", nil, nil, rpmFileName, fmt.Sprintf("%s/%s", baseURL, rpmPkg), "", nil, rpmFile)
+ if err != nil {
+ return err
+ }
+ rpmFile.Close()
- _, err = lxd.DownloadFileHash(http.DefaultClient, "", nil, nil, yumFileName, fmt.Sprintf("%s/%s", baseURL, yumPkg), "", nil, yumFile)
- if err != nil {
- return err
- }
- yumFile.Close()
+ _, err = lxd.DownloadFileHash(http.DefaultClient, "", nil, nil, yumFileName, fmt.Sprintf("%s/%s", baseURL, yumPkg), "", nil, yumFile)
+ if err != nil {
+ return err
+ }
+ yumFile.Close()
- _, err = lxd.DownloadFileHash(http.DefaultClient, "", nil, nil, gpgFileName, "https://oss.oracle.com/ol6/RPM-GPG-KEY-oracle", "", nil, gpgFile)
- if err != nil {
- return err
+ _, err = lxd.DownloadFileHash(http.DefaultClient, "", nil, nil, gpgFileName, "https://oss.oracle.com/ol6/RPM-GPG-KEY-oracle", "", nil, gpgFile)
+ if err != nil {
+ return err
+ }
+ gpgFile.Close()
}
- gpgFile.Close()
// Setup the mounts and chroot into the rootfs
exitChroot, err := shared.SetupChroot(tempRootDir, shared.DefinitionEnv{})
@@ -198,39 +193,57 @@ arch="%s"
# Create required files
touch /etc/mtab /etc/fstab
-# Fetch and install rpm and yum from the Oracle repo
-_rpm=$(curl -s https://yum.oracle.com/repo/OracleLinux/OL${version}/${update}/base/${arch}/index.html | grep -Eo '>rpm-[[:digit:]][^ ]+\.rpm<' | tail -1 | sed 's|[<>]||g')
-_yum=$(curl -s https://yum.oracle.com/repo/OracleLinux/OL${version}/${update}/base/${arch}/index.html | grep -Eo '>yum-[[:digit:]][^ ]+\.rpm<' | tail -1 | sed 's|[<>]||g')
+mkdir -p /etc/yum.repos.d /rootfs
-rpm -ivh --nodeps "${_rpm}" "${_yum}"
-rpm --import RPM-GPG-KEY-oracle
+if which dnf; then
+ alias yum=dnf
+ baseurl=http://yum.oracle.com/repo/OracleLinux/OL${version}/baseos/latest/${arch}/
+ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
+else
+ baseurl=http://yum.oracle.com/repo/OracleLinux/OL${version}/${update}/base/${arch}
+ gpgkey=file:///RPM-GPG-KEY-oracle
+
+ # Fetch and install rpm and yum from the Oracle repo
+ _rpm=$(curl -s ${baseurl}/index.html | grep -Eo '>rpm-[[:digit:]][^ ]+\.rpm<' | tail -1 | sed 's|[<>]||g')
+ _yum=$(curl -s ${baseurl}/index.html | grep -Eo '>yum-[[:digit:]][^ ]+\.rpm<' | tail -1 | sed 's|[<>]||g')
+
+ rpm -ivh --nodeps "${_rpm}" "${_yum}"
+ rpm --import RPM-GPG-KEY-oracle
+fi
# Add repo
-mkdir -p /etc/yum.repos.d
cat <<- EOF > /etc/yum.repos.d/base.repo
[base]
name=Oracle Linux
-baseurl=https://yum.oracle.com/repo/OracleLinux/OL${version}/${update}/base/${arch}
+baseurl=${baseurl}
enabled=1
gpgcheck=1
-gpgkey=file:///RPM-GPG-KEY-oracle
+gpgkey=${gpgkey}
EOF
-mkdir /rootfs
-yum --installroot=/rootfs -y --releasever=${version} install basesystem oraclelinux-release yum
-rm -rf /rootfs/var/cache/yum
+rm -rf /var/rootfs/*
-cp RPM-GPG-KEY-oracle /rootfs
+yum install --releasever=${version} --installroot=/rootfs -y basesystem oraclelinux-release yum
+rm -rf /rootfs/var/cache/yum
mkdir -p /rootfs/etc/yum.repos.d
+cp /etc/yum.repos.d/base.repo /rootfs/etc/yum.repos.d/
+
+if [ -f RPM-GPG-KEY-oracle ] && ! [ -f /rootfs/etc/pki/rpm-gpg/RPM-GPG-KEY-oracle ]; then
+ mkdir -p /rootfs/etc/pki/rpm-gpg/
+ cp RPM-GPG-KEY-oracle /rootfs/etc/pki/rpm-gpg/
+fi
+
+
cat <<- EOF > /rootfs/etc/yum.repos.d/base.repo
[base]
name=Oracle Linux
-baseurl=https://yum.oracle.com/repo/OracleLinux/OL${version}/${update}/base/${arch}
+baseurl=${baseurl}
enabled=1
gpgcheck=1
-gpgkey=file:///RPM-GPG-KEY-oracle
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
EOF
+
`, s.majorVersion, latestUpdate, s.architecture))
if err != nil {
exitChroot()
More information about the lxc-devel
mailing list