npi- 是我们这个 -NEO 系统下的一个命令行的系统配置工具,利用它可以对系统进行一些初始化的配置,可配置的项目包括:用户密码、系统语言、时区、、SSH 开关、自动登录选项等。在命令行执行以下命令即可进入:
sudo npi-config
npi- 的显示界面如下所示:
图1.17 系统配置工具npi-的显示界面
npi- 工具的当前版本一共有8个菜单,分别是:
User :修改缺省用户的登录密码:设置主机名,默认为 – :配置一些启动选项,例如系统启动后登录 的默认用户 :配置一些本地选项,例如语言、时区、键盘布局、Wi-Fi 频段等 :接口选项配置,例如开启或关闭 SSH 服务 :高级配置,包括 Audio、欢迎信息等:升级 npi- 到最新版本About npi-:关于 npi- 的信息
npi- 的使用很简单,根据提示进行操作即可,一般不会有太大问题,这里就不详细讲解了,大家摸索几遍就可以了。
我在选择“”的时候看到如下提示:
Cloning into 'npi-config'...
remote: Counting objects: 5, done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 5
Unpacking objects: 100% (5/5), done.
Checking connectivity... done.
Sleeping 5 seconds before reloading npi-config
于是,猜测 npi- 工具的更新操作就是拉取 git 仓库的最新代码,果然在 上找到相关仓库,然后尝试用如下命令克隆npi-源代码:
git clone https://github.com/friendlyarm/npi-config.git
克隆成功,可以看到 npi- 目录下有三个文件:
npi-config README.md sample_profile_d.sh
其中 npi- 就是我们上面所运行的系统配置工具,实际上,它是一个 Shell 脚本文件。这里抽取一部分代码:
#!/bin/sh
# Part of npi-config http://github.com/friendlyarm/npi-config
#
# See LICENSE file for copyright and license details
INTERACTIVE=True
ASK_TO_REBOOT=0
if [ -f /etc/friendlyelec-release ]; then
# get friendlyelec's boardt model
# example:
# BOARD="NanoPC-T2"
# LINUXFAMILY=nanopi2
. /etc/friendlyelec-release
fi
......
do_update() {
cd /tmp/
rm -rf npi-config
git clone https://github.com/friendlyarm/npi-config
if [ $? -eq 0 ]; then
SELFPATH=`which npi-config`
cp -f npi-config/npi-config $SELFPATH
chmod 755 $SELFPATH
rm -fr npi-config
printf "Sleeping 5 seconds before reloading npi-confign" &&
sleep 5 &&
exec $SELFPATH
else
whiptail --msgbox "There was an error checking new version." 20 60 1
fi
}
#
# Interactive use loop
#
calc_wt_size
while true; do
FUN=$(whiptail --title "NanoPi Software Configuration Tool (npi-config)" --menu "Setup Options" $WT_HEIGHT $WT_WIDTH $WT_MENU_HEIGHT --cancel-button Finish --ok-button Select
"1 Change User Password" "Change password for the default user (pi)"
"2 Hostname" "Set the visible name for this Pi on a network"
"3 Boot Options" "Configure options for start-up"
"4 Localisation Options" "Set up language and regional settings to match your location"
"5 Interfacing Options" "Configure connections to peripherals"
"6 Advanced Options" "Configure advanced settings"
"7 Update" "Update this tool to the latest version"
"8 About npi-config" "Information about this configuration tool"
3>&1 1>&2 2>&3)
RET=$?
if [ $RET -eq 1 ]; then
do_finish
elif [ $RET -eq 0 ]; then
case "$FUN" in
1 *) do_change_pass ;;
2 *) do_change_hostname ;;
3 *) do_boot_behaviour ;;
4 *) do_internationalisation_menu ;;
5 *) do_interface_menu ;;
6 *) do_advanced_menu ;;
7 *) do_update ;;
8 *) do_about ;;
*) whiptail --msgbox "Programmer error: unrecognized option" 20 60 1 ;;
esac || whiptail --msgbox "There was an error running option $FUN" 20 60 1
else
exit 1
fi
done
看到 没?显然刚刚的猜想是正确的!好了,对 npi- 的实现感兴趣的朋友接下来就可以分析该脚本了。在终端上看实在太不方便了,我决定把它拿出来用 ++ 来看,那怎么拿呢?
打开 ,用 SSH 登录 -NEO(如果不懂请看上一节)。登录成功后按下 ALT+P 就开启新的会话进行 ftp 操作。估计是使用本地用户模式登录 ftp 服务器的,而我是用 root 登录 ssh 的,所以当前目录为root的家目录。好了,登录ftp后就可以使用get来下载文件了,操作如下:
sftp> ls
mjpg-streamer Music npi-config test.pcm
sftp> pwd
/root
sftp> get npi-config/npi-config
Downloading npi-config from /root/npi-config/npi-config
100% 19KB 19KB/s 00:00:00
/root/npi-config/npi-config: 20247 bytes transferred in 0 seconds (19 KB/s)
如果下载成功后不知道文件被存放到哪,可以在 上选择“”–>“ ”–>“SFTP ”,查看“Local ”就知道下载的文件所存放的地方了。接下来就可以用 ++ 好好分析 npi- 啦!
关于 ftp 的命令,可以输入 help 查看该 FTP 提供所有的命令,这里列出一些常用的命令:
发表回复