Skip to content

Commit

Permalink
added additional rpm handling
Browse files Browse the repository at this point in the history
  • Loading branch information
dbw7 committed Nov 13, 2023
1 parent b1ef020 commit 7b5fd8b
Show file tree
Hide file tree
Showing 4 changed files with 171 additions and 13 deletions.
4 changes: 2 additions & 2 deletions pkg/build/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ func (b *Builder) Build() error {
return fmt.Errorf("generating combustion script: %w", err)
}

err = b.copyRPMs()
err = b.processRPMs()
if err != nil {
return fmt.Errorf("copying RPMs over: %w", err)
return fmt.Errorf("processing rpms: %w", err)
}

switch b.imageConfig.Image.ImageType {
Expand Down
64 changes: 55 additions & 9 deletions pkg/build/rpm.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
package build

import (
_ "embed"
"fmt"
"os"
"path/filepath"
"strings"
)

const (
modifyRPMScriptName = "10_rpm_install.sh"
)

//go:embed scripts/rpms/10_rpm_install.sh.tpl
var modifyRPMScript string

func (b *Builder) getRPMFileNames(rpmSourceDir string) ([]string, error) {
var rpmFileNames []string

Expand All @@ -27,9 +36,23 @@ func (b *Builder) getRPMFileNames(rpmSourceDir string) ([]string, error) {
return rpmFileNames, nil
}

func (b *Builder) copyRPMs() error {
func (b *Builder) copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) error {
for _, rpm := range rpmFileNames {
sourcePath := filepath.Join(rpmSourceDir, rpm)
destPath := filepath.Join(rpmDestDir, rpm)

err := copyFile(sourcePath, destPath)
if err != nil {
return fmt.Errorf("copying file %s: %w", sourcePath, err)
}
}

return nil
}

func (b *Builder) processRPMs() error {
rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms")
// Only proceed with copying the RPMs if the directory exists
// Only proceed with processing the RPMs if the directory exists
_, err := os.Stat(rpmSourceDir)
if err != nil {
if os.IsNotExist(err) {
Expand All @@ -44,15 +67,38 @@ func (b *Builder) copyRPMs() error {
return fmt.Errorf("getting rpm file names: %w", err)
}

for _, rpm := range rpmFileNames {
sourcePath := filepath.Join(rpmSourceDir, rpm)
destPath := filepath.Join(rpmDestDir, rpm)
err = b.copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames)
if err != nil {
return fmt.Errorf("copying RPMs over: %w", err)
}

err = copyFile(sourcePath, destPath)
if err != nil {
return fmt.Errorf("copying file %s: %w", sourcePath, err)
}
err = b.writeRPMScript(rpmFileNames)
if err != nil {
return fmt.Errorf("writing the rpm install script: %w", err)
}

return nil
}

func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error {
rpmFileNamesString := strings.Join(rpmFileNamesArray, " ")
values := struct {
RPMs string
}{
RPMs: rpmFileNamesString,
}

writtenFilename, err := b.writeCombustionFile(modifyRPMScriptName, modifyRPMScript, &values)
if err != nil {
return fmt.Errorf("writing rpm script %s: %w", modifyRPMScriptName, err)
}
err = os.Chmod(writtenFilename, modifyScriptMode)
if err != nil {
return fmt.Errorf("changing permissions on the rpm script %s: %w", modifyRPMScriptName, err)
}

fmt.Println(writtenFilename, "xaksdokasd")
b.registerCombustionScript(modifyRPMScriptName)

return nil
}
109 changes: 107 additions & 2 deletions pkg/build/rpm_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package build

import (
"io/fs"
"os"
"path/filepath"
"testing"
Expand Down Expand Up @@ -69,8 +70,11 @@ func TestCopyRPMs(t *testing.T) {
file2, err := os.Create(file2Path)
require.NoError(t, err)

rpmFileNames, err := builder.getRPMFileNames(rpmSourceDir)
require.NoError(t, err)

// Test
err = builder.copyRPMs()
err = builder.copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames)

// Verify
require.NoError(t, err)
Expand Down Expand Up @@ -117,9 +121,110 @@ func TestCopyRPMsNoRPMDir(t *testing.T) {
require.NoError(t, err)
defer os.Remove(builder.eibBuildDir)

rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms")
rpmDestDir := builder.combustionDir

// Test
err = builder.copyRPMs(rpmSourceDir, rpmDestDir, nil)

// Verify
require.NoError(t, err)
}

func TestWriteRPMScript(t *testing.T) {
// Setup
tmpDir, err := os.MkdirTemp("", "eib-")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)

buildConfig := config.BuildConfig{
ImageConfigDir: "../config/testdata",
}
builder := New(nil, &buildConfig)
require.NoError(t, builder.prepareBuildDir())

rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms")

file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm")
defer os.Remove(file1Path)
file1, err := os.Create(file1Path)
require.NoError(t, err)

file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm")
defer os.Remove(file2Path)
file2, err := os.Create(file2Path)
require.NoError(t, err)

rpmFileNames, err := builder.getRPMFileNames(rpmSourceDir)
require.NoError(t, err)

// Test
err = builder.copyRPMs()
err = builder.writeRPMScript(rpmFileNames)

// Verify
require.NoError(t, err)

expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName)
foundBytes, err := os.ReadFile(expectedFilename)
require.NoError(t, err)

stats, err := os.Stat(expectedFilename)
require.NoError(t, err)
assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode())

foundContents := string(foundBytes)
assert.Contains(t, foundContents, "rpm1.rpm")
assert.Contains(t, foundContents, "rpm2.rpm")

// Cleanup
assert.NoError(t, file1.Close())
assert.NoError(t, file2.Close())
}

func TestProcessRPMs(t *testing.T) {
// Setup
bc := config.BuildConfig{
ImageConfigDir: "../config/testdata",
}
builder := New(nil, &bc)
err := builder.prepareBuildDir()
require.NoError(t, err)
defer os.Remove(builder.eibBuildDir)

rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms")
rpmDestDir := builder.combustionDir

file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm")
defer os.Remove(file1Path)
file1, err := os.Create(file1Path)
require.NoError(t, err)

file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm")
defer os.Remove(file2Path)
file2, err := os.Create(file2Path)
require.NoError(t, err)

// Test
err = builder.processRPMs()

// Verify
require.NoError(t, err)

_, err = os.Stat(filepath.Join(rpmDestDir, "rpm1.rpm"))
require.NoError(t, err)

_, err = os.Stat(filepath.Join(rpmDestDir, "rpm2.rpm"))
require.NoError(t, err)

expectedFilename := filepath.Join(rpmDestDir, modifyRPMScriptName)
foundBytes, err := os.ReadFile(expectedFilename)
require.NoError(t, err)

foundContents := string(foundBytes)
assert.Contains(t, foundContents, "rpm1.rpm")
assert.Contains(t, foundContents, "rpm2.rpm")

// Cleanup
assert.NoError(t, file1.Close())
assert.NoError(t, file2.Close())
}
7 changes: 7 additions & 0 deletions pkg/build/scripts/rpms/10_rpm_install.sh.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash
set -euo pipefail

# Template Fields
# RPMs - A string that contains all of the rpms present in the user created config directory, separated by spaces.

rpm -ivh --nosignature {{.RPMs}}

0 comments on commit 7b5fd8b

Please sign in to comment.