• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            webmin 之 setup.sh 腳本分析

            #find install directory 
            cd 'dirname $0' 
            if [ -x /bin/pwd ]; then 
            wadir
            ='/bin/pwd' 
            else 
            wadir
            ='pwd'
            fi 
            #查找并獲得安裝目錄 -> wadir 
            ver='cat $wadir/version' 
            #獲得安裝版本 
            echo "*****************" 
            . 
            #顯示用戶提示信息 
            id | grep "uid=1<" >/dev/null 
            if [ $? !="0" ]; then 
            echo 
            "ERROR:"
            echo 
            ""
            exit 1
            fi 
            #檢查是否為root 安裝否則提示出錯,程序推出 
            #才知道還有id 這么個命令,,見笑了 

            echo "Installing webmin in $ wadir " 
            allmods
            ='cd $wadir; ls */module.info | sed -e 's/\/module.info//g' | xargs e 
            cho
            ' 
            echo 
            "" 
            #獲取所有的可安裝模塊信息 

            printf "Config file directory [/etc/webmin]:" 
            . 
            . 
            . 
            if [ "$config_dir" = ""]; then 
            config_dir 
            = /etc/webmin 
            fi 
            # 詢問配置文件目錄 
            abspath='echo $config_dir | grep "^/"' 
            if [ "$abspath" = "" ]; then 
            echo 
            "Config directory must be an absolute path" 
            echo 
            "" 
            exit 2 
            fi 
            #檢查配置文件目錄是否合法 
            if [ ! -$config_dir ]; then 
            mkdir $config_dir 
            if [ $? !=0 ]; then 
            echo 
            "ERROR: failed to create directory $config_dir" 
            echo 
            "" 
            exit 2 
            fi 
            fi 
            #創建配置目錄,并檢查是否成功 
            if [ -"$config_dir/config" ]; then 
            echo 
            "Found existing Webmin configuration in $config_dir" 
            echo 
            "" 
            upgrading
            =1 
            fi 
            #檢查配置文件是否存在,并置標志upgrading 
            ## 注,版本更新部分暫略 


            ls 
            $config_dir | grep -v rpmsave >/dev/null 2>&1 
            if [ "$?" = "0" -"$config_dir" != "/etc/webmin" ]; then 
            echo 
            " 

            exit 2 
            fi 
            #配置目錄非空,退出配置 
            #否則繼續安裝 
            pirntf 
            "Log file directory [/var/webmin]:" 
            if [ 
            "$var_dir" = "" ]; then 
            read var_dir 
            fi 
            if [ 
            "$var_dir" = "" ]; then 
            var_dir=/var/webmin 
            fi 
            #創建系統運行時目錄 log directory 
            #缺省使用/var/webmin 
            abspath='echo $var_dir | grep 
            "^/"
            if [ 
            " &abspath " = "" ]; then 
            echo 
            "log file d.." 
            echo 
            "" 
            echo 3 
            fi 
            #檢查該運行時文件目錄是否合法,否則退出 
            #grep 
            "^/" 行首 以"/"開始 
            if [ ! -d $var_dir ]; then 
            mkdir $var_dir 
            if [ $? !=0 ]; then 
            ehco 
            "error:" 


            fi 
            fi 
            #運行時文件目錄不存在,則創建之,若創建失敗,退出 

            依靠perl 運行的webmin當然要確定一下系統中是否有perl 的解釋器, 
            以下: 
            if [ -x /usr/bin/perl ]; then 
            perldef=/usr/bin/perl 
            elif [ -x /usr/local/bin/perl ]; then 
            perldef=/usr/local/bin/perl 
            else 
            perldef =
            "" 
            fi 
            #檢查幾個常用perl安裝路徑是否有perl 存在,否則定義perldef變量為
            "" 
            if [ 
            "$perl" = "" ]; then 
            if [ 
            "$perldef" = "" ]; then 
            read perl 
            if [ 
            "$perl" = "" ];then 
            echo 
            "error:" 

            exit 4 
            fi 
            else 
            printf 
            "Full path to perl " 
            #提示輸入 
            read perl 
            if [ 
            "$perl" = ""];then 
            perl=$perldef 
            fi 
            fi 
            fi 
            #上一步如果沒有找到perl 的安裝路徑,則要求用戶輸入perl 的路徑 
            #有問題這里! perl & perldef ?! 真麻煩! 有一個不久行了嗎?! 
            if [ ! -x $perl ]; then 
            echo 
            "error: message" 
            exit 5 
            fi 
            # 沒有perl環境, 退出 
            $perl -e 'print 
            "foobar\n"' 2>/dev/null | grep foobar >/dev/null 
            if [ $? != 
            "0" ];then 
            echo
            "error" 
            exit 6 
            fi 
            #否則測試perl 是否可以運行(打印一行試試,并進行檢測) 
            $perl -e 'exit ($] < 5.002 ? 1:0)' 
            if [ $? = 
            "1" ]; then 
            echo 
            "error : message" 
            exit 7 
            fi 
            #檢測版本信息,要求5.002 以上版本( 本setup.sh出自 ver0.88) 
            $perl -e 'use Socket; print 
            "foobar\n"' 2>/dev/null | grep foobar >/dev/null 
            if [ $? != 
            "0" ];then 
            echo 
            "error mesage." 
            exit 8 
            fi 
            #檢測socket 模塊是否正確安裝..否則退出 
            $perl -e '$c = crypt(
            "xx","yy"); exit($c ? 0:1)' 
            if [ $? != 
            "0" ]; then 
            echo 
            "erro mesage.." 
            eixt 9 
            fi 
            #檢測加密模塊是否正確安裝,否則退出 
            echo 
            " Pelr seems to be installed ok" 
            echo 
            "" 
            #通知用戶perl檢測正常 


            操作系統選擇,見 oschooser.pl 和 os_list.txt 理的內容 
            oschooser.pl 實現系統選擇, 還沒細看,大概就是根據不同的linux發 
            布(因為它們的配置文件名會有所不同,怎么說,叫個案追究吧 呵呵) 
            給webmin使用不同配置文件(參數變化) 

            printf 
            "Web server port (default 10000): " 
            if [ 
            "$port" = "" ]; then 
            read port 
            if [ 
            "$port" = "" ]; then 
            port=10000 

            fi 

            fi 
            if [ $port -lt 1 ]; then 
            echo 
            "ERROR: $port is not a valid port number" 

            echo 
            "" 
            exit 11 
            fi 

            if [ $port -gt 65535 ]; then 

            echo 
            "ERROR: $port is not a valid port number. Port numbers cannot be" 

            echo 
            " greater than 65535" 
            echo 
            "" 

            exit 12 

            fi 

            $perl -e 'use Socket; socket(FOO, PF_INET, SOCK_STREAM, getprotobyname(
            "tcp" 
            )); 
            setsockopt(FOO, SOL_SOCKET, SO_REUSEADDR, pack(
            "l", 1)); 
            bind(FOO, sockaddr_in($ARGV[0], INADDR_ANY)) || exit(1); 
            exit(0);' 
            $port 

            if [ $? != 
            "0" ]; then 

            echo 
            "ERROR: TCP port $port is already in use by another program" 

            echo 
            "" 

            exit 13 

            fi 

            printf 
            "Login name (default admin): " 
            if [ 
            "$login" = "" ]; then 

            read login 

            if [ 
            "$login" = "" ]; then 

            login=
            "admin" 
            fi 

            fi 
            echo $login | grep : >/dev/null 
            if [ 
            "$?" = "0" ]; then 
            echo 
            "ERROR: Username contains a : character" 

            echo 
            "" 

            exit 14 

            fi 
            printf 
            "Login password: " 

            if [ 
            "$password" = "" -a "$crypt" = "" ]; then 
            stty -echo 

            read password 

            stty echo 

            printf 
            "\n" 

            printf 
            "Password again: " 
            stty -echo 

            read password2 

            stty echo 
            printf 
            "\n" 
            if [ 
            "$password" != "$password2" ]; then 
            echo 
            "ERROR: Passwords don't match" 
            echo "" 

            exit 14 
            fi 
            echo $password | grep : >/dev/null 
            if [ "$?" = "0" ]; then 

            echo "ERROR: Password contains a : character" 
            echo "" 
            exit 14 

            fi 

            fi 

            defhost=`hostname` 
            printf "Web server hostname (default $defhost): " 
            if [ "$host" = "" ]; then 

            read host 

            if [ "$host" = "" ]; then 

            host=$defhost 
            fi 
            fi 
            if [ "$ssl" = "" ]; then 
            ssl=0 

            $perl -e 
            'use Net::SSLeay' >/dev/null 2>/dev/null 
            if [ $? = "0" ]; then 
            printf "Use SSL (y/n): " 
            read sslyn 
            if [ "$sslyn" = "y" -o "$sslyn" = "Y" ]; then 
            ssl=1 
            fi 
            else 
            echo "The Perl SSLeay library is not installed. SSL not available." 

            rm -f core 
            fi 

            fi 

            # Ask whether to run at boot time 

            if [ "$atboot" = "" ]; then 

            initsupp=`grep "^os_support=" $wadir/init/module.info | sed -e 
            's/os_suppor 
            t
            =//g' | grep $os_type` 

            atboot=0 
            if [ "$initsupp" != "" ]; then 

            printf "Start webmin at boot time (y/n): " 
            read atbootyn 

            if [ "$atbootyn" = "y" -o "$atbootyn" = "Y" ]; then 

            atboot=1 

            fi 
            else 
            echo "webmin does not support being started at boot time on your system." 

            fi 
            fi 

            makeboot=$atboot 

            #很無聊啊, 在分析下去.. 失敗! 選擇錯誤! 
            #太失敗拉.不好玩 

            if [ "$port" = "" ];then 
            read port 
            if [ "$port" = "" ];then 
            port=8081 
            fi 
            fi 
            if [ $port -lt 1]; then 
            echo "error message" 
            eixt 11 
            fi 
            #接受擁護定義服務端口號, 缺省使用8081 
            if [ $port -gt 65535 ] ;then 
            #error message 
            exit 12 
            fi 
            #若用戶定義的端口號大于65535 , 則報錯退出 
            #用戶可使用的端口是從1000 以后還是從1024 以后? 誰告訴我? 
            $perl -e 
            'use Socketsocket(FOO, PF_INET, SOCK_STREAM, getprotobyname("tcp" 
            )); 
            set 
            socket(FOO,SOL_SOCKET,SO_REUSEADDR, pack("l",1)); 
            bind(FOO,sockaddr_in($ARGV[0],INADDR_ANY)) || exit(1);exit(0);' $p 
            ort 
            if [ $? !="0" ]; then 
            echo "error message
            exit 13 
            fi 
            #測試端口是否被占用, 方法見perl -e 那行的代碼 
            printf "login name (default admin):" 
            if [ "$loging" = ""] ; then 
            read login 
            if [ "$login" = ""]; then 
            loging="admin" 
            fi 
            fi 
            #接受用戶輸入的管理員名稱,缺省使用admin 
            echo $login | grep : >/dev/null 
            if [ "$?" = "0" ] ; then 
            echo error mesage.. 
            exit 14 
            fi 
            # 檢測用戶名稱是否合法, 這里可以稍加改進,不用動不動就退出安裝. 
            pirntf " loging passwd" 
            if [ "$password" = "" -a "$crypt" = "" ]; then 
            stty -echo 
            read password 
            stty echo 
            printf "\n" 
            printf "password agani:" 
            stty -echo 
            read password2 
            stty echo 
            printf "\n" 
            if [ "$password" != "$pasword2" ] ;then 
            echo "Error message" 
            exit 14 
            fi 
            fi 
            #檢查密碼,并控制屏顯 
            defhost=
            'hostname' 
            printf "web server hostname (default $defhost):" 
            if [ "$host" = ""]; then 
            read host 
            if [ "$host" = "" ]; then 
            host=$defhost 
            fi 
            fi 
            # 設置主機名稱,沒有則接受用戶輸入 
            if [ "$ssl" = ""]; then 
            ssl = 0 
            $perl -e 
            'use Net::SSLeay'>/dev/null 2>/dev/null 
            if [ $? = "0" ] ; then 
            printf "Use SSL (y/n):" 
            read sslyn 
            if [ "$sslyn" = "y" -o "$sslyn" = "Y" ] ; then 
            ssl=1 
            fi 
            else 
            echo "asdfjalksdjfjcjvknx." 
            rm -f core 
            fi 
            fi 
            #檢查是否正確安裝支持 ssl 模塊, 否則給出提示信息 
            if [ "$atboot" = "" ];then 
            initsupp=
            'grep "^os_support=" $wadir/init/module.info | sed -'s/os_suppo 
            rt=//g
            ' |grep $os_type' 
            atboot=0 
            if [ "$initsupp" != ""];then 
            printf "Start webmin at boot time (y/n):" 
            read atbootyn 
            if [ "$atbootyn" = "y" -o "$atbootyn" = "Y"]; then 
            atboot=1 
            fi 
            else 
            echo 
            fi 
            fi 
            #檢測模塊安裝文件/init/module.info中查找os_support 項所支持的 
            #os_type中是否有當前的os_type,有則提示用戶選擇是否在系統啟動時 
            #啟動webmin 

            echo $perl > $config_dir/perl-path 
            echo $var_dir > $config_dir/var-path 
            echo "******************************************" 

            echo "Creating web server config files.." 

            cfile=$config_dir/miniserv.conf 

            echo "port=$port" >> $cfile 

            echo "root=$wadir" >> $cfile 

            echo "host=$host" >> $cfile 

            echo "mimetypes=$wadir/mime.types" >> $cfile 

            echo "addtype_cgi=internal/cgi" >> $cfile 

            echo "realm=LNMS Server" >> $cfile 

            echo "logfile=$var_dir/miniserv.log" >> $cfile 

            echo "pidfile=$var_dir/miniserv.pid" >> $cfile 

            echo "logtime=168" >> $cfile 

            echo "ppath=$ppath" >> $cfile 

            echo "ssl=$ssl" >> $cfile 

            echo "env_LNMS_CONFIG=$config_dir" >> $cfile 

            echo "env_LNMS_VAR=$var_dir" >> $cfile 

            echo "atboot=$atboot" >> $cfile 

            echo "logout=$config_dir/logout-flag" >> $cfile 

            echo "listen=10000" >> $cfile 

            echo "denyfile=\\.pl\$" >> $cfile 

            if [ "$allow" != "" ]; then 

            echo "allow=$allow" >> $cfile 

            fi 

            if [ "$session" != "" ]; then 

            echo "session=$session" >> $cfile 

            else 

            echo "session=1" >> $cfile 

            fi 
            #創建/etc/webmin(配置文件目錄)下的miniserv.conf 
            #前面搜集的一些變量在此被寫入文件 

            ufile=$config_dir/miniserv.users 

            if [ "$crypt" != "" ]; then 

            echo "$login:$crypt:0" > $ufile 
            else 

            $perl -e 
            'print "$ARGV[0]:",crypt($ARGV[1], "XX"),":0\n"' "$login" "$passwo 
            rd" > $ufile 

            fi 

            chmod 600 $ufile 

            echo "userfile=$ufile" >> $cfile 

            #創建用戶加密文件,并更改其權限 
            kfile=$config_dir/miniserv.pem 

            cp $wadir/miniserv.pem $kfile 

            chmod 600 $kfile 

            #拷貝安裝目錄下的miniserv必須的模塊文件到/etc/webmin 目錄 
            #并設置權限 
            echo "keyfile=$config_dir/miniserv.pem" >> $cfile 

            #追加miniserv 模塊文件信息至 miniserv.conf 文件 
            chmod 600 $cfile 

            echo "..done" 

            echo "" 

            echo "Creating access control file.." 

            afile=$config_dir/webmin.acl 

            rm -f $afile 

            #清空已存在的webmin acl 文件,不管有沒有,刪下看! 
            echo "$login: $allmods" >> $afile 

            chmod 600 $afile 

            echo "..done" 

            echo "" 
            #將現有的模塊注冊,并重新創建webmin.acl 文件 

            還有一點.. 

            #有問題啊這里,誰給我講講 
            if [ "$noperlpath" = "" ]; then 
            echo "Inserting path to perl into scripts.." 
            (find $wadir -name 
            '*.cgi' -print;find $wadir -name '*.pl' -print) 
            | $perl $wadir/perlpath.pl $perl - 
            echo "..done" 
            echo "" 
            fi 
            # 有問題 :perl perlpath.pl perl -  這里在做什么?! 
            #創建/etc/webmin/start & stop 腳本。。。略 
            if [ -r /etc/system.cnf ] ; then 
            source /etc/system.cnf 
            if [ "$CONF_LST_LANG" = "us" ];then 
            CONF_LST_LANG=en 
            elif [ "$CONF_LST_LANG" = "uk" ]; then 
            CONF_LST_LANG=en 
            fi 
            grep "lang=$CONF_LST_LANG," $wadir/lang_list.txt >/dev/null 2>&1 
            if [ "$?" = 0 ]; then 
            echo "lang=$CONF_LST_LANG" >> $config_dir/config 
            fi 
            fi 
            #檢查系統培植文件/etc/system.cnf中的CONF_LST_LANG 
            #設置語言相關得選項 

            echo $ver > $config_dir/version 
            echo "..done" 
            if [ "$makeboot" = "1" ] ;then 
            .. 
            (cd $wadir/init; WEBMIN_CONFIG=$config_dir WEBMIN_VAR=$var_dir 
            $wadir/init/atboot.pl) 
            .. 
            fi 
            # 根據安裝時的啟動選項設置相關文件,參數 
            # 注意最后運行的 atboot.pl 再作分析 
            if [ "$nouninstall" = "" ]; then 
            .. 
            cat >$config_dir/uninstall.sh <<EOF 
            #!/bin/sh 
            printf " Are you sure you want to unistall Webmin? (Y/N):" 
            read answer 
            printf "\n" 
            if [ "\$answer" = "y" ]; then 
            $config_dir/stop 
            if [ "$atboot" = "1" ]; then 
            (cd $wadir/init ; WEBIN_CONFIG=$config_dir WEBMIN_VAR=$var_dir $wadir/init/ 
            delboot.pl) 
            fi 
            echo "Deleting $wadir.." 
            rm -rf $wadir 
            echo "Deleting $config_dir ." 
            rm -rf $config_dir 
            echo "..Done" 
            fi 
            EOF 
            chmod +x $config_dir/uninstall.sh 
            echo "..done" 
            fi 
            # 創建卸載腳本, 很easy 給點提示,讓后把相關得目錄刪掉即可 
            # 注意$wadir/init/delboot.pl 并注意與adboot.pl 對照 

            echo "Changing ownership and permissions .." 
            chown -R root:bin $config_dir 
            chmod -R og-rw $config_dir 
            chmod 755 $config_dir/sendmail/config >/dev/null 2>&1 
            chmod 755 $config_dir/sendmail/autoreply.pl >/dev/null 2>&1 
            #改變配置模塊文件屬主及訪問權限 
            #為什么對sendmail單獨處理? 我還不太清楚 
            if [ "$nochown" = "" ]; then 

            chown -R root:bin $wadir 

            #chmod -R og-rwx $wadir 

            if [ $var_dir != "/var" ]; then 
            chown -R root:bin $var_dir 
            chmod -R og-rwx $var_dir 

            fi 
            fi 
            echo "..done" 
            echo "" 
            #改變安裝目錄(安裝完后即執行目錄)的屬主 
            #處理$var_dir 的屬主及執行權限 比較周到 
            if [ "$nostart" = "" ]; then 

            echo "Attempting to start Webmin mini web server.." 

            $config_dir/start 

            if [ $? != "0" ]; then 
            echo "ERROR: Failed to start web server!" 
            echo "" 
            exit 14 

            fi 
            # 試圖啟動webmin 的 mini server 
            # 若失敗則退出 

            echo "..done" 

            echo "" 

            echo "***********************************" 

            echo "Webmin has been installed and started successfully. Use your web" 
            echo "browser to go to" 

            echo "" 

            #啟動成功給出響應的提示信息 
            if [ "$ssl" = "1" ]; then 
            echo " https://$host:$port/" 

            else 

            echo " http://$host:$port/" 

            fi 

            echo "" 

            echo "and login with the name and password you entered previously." 

            echo "" 

            if [ "$ssl" = "1" ]; then 
            echo "Because Webmin uses SSL for encryption only, the certificate" 

            echo "it uses is not signed by one of the recognized CAs such as" 

            echo "Verisign. When you first connect to the Webmin server, your" 

            echo "browser will ask you if you want to accept the certificate" 

            echo "presented, as it does not recognize the CA. Say yes." 

            echo "" 
            fi 
            #若ssl 有效,則給出啟動客戶端的方式:https://:prot 
            fi 
            # over 本次分析排除了,upgrade 操作的代碼分析 不過我認為 
            # 主要部分搞定的話,足以,省得看著那么多,不爽! :) 
            # 歡迎轉載 更希望與你交流(51run@21cn.com) 呵呵

            posted on 2007-04-29 20:41 楊粼波 閱讀(754) 評論(0)  編輯 收藏 引用

            亚洲人AV永久一区二区三区久久 | 国产精品一区二区久久精品无码| 中文字幕一区二区三区久久网站| 国产精品久久久天天影视香蕉| 亚洲国产成人久久综合野外| 久久婷婷五月综合国产尤物app| 久久精品国产亚洲AV大全| 99热精品久久只有精品| 久久久精品久久久久影院| 久久99免费视频| 久久人妻AV中文字幕| 99久久国产亚洲高清观看2024| 亚洲国产成人久久精品99| 久久精品国产免费| 国产成人精品久久| 久久久久免费视频| 久久精品国产一区| 人妻无码久久一区二区三区免费| 久久国产乱子伦精品免费午夜| 日韩人妻无码精品久久久不卡 | 无码任你躁久久久久久老妇App| 久久免费线看线看| 日产精品99久久久久久| 99久久精品国产一区二区 | 久久99精品久久久久久秒播| 国产成人久久精品一区二区三区| 欧美成人免费观看久久| 久久强奷乱码老熟女网站| 久久精品这里热有精品| 久久人人爽人人爽人人片AV不| 中文字幕无码av激情不卡久久| 国产精品伊人久久伊人电影 | 国产精品久久久久久影院| 亚洲午夜久久久影院| 久久久国产视频| 亚洲国产精品无码久久青草| 欧美成a人片免费看久久| 久久成人国产精品一区二区| 久久亚洲精品视频| 99久久精品国产一区二区蜜芽| 久久99久久99小草精品免视看|