Use the tool to create a new centos-$version initramfs image with one command.
and we also can customize the pre-installed software by configuring
./bin/packages-to-install.
Signed-off-by: Wang Chenglong <18509160991(a)163.com>
---
container/osimage/centos/README.md | 16 ++++++++
container/osimage/centos/create-image | 43 ++++++++++++++++++++
container/osimage/centos/lib | 41 +++++++++++++++++++
container/osimage/centos/packages-to-install | 9 ++++
container/osimage/centos/packages-to-remove | 11 +++++
container/osimage/centos/run | 27 ++++++++++++
6 files changed, 147 insertions(+)
create mode 100644 container/osimage/centos/README.md
create mode 100755 container/osimage/centos/create-image
create mode 100755 container/osimage/centos/lib
create mode 100644 container/osimage/centos/packages-to-install
create mode 100644 container/osimage/centos/packages-to-remove
create mode 100755 container/osimage/centos/run
diff --git a/container/osimage/centos/README.md b/container/osimage/centos/README.md
new file mode 100644
index 0000000..b5c7b07
--- /dev/null
+++ b/container/osimage/centos/README.md
@@ -0,0 +1,16 @@
++# Use the tool to create a new centos-${version} initramfs image.
++
++Usage:
++ cd ${CCI_SRC}/rootfs/initramfs/centos/aarch64/${version}/
++ ./build
++
++Some configuration items:
++./bin/packages-to-install
++ If you want to pre-install the software, you can write the package names in ./bin/packages-to-install.
++
++./bin/packages-to-remove
++ If you want remove some unnecessary files, you can write the names in ./bin/packages-to-remove.
++
++$HOME/.config/compass-ci/rootfs-passwd
++ Set the password for the image into this file.
+
diff --git a/container/osimage/centos/create-image b/container/osimage/centos/create-image
new file mode 100755
index 0000000..fac8ddc
--- /dev/null
+++ b/container/osimage/centos/create-image
@@ -0,0 +1,43 @@
+#!/bin/bash
+# SPDX-License-Identifier: MulanPSL-2.0+
+# Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved.
+
+# Install functions
+install_packages()
+{
+ echo "install"
+ yum repolist
+ yum -y install --skip-broken $(</tmp/packages-to-install)
+ yum clean all
+}
+
+# Setup functions
+setup_rootfs()
+{
+ echo "setup"
+ ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+}
+
+
+# Config password
+setup_login() {
+ [ -n "$ROOT_NEW_PASSWD" ] || return
+ echo "Changing root password"
+ passwd_md5=$(openssl passwd -1 "$ROOT_NEW_PASSWD")
+ sed -i -r "s/^root:[^:]*:(.*)/root:${passwd_md5//\//\\/}:\1/" "$ROOTFS_DIR/etc/shadow"
+
+ sed -i 's/[# ]PermitRootLogin.*/PermitRootLogin yes/' "$ROOTFS_DIR/etc/ssh/sshd_config"
+}
+
+# Pack cgz package
+pack_cgz()
+{
+ echo "Packing package. Please wait."
+ find / ! -path "/tmp/${image_name}" | grep -vf /tmp/packages-to-remove | cpio -o -Hnewc | gzip -9 > /tmp/${image_name}
+ chmod 644 /tmp/${image_name}
+}
+
+install_packages
+setup_rootfs
+setup_login
+pack_cgz
diff --git a/container/osimage/centos/lib b/container/osimage/centos/lib
new file mode 100755
index 0000000..53aae2a
--- /dev/null
+++ b/container/osimage/centos/lib
@@ -0,0 +1,41 @@
+#!/bin/bash
+# SPDX-License-Identifier: MulanPSL-2.0+
+# Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved.
+
+DIR="$(pwd)"
+os_name="$(echo $DIR |awk -F "/" '{print $(NF - 2)}')"
+os_version="$(echo $DIR |awk -F "/" '{print $NF}')"
+image="${os_name}:${os_version}"
+image_name="${os_name}-${os_version}-$(date +"%Y%m%d").cgz"
+
+# Check password file
+check_passwd_file() {
+ root_pwd_file="$HOME/.config/compass-ci/rootfs-passwd"
+ export ROOT_NEW_PASSWD=
+ [ -f "$root_pwd_file" ] || {
+ echo "[INFO] Please set the password file."
+ echo "$HOME/.config/compass-ci/rootfs-passwd"
+ exit 1
+ }
+
+ export ROOT_NEW_PASSWD=$(cat "$root_pwd_file")
+}
+
+# Pull docker image
+pull_docker_image()
+{
+ docker pull $image
+ if [ $? = 0 ]; then
+ echo "finish downloading image"
+ else
+ echo "[INFO] Pull docker image failed."
+ exit
+ fi
+}
+
+# cp image package to host
+cp_image()
+{
+ docker cp -a init_docker:/tmp/${image_name} $HOME/
+ echo "result: $(ls $HOME/${image_name})"
+}
diff --git a/container/osimage/centos/packages-to-install b/container/osimage/centos/packages-to-install
new file mode 100644
index 0000000..a09bc28
--- /dev/null
+++ b/container/osimage/centos/packages-to-install
@@ -0,0 +1,9 @@
+openssh-server
+openssl
+cifs-utils
+hostname
+curl
+iproute
+iputils
+which
+time
diff --git a/container/osimage/centos/packages-to-remove b/container/osimage/centos/packages-to-remove
new file mode 100644
index 0000000..07a4a23
--- /dev/null
+++ b/container/osimage/centos/packages-to-remove
@@ -0,0 +1,11 @@
+/.dockerenv
+/lib/modules
+/usr/lib/modules
+/usr/share/doc
+/usr/share/man
+/usr/share/info
+/usr/share/i18n
+/usr/share/locale
+/usr/share/terminfo
+/tmp/packages-to-remove
+/tmp/packages-to-install
diff --git a/container/osimage/centos/run b/container/osimage/centos/run
new file mode 100755
index 0000000..699bbc6
--- /dev/null
+++ b/container/osimage/centos/run
@@ -0,0 +1,27 @@
+#!/bin/bash
+# SPDX-License-Identifier: MulanPSL-2.0+
+# Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved.
+
+. ${CCI_SRC}/container/osimage/centos/lib
+. ${CCI_SRC}/container/defconfig.sh
+
+check_passwd_file
+
+DIR=$(dirname $(realpath $0))
+cmd=(
+ docker run
+ --name init_docker
+ -v $DIR/create-image:/root/bin/create-image
+ -v $DIR/packages-to-install:/tmp/packages-to-install
+ -v $DIR/packages-to-remove:/tmp/packages-to-remove
+ -e ROOT_NEW_PASSWD=$ROOT_NEW_PASSWD
+ -e image_name=$image_name
+ $image
+ /root/bin/create-image
+)
+
+pull_docker_image
+${cmd[@]}
+cp_image
+docker_rm init_docker &> /dev/null
+echo "build finished"
--
2.23.0