`
dowhathowtodo
  • 浏览: 780339 次
文章分类
社区版块
存档分类
最新评论

这个脚本有问题,求会linux脚本的朋友帮修改一下哈:

 
阅读更多

这个脚本是linux上面做一个文件系统的,我在UML官网下的,有问题如下:

[root@zhoutianzuo azuo]# bash install_fs.sh 
Filesystem already created
Filesystem already mounted
going to fetch
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.


源脚本如下:

#!/bin/bash
# Settings !!!*** PLEASE MODIFY THESE ***!!!
export ARCH="i386"
export MIRROR="http://centos.ustc.edu.cn/centos/6.3/os/i386/Packages/"
export TMPDIR=`pwd`"/tmp"
export ROOT_FS=`pwd`"/CentOS6-x86-root_fs"
export RPM_DIR=`pwd`"/RPMS"
export CHROOTCMD="linux32 chroot"
export RPMCMD="rpm"
export PACKAGES="packages.$ARCH"
export ARCHES="$ARCH i686 noarch"
export DEBUG=""
export DUPES=""
export TEXT_BROWSER="lynx"


function doGetRPM() {
	rpmfile=""
	if [ ! -z "$DEBUG" ]; then
		echo "grep $1 $PACKAGES | grep $2 | wc -l"
	fi
	rpmfilescount=`grep ^$1 $PACKAGES | grep $2 | wc -l`
	#echo "filecount=$rpmfilescount"
	if [ "$rpmfilescount" -eq 0 ]; then
		if [ ! -z "$DEBUG" ]; then
			echo "No RPMs found for $1 - $2"
		fi
	else
		if [ "$rpmfilescount" == "1" ]; then
			# echo "Found "`$grep`
			rpmfile=`grep ^$1 $PACKAGES | grep $2`
		else
			if [ ! -z "$DEBUG" ]; then
				echo "Too many packages matching $1: $rpmfilescount"
			fi
			rpmfile=`grep ^$1 $PACKAGES | grep $2 | sort | head -n 1`
		fi
	fi
}
function getRPM() {
	for arch in $ARCHES; do
		doGetRPM $1- $arch
		if [ ! -z "$rpmfile" ]; then
			return
		fi
	done
	for arch in $ARCHES; do
		doGetRPM $1 $arch
		if [ ! -z "$rpmfile" ]; then
			return
		fi
	done
	echo "No RPM package found for $1"
	exit 1
}

function fetch() {
	base=$1
	getRPM $base
	local=$RPM_DIR"/$rpmfile"
	echo "fetch() base=$base, local=$local, rpmfile=$rpmfile"
	if [ ! -e "$local" ]; then
		echo "Downloading $base ($rpmfile)"
		wget -c -O $local "$MIRROR$rpmfile"
	fi
}

function rpminstall() {
	base=$1
	fetch $base
	stripped=`echo $base | sed 's+\.noarch++g' | sed 's+\.$ARCH++g'`
	exists="0"
	if [ ! -z "$DUPES" ]; then
		exists=`$RPMCMD -qa --root $TMPDIR | grep $stripped | wc -l`
	fi
	if [ "$exists" -ne "0" ]; then
		echo "skipped: $stripped"
	else
		$RPMCMD -Uvh --root $TMPDIR $local
		rm -fr $TMPDIR/var/lib/rpm/__db*
	fi
}
function rpminstallgroup() {
	echo "SIZE="$#
	list=""
	while [ $# -ne 0  ]
	do
		package=$1
		fetch $package

		stripped=`echo $1 | sed 's+\.noarch++g' | sed 's+\.$ARCH++g'`
		exists="0"
		if [ ! -z "$DUPES" ]; then
			exists=`$RPMCMD -qa --root $TMPDIR | grep $stripped | wc -l`
		fi
		if [ "$exists" -ne "0" ]; then
			echo "skipped: $stripped"
		else
			list="$list $local"
		fi
		shift
	done
	# echo	"installing list=$list"
	# echo "installcommand=$RPMCMD -ivh --root $TMPDIR $list"
	$RPMCMD -Uvh --root $TMPDIR $list
	rm -fr $TMPDIR/var/lib/rpm/__db*
}


# Making the filesystem
if [ ! -e "$ROOT_FS" ]; then
	dd if=/dev/zero of=$ROOT_FS bs=1024 count=1 seek=1572864
	mkfs.ext4 -L ROOT -F $ROOT_FS
else
	echo "Filesystem already created"
fi
if [ ! -e "$TMPDIR" ]; then
	mkdir $TMPDIR
	mount -o loop $ROOT_FS $TMPDIR
else
	echo "Filesystem already mounted"
fi
mkdir -p $RPM_DIR
#rpm bug?
mkdir -p $TMPDIR/var/lock/rpm
mkdir -p $TMPDIR/var/lib/rpm

if [ ! -e "$TMPDIR/var/lib/rpm" ]; then
	echo "initrpm:"
	echo "$RPMCMD --initdb --root $TMPDIR"
	$RPMCMD --initdb --root $TMPDIR
	rm -fr $TMPDIR/var/lib/rpm/__db*
fi
if [ ! -e "$TMPDIR/dev" ]; then
	mkdir $TMPDIR/dev
	mknod $TMPDIR/dev/null c 1 3
fi

#Get the list of packages
if [ ! -f $PACKAGES ]; then
    if [ -x "`which ${TEXT_BROWSER}`" ]; then
	${TEXT_BROWSER} -dump $MIRROR |grep rpm\$ |awk -F "CentOS/" '{print $2}' >$PACKAGES
    else
	echo "error :$PACKAGES does not exists, and I could not build it with ${TEXT_BROWSER}"
	echo "errot :$PACKAGES should contain a list of all rpms on your mirror site"
	exit 1
    fi
fi

echo "going to fetch"
# pretend to have a kernel (we don't need one):
KERNEL=`grep kernel-2.6 $PACKAGES`
fetch $KERNEL
$RPMCMD -Uvh --justdb --force --nodeps --root $TMPDIR $local
rm -fr $TMPDIR/var/lib/rpm/__db*

mkdir -p $TMPDIR/etc
# create an /etc/fstab
echo "LABEL=ROOT      /               auto    defaults                1   1" >>$TMPDIR/etc/fstab
echo "none            /dev/pts        devpts  gid=5,mode=620          0   0" >>$TMPDIR/etc/fstab
echo "none            /proc           proc    defaults                0   0" >>$TMPDIR/etc/fstab
echo "tmpfs           /tmp            tmpfs   defaults,size=768M      0   0" >>$TMPDIR/etc/fstab

mkdir -p $TMPDIR/usr/kerberos

# Installing the base packages
# no deps for these - got problems otherwise...
packages="glibc-common glibc libsepol pam passwd usermode setup filesystem basesystem util-linux libgcc tzdata compat-libtermcap zlib zip man-pages bash ncurses info gawk vim-common libattr libacl libstdc++ pcre grep cracklib-dicts glib2 centos-release chkconfig sed iputils rootfiles ethtool audit-libs popt libsysfs sysfsutils cpio less gzip readline tar db4 iproute mingetty libselinux libsemanage sysvinit binutils module-init-tools hwdata logrotate rsyslog udev procps diffutils libcap vim-minimal findutils device-mapper e2fsprogs-libs e2fsprogs net-tools shadow libudev device-mapper-libs lvm2-libs lvm2 MAKEDEV psmisc bzip2-libs libxml crypto-utils expat sqlite tcp_wrappers gdbm coreutils-libs gmp coreutils cracklib python openssl libgssglue krb5-libs libselinux-python initscripts db4 glibc-headers audit-libs-python policycoreutils libselinux-python ustr libsemanage bzip2 dash kbd dracut dmraid nss-softokn nss fipscheck python-iniparse"
for package in $packages; do
	fetch $package
	$RPMCMD -Uvh --force --noscripts --nodeps --root $TMPDIR $local
	rm -fr $TMPDIR/var/lib/rpm/__db*
done
mkdir $TMPDIR/etc/profile.d

$CHROOTCMD $TMPDIR useradd rpm
packages="rpm rpm-libs"
for package in $packages; do
	fetch $package
	$RPMCMD -Uvh --force --nodigests --noscripts --nodeps --root $TMPDIR $local
	rm -fr $TMPDIR/var/lib/rpm/__db*
done

# some extras
packages="which nspr python-libs libidn libssh2 cyrus-sasl-lib openldap nss-util nss-softokn-freebl libcom_err libcurl curl python-pycurl ca-certificates dbus-libs pakchois libgpg-error libgcrypt libtasn1 gnutls xz-libs python-iniparse keyutils-libs crontabs cronie cronie-anacron krb5-libs m2crypto python-urlgrabber elfutils-libelf elfutils-libs elfutils fipscheck-lib openssh ncurses-base ncurses-libs libedit openssh-clients tcp_wrappers-libs tcp_wrappers openssh-server wget elfutils lua file-libs file dhcp db4 db4-utils  libffi libusb- libuser libblkid libuuid libcgroup "
for package in $packages; do
	rpminstall $package
done
rpminstallgroup libproxy libproxy-bin libproxy-python
rpminstallgroup rpm rpm-libs
for package in pth pinentry gnupg2 gpgme pygpgme neon rpm-python yum-metadata-parser; do
	rpminstall $package
done
rpminstallgroup yum-[0-9] yum-plugin-fastestmirror
for package in yum-plugin-keys yum-plugin-post-transaction-actions yum-plugin-protectbase yum-utils; do
	rpminstall $package
done
echo "cleaning rpm db"

# re-install yum/rpm from inside...
mount -t proc none $TMPDIR/proc
cp /etc/resolv.conf $TMPDIR/etc

rm -f $TMPDIR/var/lib/rpm/*
#rm -f $TMPDIR/var/lib/rpm/__db*
#for db in Group Requirename Obsoletename Sigmd5 Sha1header Triggername Conflictname Basenames Requirename; do
#	rm -fr $TMPDIR/var/lib/rpm/${db}
#done
rm -fr $TMPDIR/var/cache/yum
$CHROOTCMD $TMPDIR rpm --rebuilddb
fetch centos-release
cp $local $TMPDIR/
$CHROOTCMD $TMPDIR rpm -Uvh --nofiledigest --nodigest --nosignature --force /centos-release*rpm
rm $TMPDIR/centos-release*rpm
$CHROOTCMD $TMPDIR rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
$CHROOTCMD $TMPDIR rpm --import /etc/pki/rpm-gpg/*
mkdir -p $TMPDIR/var/cache/yum/$ARCH/6/base/packages/
cp RPMS/*rpm $TMPDIR/var/cache/yum/$ARCH/6/base/packages/
mkdir -p $TMPDIR/var/cache/yum/$ARCH/6/updates/packages/
cp RPMS/*rpm $TMPDIR/var/cache/yum/$ARCH/6/updates/packages/
#$CHROOTCMD $TMPDIR yum reinstall --releasever=6 -y --nogpgcheck centos-release
#$CHROOTCMD $TMPDIR rpm --import /etc/pki/rpm-gpg/*
$CHROOTCMD $TMPDIR yum install -y yum basesystem
#$CHROOTCMD $TMPDIR yum install --releasever=6 -y --nogpgcheck yum basesystem
#$CHROOTCMD $TMPDIR rpm --import /etc/pki/rpm-gpg/*
$CHROOTCMD $TMPDIR yum install -y openssh-server openssh-clients
$CHROOTCMD $TMPDIR yum update
rm -fr $TMPDIR/var/cache/yum

# ldconfig the newly installed libraries
ldconfig -r $TMPDIR

# create the ubd devices
if [ ! -e "$TMPDIR/dev/ubda" ]; then
	if [ -e "$TMPDIR/dev" ]; then
		for ((i=0; i<8; i++))
		do
			let=$(echo $i|tr '0-7' 'a-z')
			mknod $TMPDIR/dev/ubd$let b 98 $[16 * $i]
			for ((p=1; p<=16; p++)) do
				mknod $TMPDIR/dev/ubd$let$p b 98 $[16 * $i + $p]
			done
		done
	else
		echo "/dev not found!"
		exit 1
	fi
fi
# basic devices so we can boot without an initrd:
cp -avpr /dev/console /dev/null /dev/zero $TMPDIR/dev
mkdir $TMPDIR/dev/pts

# use yum to update the system
echo "/dev/ROOT	/ ext4 rw 0 0" > $TMPDIR/etc/mtab

# tweak the inittab to only use tty0 and add it to securetty
for cf in /etc/init/start-ttys.conf /etc/sysconfig/init; do
	mv $cf $cf.bak
	cat $cf.bak | sed 's/1-6/0/g' > $cf
	rm $cf.bak
done
echo "tty0" >> /etc/securetty

#enable shadow passwords
$CHROOTCMD $TMPDIR pwconv

#Remove the root password
sed -i -e "s/^root:\*:/root::/" $TMPDIR/etc/shadow

# We need an /etc/hosts file!
echo "127.0.0.1		localhost	localhost.localdomain" > $TMPDIR/etc/hosts

# make the first network interface start with dhcp
# Use ifcfg-eth0 from currrent directory if we have it, otherwise create
$CHROOTCMD $TMPDIR yum install -y dhclient
if [ ! -f "ifcfg-eth0" ]; then
    echo "DEVICE=eth0" >> $TMPDIR/ifcfg-eth0
    echo "BOOTPROTO=dhcp" >> $TMPDIR/ifcfg-eth0
    echo "ONBOOT=yes" >> $TMPDIR/ifcfg-eth0
else
    cp "ifcfg-eth0"  $TMPDIR/ifcfg-eth0
fi
cp $TMPDIR/ifcfg-eth0 $TMPDIR/etc/sysconfig/networking/devices/ifcfg-eth0
cp $TMPDIR/ifcfg-eth0 $TMPDIR/etc/sysconfig/networking/profiles/default/ifcfg-eth0
mv $TMPDIR/ifcfg-eth0 $TMPDIR/etc/sysconfig/network-scripts/ifcfg-eth0
echo "NETWORKING=yes" > $TMPDIR/etc/sysconfig/network
echo "HOSTNAME=localhost.localdomain" >> $TMPDIR/etc/sysconfig/network

echo "" > $TMPDIR/etc/resolv.conf

# clear rest of image
dd if=/dev/zero of=$TMPDIR/blank >& /dev/null
sync
rm $TMPDIR/blank

umount $TMPDIR/proc
umount $TMPDIR
rmdir $TMPDIR
echo "Done!"


分享到:
评论

相关推荐

    Linux通过Shell脚本命令修改密码的两种方式

    使用脚本修改密码 很多时候我们可能需要远程执行服务器上的脚本来修改账号密码,此时就没有办法进行交互了。 此时可以使用如下两种方式修改密码: 方式1: echo password | passwd testuser --stdin &gt; /dev

    批量检测端口脚本用于linux

    用于批量验证多个机器的多个端口通断情况,...2、修改脚本中的FILE='/home/wangzeyang/ip.txt'这一行里面的ip文件路径。 3、直接运行potest.sh,等跑完以后,在同一个路径下会生成re.txt,里面记录所有端口的通断状态。

    远程批量修改linux服务器密码的脚本归类.pdf

    远程批量修改linux服务器密码的脚本归类.pdf

    linux自动写路由表脚本

    针对suse linux定制开发,主要解决手动添加路由信息重启后丢失的问题,使用该脚本增加修改路由可以一劳永逸,试用下吧,欢迎交流。 Usage: proute {add|del|refresh|show|sync} HOST Netmask Gateway Modify routing...

    Linux shell 脚本 markdown文本编辑

    有关几个shell脚本的编写,如:编写一个shell脚本程序,它带一个命令行参数,这个参数是一个文件。如果这个文件是一个普通文件,则打印文件所有者的名字和最后的修改日期...加入了自己的注释理解

    linux设置ipv6的脚本

    在linux上配置ipv6,在arch,redHeat,fedora,Suse上实测有效

    Linux系统防CC攻击自动拉黑IP增强版(Shell脚本)

    虽然,可以通过修改本地hosts文件来解决这个问题,但是还是想暂时取消CDN加速和防护来测试下服务器的性能优化及安全防护。 前天写的Shell脚本是加入到crontab计划任务执行的,每5分钟执行一次,今天实际测试了下,可...

    远程批量修改linux服务器密码的脚本

    需要对服务器进行批量的修改root密码,还要在每台服务器新建一个用户,如果一个一个登到的服务器上进行修改的话,估计一个下午又没有了,首先想到的是我最喜欢的php,其中有个ssh2 模块,不得不承认用php 来处理这样...

    spring boot/spring cloud项目启动脚本,默认名称:start.sh

    linux服务器,springboot,spring cloud、spring cloud alibaba等项目启动脚本 下载脚本, 1,上传脚本至jar包同级目录 2,更改脚本: jar包名称 项目文件路径 日志路径(包含日志名称) 脚本已配置好jvm优化...

    Linux常见命令与shell脚本

    Linux常用命令 2 1.1 su用户切换 2 1.2 useradd 添加用户 2 1.3 passwd修改口令 2 1.4 ls查看文件/目录 3 1.5 cd改变工作目录 4 1.6 pwd显示工作目录 4 1.7 mkdir创建目录 5 1.8 rmdir删除空目录 5 1.9 cp文件/目录...

    批量修改linux密码的脚本

    批量修改linux密码的脚本,拿来直接用,在IP列表里写上你想修改的IP,后面加上密码,回车就改好了。

    shell脚本修改linux网卡ifcfg-eth信息

    shell脚本修改linux网卡ifcfg-eth信息 说明:此脚本作用 1)当发现网卡为dhcp模式时,修改为static模式,并添加IP等信息; 2)修改网卡IP为指定的IP

    linux下自动备份数据脚本

    linux下自动备份数据文件脚本,只需要修改日期,按日期备份,定时删除。

    AssettoCorsaLinuxScripts:用于控制交流服务器Linux脚本

    AssettoCorsaLinux脚本用于控制交流服务器Linux脚本。先决条件有一个名为assettocorsa的用户。已经按照此处的说明安装了assettocorsa服务器: ://b.joaoubaldo....

    aliyun-ddns自动解析域名ip支持ipv6服务器nodejs脚本linux版本.zip

    aliyun-ddns自动解析域名ip支持ipv6服务器nodejs脚本linux版本 使用说明: 一、获取阿里AccessKey ID和AccessKey Secret。 二、修改config.json配置,填写AccessKey ID、AccessKey Secret、域名地址、解析类型【默认...

    linux脚本批量创建用户名和密码

    文章目录说明先查询是否有这账号修改为创建...当然 有些有风险的操作还是建议先 测试一下,再放进脚本 对自己有自信固然是好事 但不要盲目自信。 先查询是否有这账号 可以忽略该步。 代码(部分): cat /etc/passwd

    linux下配置bond脚本

    脚本为bond0,可直接在linux系统下执行,修改相应ip地址即可

    linux-更改Linux服务器终端显示语言为中文的脚本

    更改Linux服务器终端显示语言为中文的脚本

    Linux打包部署服务脚本

    Linux打包部署服务脚本,前后端分离的可用,其他版本的可用下载下来自己修改一下,sh文件直接启动即可

    Linux-CentOS 7.6 系统初始化脚本

    内容概括:禁用防火墙,修改selinux,修改yum源,安装常用软件,同步系统时间,DNS域名配置,安装JDK-18,Tomcat,Mysql8,设置开机启动项-更新时间。 适合人群:Linux初学者 操作:用xftp将文件导入到Linux中,...

Global site tag (gtag.js) - Google Analytics