bash编程之 ~制作Mini Linux系统~

说明1:在一个Linux宿主机系统上,通过以上步骤,可以制作一个微小的Linux系统(可以放置在U盘中等),然后在其它的主机(虚拟机或者物理机)上运行,以实现最小化定制系统的目的。

说明2:上图中黑色部分是主要流程,蓝色部分是详细流程,棕色部分是注释说明等

 

对于上图中几点细节的详解:

阶段说明
目标磁盘分区格式化挂载目标磁盘是/dev/sdb,大小为1G,分区sdb1:100M,sdb2:500M即可
安装grub至目标磁盘
复制内核和initrd文件VERSION是内核版本,如2.6.32-358.el6.x86_64
创建目标主机的根文件系统
移植常用命令

移植常用命令的脚本

在移植后的bash程序所在的目录下创建sh软链接

为grub提供配置文件grub配置文件
创建sbin/init脚本init脚本
 
如下图所示linux 启动详解:

说明1:上图是Linux系统启动时的详细流程,其中黑色部分为主流程分支,蓝色部分为详细流程分支,绿色部分是注释部分。大家可点击查看大图。

说明2:增加了kernel和initrd间的关系,解决了鸡和蛋的问题^_^

关于GRUB的系统文件/boot/grub/grub.conf的说明见下图

wKioL1MUc9ez5uRHAAqVSvcMyy8049.jpg

!/bin/bash
#
##function fdisk
BOOT=/mnt/boot  
SYSROOT=/mnt/sysroot 
mkdevice () {
    dd if=/dev/zero of=$1 bs=512 count=1 &> /dev/null
    [ $? -ne 0 ] && return 67
    echo '
        n
        p
        1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
        +500M
        n
        p
        2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
        +9G
        w' | fdisk $1 &> /dev/null
    [ $? -ne 0 ] && return 68
    sync
    sleep 2
    mkfs.ext4 ${1}1 &> /dev/null
    PAPT1=$?
    mkfs.ext4 ${1}2 &> /dev/null
    PAPT2=$?
    [ $PAPT1 -ne 0 -o $PAPT2 -ne 0 ] && return 69
}

#umount for disk directory
umountall () {
    for PAPT in `fdisk -l $1 | grep -o "${1}[0-9]\{1,\}"`; do
        fuser -km $PAPT &> /dev/null
        umount $PAPT &> /dev/null
    done
}
#mount for disk directory 
mountall () {
    [ -d $BOOT ] || mkdir -p $BOOT
    [ -d $SYSROOT ] || mkdir -p $SYSROOT
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
    mount  ${1}1 $BOOT
    mount  ${1}2 $SYSROOT
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
}
#grub install for directory
instgrub () {
    GRUBROOT=`dirname $BOOT`
    grub-install --root-directory=$GRUBROOT $1
}

#mkdir for directory and file system
mkrootfs () {
mkdir -p $SYSROOT/{proc,boot,sys,dev,tmp,lib,lib64,bin,sbin,root,home,opt,mnt,media,misc} &> /dev/null
mkdir -p $SYSROOT/usr{share/{man,doc},bin,sbin,local,src,lib,lib64} &> /dev/null
mkdir -p $SYSROOT/var/{log,run,lock,spool,tmp} &> /dev/null
mkdir -p $SYSROOT/lib/{modules,module} &> /dev/null
mkdir -p $SYSROOT/lib64/{modues,module} &> /dev/null
cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko  $SYSROOT/lib/modules/
cp  /boot/vmlinuz-2.6.32-431.el6.x86_64  $BOOT/vmlinuz
cp /boot/initramfs-2.6.32-431.el6.x86_64.img $BOOT/initramfs.img
echo -e  "default=0 \ntimeout=5 \ntitle MyCentos root (hd0,0) \nkernel /vmlinuz ro  root=/dev/sda2 quiet selinux=0 init=/sbin/init
initrd /initramfs.img " > $BOOT/grub/grub.conf
touch $SYSROOT/sbin/init && cat /root/init > $SYSROOT/sbin/init && chmod +x $SYSROOT/sbin/init
}

Bcp () {
    COMMAND=`which  --skip-alias $1`
    #echo COMMAND
    COMPATH=`dirname $COMMAND`
    #echo $COMPATH
    [ -d $SYSROOT$COMPATH ] || mkdir -p $SYSROOT$COMPATH
    [ -e $SYSROOT$COMMAND ]  || cp $COMMAND $SYSROOT$COMPATH
    for lib in `ldd $COMMAND | grep -o  "/.*lib[^[:space:]]*"` ; do
    LIBPATH=`dirname $lib`
    [ -d $SYSROOT$LIBPATH ] || mkdir -p $SYSROOT${LIBPATH}
    [ -e $SYSROOT$lib ] || cp $lib $SYSROOT${LIBPATH}
    done
}

main () {
    umountall $IDISK
    mkdevice $IDISK
    mountall $IDISK
    instgrub $IDISK
    mkrootfs
  while true; do
read -p "A CommanD : " CMD
case $CMD in
q|Q|quit|exit)
    echo "Finished."
    exit 0
;;
*)
 ! which $CMD &> /dev/null && echo "Wrong Command." && continue
    Bcp $CMD
    ;;
esac
done
}
.
read -p "A disk : " IDISK   
if ! fdisk -l | grep "^Disk $IDISK" &> /dev/null; then
    echo "$IDISK is not a disk."
    exit 5
fi
read -p "Destroy all date on $IDISK, contine (y/n) : " ANSWER
case $ANSWER in
y)
main
;;
n)
exit
;;
*)
echo "Wrong option."
;;
esac
cat/root/init> $SYSROOT/sbin/init&& chmod+x $SYSROOT/sbin/init

 

/root/init的内容是:

#!/bin/bash
#
echo -e "\tWelcome to \033[34m MyCentos\033[0m Linux "
mount -n -t proc porc /proc
mount -n -t sysfs sysfs /sys
insmod /lib/modules/e1000.ko
[ $? -eq 0 ] && echo -e "Load e1000 module succeeded                    [ \033[32mOK\033[0m ]"
ifconfig lo 127.0.0.1/8
ifconfig eth0 172.16.251.111/16
mount -n -o remount,rw /dev/sda2 /
/bin/bash
#!/bin/bash
                #copy order and it's libs of depend
                noorder(){
                        if ! which $cmd &> /dev/null;then
                                echo "No such command!"
                                return 3
                        fi
                        orderpath=`which --skip-alias $cmd`
                }
                cporder(){
                        [ -d /mnt/sysroot`dirname $orderpath` ] || mkdir -p /mnt/sysroot`dirname $orderpath`
                        [ -f /mnt/sysroot$orderpath ] || cp -r $orderpath /mnt/sysroot$orderpath
                }
                cplib(){
                        for lib in `ldd $orderpath | grep -o "/[^[:space:]]\{1,\}"`;do
                                [ -d /mnt/sysroot`dirname $lib` ] || mkdir -p /mnt/sysroot`dirname $lib`
                                [ -f /mnt/sysroot`basename $lib` ] || cp -r $lib /mnt/sysroot$lib
                        done
                }
                while true;do
                        read -p "Please enter a command:" cmd
                        if [[ "$cmd" = "q" || "$cmd" = "Q" ]];then
                                echo "You choice quit,now quit!"
                                exit 0
                        else
                                noorder
                                [ $? == 3 ] && continue
                                cporder
                                cplib
                        fi
                done

 

转载于:https://www.cnblogs.com/xiaocen/p/3717693.html

安装Anaconda和RStudio在Linux上可以通过以下步骤完成: 1. 首先,下载Miniconda3,它是Anaconda的轻量级版本。在终端中使用wget命令下载Miniconda3的安装脚本:wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh 。 2. 安装Miniconda3。使用bash命令执行下载的安装脚本:bash Miniconda3-latest-Linux-x86_64.sh -b -f 。这将安装Miniconda3到默认位置。 3. 加载Miniconda3环境。在终端中执行以下命令:~/miniconda3/condabin/conda init 。这将配置您的终端以使conda命令可用。 4. 安装RStudio。使用以下命令在终端中安装RStudio:sh Miniconda3-latest-Linux-x86_64.sh 。 5. 安装Anaconda的R语言环境。在终端中执行以下命令:conda install -c r r-base 。 6. 现在您已经成功安装了Anaconda和RStudio。您可以在终端中输入"rstudio"命令启动RStudio,开始使用它来进行R编程了。 总结起来,安装Anaconda并在Linux上安装RStudio可以通过以下步骤完成: 1. 下载Miniconda3的安装脚本。 2. 执行安装脚本来安装Miniconda3。 3. 加载Miniconda3环境。 4. 安装RStudio。 5. 安装Anaconda的R语言环境。 6. 启动RStudio并开始使用。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Windows10安装Linux系统Ubuntu 20.04LTS,轻松使用生信软件,效率秒杀虚拟机](https://blog.csdn.net/woodcorpse/article/details/108250916)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux+conda+R+Rstudio下载安装环境全方面配置](https://blog.csdn.net/qq_41728601/article/details/125757419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值