# Linux 配置Arm开发环境脚本 ```bash #!/bin/bash # ------------------------------------------------------------------------------- # Filename: Configuring_Ubuntu.sh # Revision: 1.1 # Date: 2020/01/10 # Author: hceng # Author: li # Email: huangcheng.job@foxmail.com # Website: www.100ask.net # Function: Configuring the Ubuntu host environment. # Notes: Currently only supports Ubuntu16 and Ubuntu18. # ------------------------------------------------------------------------------- # # Description: #1.Check env. # 1.1 check network # 1.2 check use root # 1.3 check set name #2.Install common software and configuration. # 2.1 configure vim # 2.2 configure tftp # 2.3 configure nfs # 2.4 configure samba #3.Install system tool for Linux or Android # # ------------------------------------------------------------------------------- #define echo print color. RED_COLOR='\E[1;31m' PINK_COLOR='\E[1;35m' YELOW_COLOR='\E[1;33m' BLUE_COLOR='\E[1;34m' GREEN_COLOR='\E[1;32m' END_COLOR='\E[0m' #Set linux host user name. user_name=book # Check network. check_network() { ping -c 1 www.baidu.com > /dev/null 2>&1 #如果上次执行结果成功 返回0 否则为1 if [ $? -eq 0 ];then #[ $? -eq 0 ] 如果上次执行结果成功 返回0 否则为1 echo -e "${BLUE_COLOR}Network OK.${END_COLOR}" else echo -e "${RED_COLOR}Network failure!${END_COLOR}" exit 1 fi } # Check user must root. # if [ $UID -ne 0 ]; then # echo Non root user. Please run as root. # else # echo Root user # fi check_root() { if [ $(id -u) != "0" ]; then #判断是否是root用户,如果是 ==0 echo -e "${RED_COLOR}Error: This script must be run as root!${END_COLOR}" exit 1 fi } # Check set linux host user name. 如果没有book 用户就新建个这样的用户密码是123456 check_user_name() { cat /etc/passwd|grep $user_name #在 /etc/passwd里面查找 book, if [ $? -eq 0 ];then #如果存在book用户,就ok echo -e "${BLUE_COLOR}Check the set user name OK.${END_COLOR}" else # 不存在book用户,创建这个用户,密码是123456,组是root sudo useradd -m $user_name -G root -p 123456 echo -e "123456\n123456" | sudo passwd $user_name sudo sh -c "echo \"$user_name ALL=(ALL:ALL) ALL\" >> /etc/sudoers" echo -e "${RED_COLOR}Add book user !${END_COLOR}" fi } # Check the results of the operation. # $0: 脚本本身文件名称 # $1: 命令行第一个参数,$2为第二个,以此类推 # $*: 所有参数列表 # $@: 所有参数列表 # $#: 参数个数 # $$: 脚本运行时的PID # $?: 脚本退出码,上个命令或者函数执行后退出代码 check_status() { ret=$? if [ "$ret" -ne "0" ]; then #获取上个命令的退出状态,如果为0,表示没有错误,否则有错误 直接退出 echo -e "${RED_COLOR}Failed setup, aborting..${END_COLOR}" exit 1 fi } # Get the code name of the Linux host release to the caller. # book@100ask:~$ lsb_release -a # No LSB modules are available. # Distributor ID: Ubuntu # Description: Ubuntu 18.04.2 LTS # Release: 18.04 # Codename: bionic # book@100ask:~$ lsb_release -a |grep Codename: # No LSB modules are available. # Codename: bionic # book@100ask:~$ lsb_release -a |grep Codename: | awk {'print $2'} # No LSB modules are available. # bionic get_host_type() { local __host_type=$1 local the_host=`lsb_release -a 2>/dev/null | grep Codename: | awk {'print $2'}` eval $__host_type="'$the_host'" } # Select menu menu() { cat < /home/$user_name/.vim_runtime/my_configs.vim chown -R $user_name /home/$user_name/.vim_runtime chmod u+x /home/$user_name/.vim_runtime/install_awesome_vimrc.sh su - $user_name -s /home/$user_name/.vim_runtime/install_awesome_vimrc.sh } # Configure tftp. 配置tftp 服务器 tftp_configure() { tftp_file=/home/$user_name/tftpboot if [ ! -d "$tftp_file" ];then mkdir -p -m 777 $tftp_file fi grep "/home/book/tftpboot" /etc/default/tftpd-hpa 1>/dev/null if [ $? -ne 0 ];then sed -i '$a\TFTP_DIRECTORY="/home/book/tftpboot"' /etc/default/tftpd-hpa sed -i '$a\TFTP_OPTIONS="-l -c -s"' /etc/default/tftpd-hpa fi service tftpd-hpa restart } # Configure nfs. 配置NFS 服务器 nfs_configure() { nfs_file=/home/$user_name/nfs_rootfs if [ ! -d "$nfs_file" ];then mkdir -p -m 777 $nfs_file fi grep "/home/book/nfs_rootfs" /etc/exports 1>/dev/null if [ $? -ne 0 ];then sed -i '$a\/home/book/nfs_rootfs *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)' /etc/exports #todo fi service nfs-kernel-server restart } # Configure samba. 配置Samba服务器 samba_configure() { local back_file=/etc/samba/smb.conf.bakup if [ ! -e "$back_file" ];then cp /etc/samba/smb.conf $back_file fi check_status grep "share_directory" /etc/samba/smb.conf 1>/dev/null if [ $? -ne 0 ];then sed -i \ '$a[share_directory]\n\ path = \/home\/book\n\ available = yes\n\ public = yes\n\ guest ok = yes\n\ read only = no\n\ writeable = yes\n' /etc/samba/smb.conf fi /etc/init.d/samba restart #chmod -R 777 /home/book/ } # Execute an action. FA_DoExec() { echo -e "${BLUE_COLOR}==> Executing: '${@}'.${END_COLOR}" eval $@ || exit $? } # Install common software and configuration 安装公用软件 ssh git vim tftp nfs samba install_common_software() { apt-get update check_status local install_software_list=("ssh" "git" "vim" "tftp" "nfs" "samba") echo -e "${BLUE_COLOR}install_software_list: ${install_software_list[*]}.${END_COLOR}" #install ssh if (echo "${install_software_list[@]}" | grep -wq "ssh");then #判断字符串 是否有ssh w:-w 全匹配某一列 -q 不打印信息 apt-get -y install openssh-server && echo -e "${BLUE_COLOR}ssh install completed.${END_COLOR}" fi #install git if (echo "${install_software_list[@]}" | grep -wq "git");then apt-get -y install git && echo -e "${BLUE_COLOR}git install completed.${END_COLOR}" fi #install and configure vim #if (echo "${install_software_list[@]}" | grep -wq "vim");then #apt-get -y install vim && vim_configure && echo -e "${BLUE_COLOR}vim install completed.${END_COLOR}" #fi #install and configure tftp if (echo "${install_software_list[@]}" | grep -wq "tftp");then apt-get -y install tftp-hpa tftpd-hpa && tftp_configure && echo -e "${BLUE_COLOR}tftp install completed.${END_COLOR}" fi #install and configure nfs if (echo "${install_software_list[@]}" | grep -wq "nfs");then apt-get -y install nfs-kernel-server && nfs_configure && echo -e "${BLUE_COLOR}nfs install completed.${END_COLOR}" fi #install and configure samba if (echo "${install_software_list[@]}" | grep -wq "samba");then apt-get -y install samba && samba_configure && echo -e "${BLUE_COLOR}samba install completed.${END_COLOR}" fi } # Install software for Linux install_linux_software() { local ubuntu16=("xenial") local ubuntu18=("bionic") get_host_type host_release # host_release= bionic if [ "$host_release" = "$ubuntu16" ] then FA_DoExec apt-get install gcc make git vim python net-tools openssh-server \ python-dev build-essential subversion \ libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext \ gfortran libssl-dev libpcre3-dev xlibmesa-glu-dev libglew1.5-dev \ libftgl-dev libmysqlclient-dev libfftw3-dev libcfitsio-dev graphviz-dev \ libavahi-compat-libdnssd-dev libldap2-dev libxml2-dev p7zip-full \ libkrb5-dev libgsl0-dev u-boot-tools lzop bzr device-tree-compiler -y else if [ "$host_release" = "$ubuntu18" ] then echo '* libraries/restart-without-asking boolean true' | sudo debconf-set-selections FA_DoExec apt-get install gcc make git vim python net-tools openssh-server \ python-dev build-essential subversion \ libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext \ gfortran libssl-dev libpcre3-dev xlibmesa-glu-dev libglew1.5-dev \ libftgl-dev libmysqlclient-dev libfftw3-dev libcfitsio-dev graphviz-dev \ libavahi-compat-libdnssd-dev libldap2-dev libxml2-dev p7zip-full bzr \ libkrb5-dev libgsl0-dev u-boot-tools lzop -y else echo "This Ubuntu version is not supported" exit 0 fi fi } # Install software for Android install_android_software() { local ubuntu16=("xenial") local ubuntu18=("bionic") get_host_type host_release if [ "$host_release" = "$ubuntu16" ] then FA_DoExec add-apt-repository ppa:openjdk-r/ppa FA_DoExec apt-get update FA_DoExec apt-get install openjdk-7-jdk FA_DoExec update-java-alternatives -s java-1.7.0-openjdk-amd64 FA_DoExec java -version FA_DoExec apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 libc6-dev-i386 \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib \ tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \ dpkg-dev libsdl1.2-dev libesd0-dev \ git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib \ lib32ncurses5-dev x11proto-core-dev libx11-dev \ lib32z-dev ccache squashfs-tools libncurses5-dev pngcrush schedtool libxml2\ libgl1-mesa-dev unzip m4 lzop libc6-dev lib32z1-dev \ libswitch-perl libssl1.0.0 libssl-dev else if [ "$host_release" = "$ubuntu18" ] then FA_DoExec apt-get install openjdk-8-jdk openjdk-8-jre FA_DoExec java -version FA_DoExec apt-get install m4 g++-multilib gcc-multilib \ lib32ncurses5-dev lib32readline6-dev lib32z1-dev flex curl bison FA_DoExec apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib \ git flex bison gperf build-essential libncurses5-dev:i386 \ dpkg-dev libsdl1.2-dev libesd0-dev \ git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib \ libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev \ libgl1-mesa-dev libxml2-utils xsltproc unzip m4 \ lib32z1-dev ccache make tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lzop -y else echo "This Ubuntu version is not supported" exit 0 fi fi } check_network check_root check_user_name menu while true do read -p "please input your choice:" ch case $ch in 1) install_common_software install_linux_software echo -e "${GREEN_COLOR}===================================================${END_COLOR}" echo -e "${GREEN_COLOR}== Configuring for Linux development complete! ==${END_COLOR}" echo -e "${GREEN_COLOR}===================================================${END_COLOR}" echo -e "${BLUE_COLOR}TFTP PATH: $tftp_file ${END_COLOR}" echo -e "${BLUE_COLOR}NFS PATH: $nfs_file ${END_COLOR}" echo -e "${BLUE_COLOR}SAMBA PATH: /home/book/ ${END_COLOR}" su $user_name ;; 2) install_common_software install_linux_software install_android_software echo -e "${GREEN_COLOR}===================================================${END_COLOR}" echo -e "${GREEN_COLOR}== Configuring for Android development complete! ==${END_COLOR}" echo -e "${GREEN_COLOR}===================================================${END_COLOR}" echo -e "${BLUE_COLOR}TFTP PATH: $tftp_file ${END_COLOR}" echo -e "${BLUE_COLOR}NFS PATH: $nfs_file ${END_COLOR}" echo -e "${BLUE_COLOR}SAMBA PATH: /home/book/ ${END_COLOR}" su $user_name ;; 3) break exit 0 ;; *) clear echo "Sorry, wrong selection" exit 0 ;; esac done exit 0 ```