发新话题
打印

自动下载文件并制作OpenBSD的ISO

自动下载文件并制作OpenBSD的ISO

First of all:欢迎任何针对该脚本的建议和批评。

起因:
看到论坛里有一些朋友在问从哪里下载 OpenBSD 的 ISO,但是 OpenBSD 官方并不提供 ISO
文件下载,因为 OpenBSD 的光盘销售是支持 OpenBSD 开发的一种经济来源,所以 OpenBSD
官方希望支持 OpenBSD 的朋友和用户都能购买它的光盘以支持 OpenBSD 的持续发展。

***************************************************
我们强烈建议您:如果可能的话,请购买 OpenBSD 官方制作的 CD 套装。
详情请访问:http://www.openbsd.org/faq/faq3.html#BuyCD
***************************************************

脚本的使用方法:
$ ./mk_openbsd_iso-0.1.sh 3.9 i386

您只要指定需要制作的 OpenBSD 版本和平台架构,即可生成对应的 ISO 文件。

此脚本需要 wget / mkisofs 这两个工具才能制作ISO。
wget 用于下载文件,mkisofs 用于制作 ISO。
cd /usr/ports/sysutils/cdrtools
make install clean;
cd /usr/ports/ftp/wget
make install clean;

注意事项:
并不是每个平台都可以使用 CD 启动安装,详情请访问:
        http://www.openbsd.org/faq/faq4.html#Overview

默认创建的 ISO 文件不会带有任何的 packages,如果你需要将 packages 包含进去,
请阅读脚本中函数 FETCH_PKGS() 的说明。

以下是完整的脚本:


#!/bin/sh

# Author  : MichaelBibby <michaelbibby@gmail.com>
# Date    : 2006.07.24
# Purpose : Automatic download file sets and create an OpenBSD -release or
#           -snapshots ISO.
# Version : 0.2.1
# Usage   : ./mk_openbsd_iso.sh [3.9|4.0|snapshots] [i386|amd64|sparc64]

# ChangeLog:
# * 0.2 --> 0.2.1:
#        - Fix the bug when get value of CDROM_FS.
# * 0.1 --> 0.2:
#        - Add function FETCH_SRC to fetch source code and ports tarballs.
#        - Modify some temp directories and little adjustment.

VERSION="$1"        # Special OpenBSD version, like 3.9, 4.0, snapshots.
ARCH="$2"        # Maechine architecture, like i386, amd64.
TMP_ARCHIVE="$HOME/tmp/openbsd/$VERSION"        # Store all openbsd file sets.
SRC_ARCHIVE="$TMP_ARCHIVE/$VERSION"        # Store source code and ports tarball.
SETS_ARCHIVE="$TMP_ARCHIVE/$VERSION/$ARCH"        # Store all installation file sets.
PKGS_ARCHIVE="$TMP_ARCHIVE/$VERSION/$ARCH/packages" # Store all packages.

FETCH_CMD="wget"


# Check the following URL to choose a mirror near you:
# http://www.openbsd.org/ftp.html
#MIRROR="ftp://ftp.openbsd.org/pub/OpenBSD"
MIRROR="http://mirror.openbsd.org.cn/ftp"

USAGE()
{
        if [ X"$#" != X"2" ]; then
                echo "USAGE:        $0 VERSION ARCH"
                echo "e.g.:        $0 [3.9|4.0|snapshots] [i386|amd64|...]"
                exit 255
        fi
}

CHECK_APPS()
{
        # Set all nessessary applications into an ARRAY: APPS.
        APPS_ARRAY="mkisofs $FETCH_CMD"

        echo "Checking neccessary applications..."

        for i in $APPS_ARRAY
        do
                if [ ! $(whereis "$i") ]
                then
                        echo "ERROR:        $i is not installed, you should installed first"

                        case $i in
                                mkisofs)
                                        echo "mkisofs is always included in package 'cdrtools'.";;
                        esac

                        exit
                fi
        done
}

CHECK_DIRS()
{
        # Set all nessessary dir into an ARRAY: DIRS.
        DIRS_ARRAY="$SETS_ARCHIVE $SRC_ARCHIVE $PKGS_ARCHIVE"

        echo "Checking neccessary directories..."

        # Check and create dirs.
        for dir in ${DIRS_ARRAY}
        do
                if [ ! -d "$dir" ]; then
                        echo -ne "\tWARNNING: $dir NOT exist, creating it..."
                        mkdir -p $dir
                        echo "DONE"
                fi
        done
}

# Fetch OpenBSD's installation file sets, like base39.tgz, comp39.tgz.
FETCH_SETS()
{
        TMP_OB_FILES_SETS="/tmp/ob_file_sets"

        # If you want to specify which file sets will be contained in the iso file,
        # you should comment the following 2 lines, and create '/tmp/ob_file_sets'
        # manually, and then write the file sets' names in it. Finally, maybe you
        # want to comment the line following: 'rm -f $TMP_OB_FILES_SETS'.
        # ------------------------------------------------------------------------

        echo "Downloading OpenBSD file sets' index file..."
        $FETCH_CMD -O $TMP_OB_FILES_SETS $MIRROR/$VERSION/$ARCH/index.txt

        # ------------------------------------------------------------------------

        for i in $(cat $TMP_OB_FILES_SETS)
        do
                echo "Downloading file set: $i..."
                $FETCH_CMD -c -O $SETS_ARCHIVE/$i $MIRROR/$VERSION/$ARCH/$i
        done

        #rm -f $TMP_OB_FILES_SETS
}

FETCH_SRC()
{
        # Fetch source code and ports tarball.

        if [ X"$VERSION" == X"snapshots" ]; then
                FILE_LIST="ports.tar.gz"
        else
                # If you want to download XF4.tar.gz, just append it to $FILE_LIST.
                FILE_LIST="src.tar.gz sys.tar.gz ports.tar.gz"
        fi

        for i in $FILE_LIST
        do
                $FETCH_CMD -c -O $SRC_ARCHIVE/"$i" $MIRROR/$VERSION/"$i"
        done
}

FETCH_PKGS()
{
        TMP_OB_PKG_SETS="/tmp/ob_pkg_sets"

        # If you want to specify which packages will be contained in the iso file,
        # you should comment the following 2 lines, and create '/tmp/ob_pkg_sets'
        # manually, and then write the packages' name in it. Finally, maybe you
        # want to comment the line following: 'rm -f $TMP_OB_PKG_SETS'.
        # ------------------------------------------------------------------------

        echo "Downloading OpenBSD package sets' index file..."
        $FETCH_CMD -c -O $TMP_OB_PKG_SETS $MIRROR/$VERSION/packages/$ARCH/index.txt

        # ------------------------------------------------------------------------

        for i in $(cat $TMP_OB_PKG_SETS)
        do
                echo "Downloading package: $i..."
                $FETCH_CMD -O $PKGS_ARCHIVE/$i $MIRROR/$VERSION/packages/$ARCH/$i
        done

        #rm -f $TMP_OB_PKG_SETS
}

CREATE_ISO()
{
        CDROM_FS=$(basename ${SETS_ARCHIVE}/cdrom*.fs)

        MKISOFS_CMD="mkisofs -vrlTJV "OpenBSD_${VERSION}_$ARCH" \
        -b $VERSION/$ARCH/${CDROM_FS} \
        -c boot.catalog \
        -o $HOME/OpenBSD_${VERSION}_$ARCH.iso $TMP_ARCHIVE"

        $MKISOFS_CMD
}

# ----------- SCRIPT MAIN -------------
USAGE "$@"

clear
echo -e "\n\
\t# --------------------------------------------------------------------------#
\t# ------- We recommend you buy OpenBSD's Offical CD sets to support   ------#
\t# ------- ongoing development of OpenBSD. There are many good reasons ------#
\t# ------- to own an OpenBSD CD set:                                   ------#
\t# -------       http://www.openbsd.org/faq/faq3.html#BuyCD            ------#
\t# --------------------------------------------------------------------------#
\t# ------- Warnning: Not every platform supports all boot options. For ------#
\t# ------- more information, see also:                                 ------#
\t# -------       http://www.openbsd.org/faq/faq4.html#Overview         ------#
\t# --------------------------------------------------------------------------#
\t# ------- Note: The ISO file will only contain base installation file ------#
\t# ------- sets, so, if you want to include source code/ports and      ------#
\t# ------- packages in it, please uncomment the function at the end    ------#
\t# ------- of script, and read the note of function '\$FETCH_PKGS':     ------#
\t# -------       FETCH_SRC && \                                        ------#
\t# -------       FETCH_PKGS && \                                       ------#
\t# --------------------------------------------------------------------------#
"
sleep 10

CHECK_APPS && \
CHECK_DIRS && \
FETCH_SETS && \
#FETCH_SRC && \
#FETCH_PKGS && \
CREATE_ISO && \
echo "GOOD, ISO has been created:\n\t$HOME/OpenBSD_${VERSION}_${ARCH}.iso"

TOP

发新话题