前言
系统定制在前面的博文中我们就有谈到过了,不过那个裁减制作有简单了点,只是能让系统跑起来而,没有太多的功能,也没的用户登录入口,而这里我们将详细和深入的来谈谈Linux系统的详细定制过程和实现用户例如、远程登录和Nginx安装过程、一步一步从头开始定制属于我们自己的系统。


正文
首先我们先来简单的介绍一下我们这里定制属于自己的Linux系统的基本元素,其中一些相关的信息也可以参考我前面写过的博文


一个定制的linux内核+一个定制的busybox就可以定制一个小型的Linux操作系统了,安装Dropbear和Nginx,Linux的组成部分包括内核空间和用户空间、而用户空间其实就是根文件系统、用户空间中又包括有shell和init,busybox他能够模拟数百个我们系统上带用的命令、当然包括我们所需要用到的shell、init、getty、login、那定制一个Linux操作系统我们必须要了解的就是系统启动流程:    
POST --> Boot Sequence(MBR) --> BootLoader --> kernel -->/sbin/init
POST:加电自检
Boot Sequence:读到磁盘中的第一个扇区(446)的MBR。
BootLoader:找到MBR中的BootLoader引导加载器、bootloader会找到我们选定的操作系统或内核去加载对应的内核、而这个Bootloader通常是grub。
kernel:加载内核、内核要完成初始化、bootloader负责把内核读到内存中、内核又通常中压缩的、所以通常内核在内存中展开、而bootloader引导内核启动起来、让内核从他的程序入口处开始执行、所以接下来内核要完成自身的初始化操作、或硬件探测、包括自身执行环境的准备等等都在这里完成。
内核完成初始化的第一步就要去装载用户空间了、有时候为了让内核做得足够小、很有可能内核中并不具备真正的根文件系统所在设备的驱动、因此我们要借助于initramfs(CentOS5上被称为initrd)来完成去装载真正根文件系统所在的根文件系统真正的程序、但是这个initramfs可initrf(initramfs:这是一个文件系统、CentOS6上就这么称呼了,initrd:ram disk 这是一个磁盘设备)是个虚拟的根文件系统、是个虚根、他不是我们系统真正工作起来所使用的根、所以称这个为虚根、内核借助于这个虚根装载驱动之后就要去挂载真正的根设备了、kernel会自动挂载到这个跟文件下、内核会挂载真正的根到这个initramfs虚根的某个目录下、比如说挂载到/mnt/sysroot的目录下、而后再完成根切换、而后我们的真正的根就可以加载了、那我们的内核怎么知道挂载的根文件系统是什么呢、那我们的grub向内核传递参数root等于什么那就是告诉系统根文件系统所在的设备。


/sbin/init:他通常加载四个设备、/sbin/init、/bin/bash、如果内核找不到就去找根下的init、再找不着就去找/bin/sh、/bin/bash、按照这个顺序去找、找到一个就可以启动系统、所以系统启动的第一个进程就启动了、init负责去启动用户空间中真正工作的进程、init本身本身只是负责去生成这些正正工作的进程和回收这些进程的、是内核的第一个、最顶级的管理进程、但不负责具体的工作、虽然init不负责具体工作、但他需要把一个用户空间启动为一个真正完整意义上的用户空间、所以init要结合他的配置文件inittab完成所谓系统初始化的。
在CentOS6上这个文件inittab之所以保留下来是为了跟CentOS5兼容的、其实我们用不着的、因为init大多数配置文件都位于/etc/init/*.conf目录下所有以.conf结尾的文件、是用于各子系统之间协调的。


/sbin/init作用包含以下几步:
1、设定默认运行级别:runlevel -v:查看运行级别
2、系统空间中的进一行初始化、这个要依赖于一个系统初始化脚本来完成的、这个脚本叫rc.sysinit、在有些系统上可能叫rcS、其实都是一个概念、这个初始化包含键盘键映射、初始化没被挂载的文件系统等等。那/etc/rc.sysinit要进行哪些工作、seLinux、udev、键映射、交换分区的激活、挂载额外文件系统、重新以读写方式挂载根文件系统等等。
3、启动指定级别下的服务、后台的守护进程、每个级别都有一个在/etcg下rcN.d的文件、启动这个文件中所有以S开头的脚本服务、关闭所有以K开头的服务脚本、/etc/rc.local其中以S开头的最后一个服务S99包含rc.local、有些我们不便于自己写脚本定义的服务可以写到这里来、但是启动之后不会关闭、所以只是执行一些命令我们可以在这里执行、服务还是建议使用服务脚本。
4、设定键映射
5、启动虚拟终端、启动这个终端会调用一个叫login的程序、在虚拟终端上打印一个登录提示符让我们输入
6、如果设备默认级别为5的话还可以启动图形终端
init在早期是个串型的init、或者说传统意义是的init、sysV风格的、这种程序启动任何服务、运行任何程序完成系统初始化时统统以串型模式进行的、所以速度非常慢、以至于后来有了并型运行的init、启动速度也比较快。


准备工作:

系统裁减我们说过、为了可以让定制好的系统可以放到别的机器上动行、我们要把他做到一个独立的硬盘上去、所以首先我们在宿主机上添加一块SCSI的硬盘

添加硬盘,重启


# fdisk /dev/sdb
分3个主分区
第一个主分区(做boot分区):50M 
第二个主分区(做/根分区):512M
第三个主分区(做swap分区):256M


n p 1  +50M n p 2  +512M n p 3  +256M t 3 82 w


# mke2fs -t etx4 /dev/sdb1
# mke2fs -t etx4 /dev/sdb2
# mkswap /dev/sdb3
# mkdir -pv /mnt/{boot,sysroot}
# mount /dev/sdb1 /mnt/boot
# mount /dev/sdb2 /mnt/sysroot


第一步:编译内核或定制内核

   1、获取内核程序包,可以到官网下载:http://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/

这里我们使用的内核版本是3.13.6的版本
解压内核文件,这里我们以make allnoconfig来编译安装,自己选择要编译的功能(确保系统上的编译环境)    


# tar xf linux-3.13.6.tar.xz -C /usr/src/
# cd /usr/src
# ln -sv linux-3.13.6 linux
# cd linux
# make allnoconfig


安装依赖包

# yum install -y ncurses-devel
# make menuconfig 把我们所需要的内容整合进来


我们把这些内容全部编译进内核、不编译成模块、*号表示编译进内核(M表示以模块的方式装载)

注意:以下*号标识的选项一定要选择*号,否则系统无法正常启动



[*]64-bit kernel :64位操作系统的内核
General setup --> Local version --> -MyLinux: 给内核定一个自己的版本
Processor type and features --> Processor family --> (X)Generic-x86-64:这里是CPU类型、这个是通用x86-64
[*]Symmetric multi-processing support:选择CPU支持多核心处理
[*]Enable loadable module support:选择内核动态模块加载
Bus options (PCI etc.) --> [*]PCI suppor:支持PCI总线
Device Drivers --> <*>SCSI device support -->[*]SCSI disk support要支持SCSI硬盘
Device Drivers -->Fusion MPT device support (NEW) --> <*>Fusion MPT ScsiHost drivers for SPI、<*>Fusion MPT misc device (ioctl) driver、[*]Fusion MPT logging facility:支持对硬盘的驱动
File systems --> <*>The Extended 4 (ext4) filesystem:支持文件系统
Executable file formats / Emulations --> [*]Kernel support for ELF binaries、[*]Write ELF core dumps with partial segments (NEW)、 <*>Kernel support for scripts starting with #!:可执行文件的格式
Device Drivers -->Input device support --> [*]Keyboards -> <*>AT keyboard (NEW) [*]Mice:支持输入输出设备、比如健盘
Device Drivers > USB support  > <*>   Support for Host-side USB > <*>UHCI HCD (most Intel and VIA) support、<*>OHCI HCD (USB 1.1) support、<*>EHCI HCD (USB 2.0) support:USB设备驱动
Device Drivers > Generic Driver Options > [*] Maintain a devtmpfs filesystem to mount at /dev [*]Automount devtmpfs at /dev, after the kernel mounted the rootfs
[*] Networking support  ---> > Networking options[*] TCP/IP networking [*]IP:multicasting [*]IP: advanced router[*]IP: policy routing [*]IP: verbose route monitoring[*]   IP: kernel level autoconfiguration[*]IP: DHCP support[*]IP: BOOTP support[*]     IP: RARPsupport<*>IP: tunneling <*>Unix domain sockets<*>   UNIX: socket monitoring interface:支持协议
Device Drivers > Network device support > Ethernet driver support[*]Intel devices (NEW)<*>Intel(R) PRO/1000 Gigabit Ethernet support<*>Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support:只要Intel的、其他的他都去掉、这是选择网卡设备的驱动程序
[ ]Wireless:这个无线网、我们去掉去、用不着




OK、到这里保存退出、把配置文件复制一份出来、前面磁盘格式化而且都挂载好了、这里我们就把grub安装到boot下::    


# cp .config /root/config-3.13.6-x86_64
# make -j 4 bzImage
# cp arch/x86/boot/bzImage /mnt/boot/
# grub-install --root-directory=/mnt /dev/sdb

出现警告:
warning: Clock skew detected. Your build may be incomplete
解决办法:
(使用date命令重新设置时间格式是:date -s "MM/DD/YYYY hh:mm:ss"):
****************************************************************
# date -s "03/09/2016 20:56:00"
# hwclock -s
清除编译产生的文件
# make clean
再次执行
make -j 4 bzImage
cp arch/x86/boot/bzImage /mnt/boot/
****************************************************************

第二步:编译Busybox、让busybox提供一个sh程序、busybox可以模拟n种sh、可以模拟bash的特性、上面我们有介绍过了

到busybox官网下载busybox程序包:http://www.busybox.net
解压到当前目录下就可以了:    


# yum install -y glibc-static
# yum install -y libmcrypt-devel


==============================
报错:
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: centos.ustc.edu.cn
* extras: centos.ustc.edu.cn
* updates: ftp.daumkakao.com
Setting up Install Process
No package libmcrypt-devel available.
Error: Nothing to do


解决方法:
# yum  install epel-release  //扩展包更新包
# yum install -y libmcrypt-devel
==============================


# tar xf busybox-1.22.1.tar.bz2 
# cd busybox-1.22.1
# make menuconfig
# make
# make install


make menuconfig时就选择这项就可以了、其他的都使用默认选项:
Busybox Settings -->Build Options -->[*] Build BusyBox as a static binary (no shared libs):把busybox编译也静态二进制,不用共享库    




# cp -a _install/* /mnt/sysroot/
# cd /mnt/sysroot/
# mkdir -pv /etc/rc.d var/log root home lib lib64 dev proc sys boot mnt media tmp srv
给grub提供一个配置文件
# vim /mnt/boot/grub/grub.conf 
default=0
timeout=5
title Mini Linux (3.13.6-MyLinux_chinasoft)
root (hd0,0)
kernel /bzImage ro root=/dev/sda2 init=/sbin/init


给小系统提供一个rc.sysinit、/mnt/sysroot/etc/rc.d/rc.sysinit、如果没有这个目录就自己创建、再提供一个/mnt/sysroot/etc/fstab文件 


# mkdir etc/rc.d -pv


# vim /mnt/sysroot/etc/fstab
/dev/sda1       /boot   ext4    defaults        0 0
proc            /proc   proc    defaults        0 0
sysfs           /sys    sysfs   defaults        0 0
/dev/sda2       /       ext4    defaults        0 0
/dev/sda3       swap    swap    defaults        0 0


# vim /mnt/sysroot/etc/rc.d/rc.sysinit


==============================
#!/bin/sh
#
打印系统启动时的欢迎信息
echo -e "\tWecome to \033[34mMini\033[0m Linux"
判断/etc/sysroot/network是否存在并且可读、条件成立就source进来
[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
判断$HOSTNAME是否为空并且$HOSTNAME==NONE、如果为空就给个默认值
[ -z "$HOSTNAME" -o "$HOSTNAME" == "(none)" ] && HOSTNAME=localhost
给HOSTNAME赋值为定义好的HOSTNAME的值
/bin/hostname $HOSTNAME
挂载文件系统
echo "mounting proc filesystem..."
mount -t proc proc /proc
echo "mounting sysfs filesystem..."
mount -t sysfs sysfs /sys
自动探测各硬件设备、并且能够探测到的都装载设备文件
mdev -s
给系统配置一个IP地址
ifconfig lo 127.0.0.1
ifconfig eth0 172.16.254.188
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
==============================


# vim /mnt/sysroot/etc/inittab  
==============================
::sysinit:/etc/rc.d/rc.sysinit 明确指定要找/etc/rc.d/rc.sysinit文件
::respawn:/sbin/getty 19200 tty1
::respawn:/sbin/getty 19200 tty2
::respawn:/sbin/getty 19200 tty3
::respawn:/sbin/getty 19200 tty4
::respawn:/sbin/getty 19200 tty5
::respawn:/sbin/getty 19200 tty6 :19200表示每秒钟传输的速率、getty是一个串型终端、他会调用一个登录界面让用户输入登录信息进行验证
tty6::askfirst:/bin/sh 启用6个虚拟终端
console::respawn:-/bin/sh 启用一个终端,如果出错重新启动respawn、-表示敲一回车才可以启用sh
::ctrlaltdel:/sbin/reboot 定义组合键、按ctrl+alt+del就reboot
::shutdown:/bin/umount -a -r 如果要要关机就卸载已挂载的设备、然后关机
==============================


提供系统用户登录帐号文件: 
==============================
# useradd busybox
# passwd busybox
密码也设置为:busybox
# head -1 /etc/passwd > /mnt/sysroot/etc/passwd
# tail -1 /etc/passwd >> /mnt/sysroot/etc/passwd


# vim /mnt/sysroot/etc/passwd
root:x:0:0:root:/root:/bin/sh
busybox:x:502:503::/home/busybox:/bin/sh


# head -1 /etc/group > /mnt/sysroot/etc/group
# tail -1 /etc/group >> /mnt/sysroot/etc/group
# head -1 /etc/shadow > /mnt/sysroot/etc/shadow
# tail -1 /etc/shadow >> /mnt/sysroot/etc/shadow
# cat /mnt/sysroot/etc/shadow
提供一个登录欢迎信息、创建一个issue文件
# vim /mnt/sysroot/etc/issue
MyLinux is CentOS release 6.5
Kernel \r on an \m
提供主机名
# mkdir /mnt/sysroot/etc/sysconfig
# vim /mnt/sysroot/etc/sysconfig/network
HOSTNAME=mylinux.chinasoft.com
提供命令提示符和环境变量
# vim /mnt/sysroot/etc/profile
export PS1='[\u@\h \A \W]\$ '
PATH="/usr/local/sbin:/usr/local/bin:/sbin/:/bin:/usr/sbin:/usr/bin:$PATH"


# chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit
# sync  同步数据到磁盘中去
==============================


到这里我们的配置有了基本框架,此时把宿主机挂起,创建一个自定义虚拟机,把我们制作有系统的那张硬盘放到自定义的虚拟机上运行:


如果第一个终端登录不了可以切换到其他终端上登录,按ctrl+alt+F2(F3\F4\F5\F6)可以切换到不同的终端上去登录的、这里我们登录成功了:




测试


启动报错:是因为make menuconfig处没有选择文件系统支持




远程登录和ngix访问



OK、到这里我们自己定制的Linux可以跑起来了、接下来我们来实现远程登录和Nginx的访问:
切换到宿主主上、下载dropbear-2013.58.tar.bz2和Nginx到本地:   

   1、解压安装dropbear



# tar xf dropbear-2013.58.tar.bz2
# cd dropbear-2013.58
# ./configure
# make
# make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
# mkdir /etc/dropbear
生成两个密钥文件
# dropbearkey -t rsa -s 1024 -f /etc/dropbear/dropbear_rsa_host_key
# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
验证一下生的这两个文件
# ls /etc/dropbear


2、服务脚本/etc/rc.d/init.d/dropbear



#!/bin/bash
#
# description: dropbear ssh daemon
# chkconfig: 2345 66 33
#
dsskey=/etc/dropbear/dropbear_dss_host_key
rsakey=/etc/dropbear/dropbear_rsa_host_key
lockfile=/var/lock/subsys/dropbear
pidfile=/var/run/dropbear.pid
dropbear=/usr/local/sbin/dropbear
dropbearkey=/usr/local/bin/dropbearkey
[ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
[ -r /etc/sysconfig/dropbear ] && . /etc/sysconfig/dropbear
keysize=${keysize:-1024}
port=${port:-22}
gendsskey() {
[ -d /etc/dropbear ] || mkdir /etc/dropbear
echo -n "Starting generate the dss key: "
$dropbearkey -t dss -f $dsskey &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success
echo
return 0
else
failure
echo
return 1
fi 
}
genrsakey() {
[ -d /etc/dropbear ] || mkdir /etc/dropbear
echo -n "Starting generate the rsa key: "
$dropbearkey -t rsa -s $keysize -f $rsakey &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success
echo
return 0
else
failure
echo
return 1
fi 
}
start() {
[ -e $dsskey ] || gendsskey
[ -e $rsakey ] || genrsakey
if [ -e $lockfile ]; then
echo -n "dropbear daemon is already running: "
success
echo
exit 0
fi
echo -n "Starting dropbear: "
daemon --pidfile="$pidfile" $dropbear -p $port -d $dsskey -r $rsakey
RETVAL=$?
echo
if [ $RETVAL -eq 0 ]; then
touch $lockfile
return 0
else
rm -f $lockfile $pidfile
return 1
fi
}
stop() {
if [ ! -e $lockfile ]; then
echo -n "dropbear service is stopped: "
success
echo
exit 1
fi
echo -n "Stopping dropbear daemon: "
killproc dropbear
RETVAL=$?
echo
if [ $RETVAL -eq 0 ]; then
rm -f $lockfile $pidfile
return 0
else
return 1
fi
}
status() {
if [ -e $lockfile ]; then
echo "dropbear is running..."
else
echo "dropbear is stopped..."
fi
}
usage() {
echo "Usage: dropbear {start|stop|restart|status|gendsskey|genrsakey}"
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
stop
start
;;
status)
status
;;
gendsskey)
gendsskey
;;
genrsakey)
genrsakey
;;
*)
usage
;;
esac


3、脚本配置文件/etc/sysconfig/dropbear 

keysize=2048
port=22022


# chmod +x /etc/rc.d/init.d/dropbear
# chkconfig --add dropbear
# vim /etc/profile.d/dropbear.sh
export PATH=/usr/local/sbin:$PATH
启动服务并查看端口22022是否已经处于监听状态、并在本地尝试连接登录:
# service dropbear start
# ss -tnl


dropbear在本机安装成功并且成功启动连接上去了


Xshell:\> ssh 192.168.8.40 22022


将该功能移植到我们的定制系统,之前我们写过一个脚本用来移植命令:  


#!/bin/bash
#
dirPath=/mnt/sysroot
clearcmd(){
if which $1 &> /dev/null;then
cmdPath=`which --skip-alias $1`
else
echo "Command not exist!"
return 4
fi
}
cpCmd(){
dirName=`dirname $1`
[ -d ${dirPath}${dirName} ] || mkdir -p ${dirPath}${dirName}
[ -f ${dirPath}${cmdPath} ] || cp $1 ${dirPath}${dirName}
}
cpLib(){     
for i in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`;do
dirLib=`dirname $i`
[ -d ${dirPath}${dirLib} ] || mkdir -p ${dirPath}${dirLib}
[ -f ${dirPath}$i ] || cp $i ${dirPath}${dirLib}
done
}
while true;do
read -p "Enter a command:" cmd
if [ "$cmd" == 'quit' ];then
echo "quit!"
exit 0
fi
clearcmd $cmd
[ $? -eq 4 ] && continue
cpCmd $cmdPath
cpLib $cmdPath
done




把这三个命令移植过去就可以了:dropbear、dropbearkey、scp、dbclient、bash、复制完后就去创建这个目录/mnt/sysroot/etc/dropbear、而后为移植过去的dropbear生成两个密钥文件:


# mkdir /mnt/sysroot/etc/dropbear
# dropbearkey -t rsa -s 1024 -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key
# dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key


dropbear要认证用户、而认证用户要用到名称解析、这就意味着libnss库要复制过去、libnss库框架、而后给nss提供配置文件:
cp -d 是指带连接的拷贝:

# cp -d /lib64/libnss_files* /mnt/sysroot/lib64
# cp -d /usr/lib64/libnss3.so /mnt/sysroot/usr/lib64/
# cp -d /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64/
# cp /etc/nsswitch.conf /mnt/sysroot/etc/
# vim /mnt/sysroot/etc/nsswitch.conf
只保留以下几项、其他的都不需要:
passwd:     files
shadow:     files
group:      files 
hosts:      files dns


在用户登录时dropbear认为用户的默认shell并不在/etc/shells下所在的用户shell中的话、他是不允许登录的、那我们就得给dropbear提供一个安全shell的配置文件了:


# vim /mnt/sysroot/etc/shells
/bin/sh
/bin/hush
/bin/ash
/sbin/nologin
/bin/bash


dropbear启动时在/var/run/下会生成一个pid文件,而这个目录我们还没有创建
# mkdir /mnt/sysroot/var/run

到这里我们定制的系统还不能远程登录、当你远程登录时、所登录的终端都是远程/dev/pts的伪终端、这个伪终端是个伪文件系统、只要你的内核编译时支持这个文件系统、他就可以使用、当然、我们的目标机上还没有:
# vim /mnt/sysroot/etc/fstab
加一行
devpts          /dev/pts        devpts  defaults        0 0

再创建/dev/pts这个目录:
# mkdir /mnt/sysroot/etc/profile.d
# cp /etc/profile.d/dropbear.sh /mnt/sysroot/etc/profile.d/
# mkdir /mnt/sysroot/dev/pts
# sync
# sync


OK、我们先来测试一下dropbear远程登录看可不可以登录得上去、把宿主机挂起或关机、启动我们的目标机、由于我们的/dev/pts启动目标机时可以会重新挂载的问题、会把/dev/pts下的目录给覆盖掉、所以我们进入目标机后可以在/dev/下创建pts这个目录、IP要设置在同一个网段内:
# mkdir /dev/pts
# mount -a





修改定制机的IP(避免和宿主机混淆)
# vim /mnt/sysroot/etc/rc.d/rc.sysinit 
ifconfig eth0 192.168.8.49
route add default gw 192.168.8.254


实现页面Nginx访问

这里我们用的版本是Nginx-1.4.2、这里我们以最简单的方式进行安装并运行服务起来:
解决依赖关系:

# yum install -y pcre-devel
# tar xf nginx-1.4.2.tar.gz
# cd nginx-1.4.2
# ./configure --prefix=/usr/local --conf-path=/etc/nginx/nginx.cnf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --without-pcre --without-http_rewrite_module--without-http_geo_module --without-http_uwsgi_module --without-http_fastcgi_module --without-http_scgi_module --without-http_memcached_module


--prefix=/usr/local:指定第三方软件安装目录
--conf-path=/etc/nginx/nginx.cnf:指定主配置文件的路径
--error-log-path=/var/log/nginx/error.log:指定错误日志存放路径
--http-log-path=/var/log/nginx/access.log:指定访问日志
--group=nginx:以nginx用户身份运行、反正不要以管理员的身份去运行
--group=nginx:nginx用户组
其他的选项都是nginx默认选项、我们都去掉
# make
# make install
# useradd nginx
# cd /usr/local/sbin
# ./nginx
# ss -tnl 查看80端口是否已经处于监听状态



接着移植nginx到目标机上去、用上面的那个复制命令的脚本:

# bash cpbin.sh
Enter a command:nginx
Enter a command:consoletype
Enter a command:quit
quit!


复制nginx下的配置文件到目标机上、而启动nginx需要nginx用户、所以用户也得追加到passwd文件中去、而后再给nginx添加一个测试页面就OK了:  


# cp /etc/nginx/ /mnt/sysroot/etc/ -r
# grep "^nginx" /etc/passwd >> /mnt/sysroot/etc/passwd
# grep "^nginx" /etc/group >> /mnt/sysroot/etc/group
# grep "^nginx" /etc/shadow >> /mnt/sysroot/etc/shadow
# mkdir /mnt/sysroot/usr/local/html
# vim /mnt/sysroot/usr/local/html/index.html
<h1>Welcome to Nginx</h1>
<h1>Shenzhen huanying nin!</h1>


给nginx提供一个服务脚本
# vim /mnt/sysroot/etc/rc.d/init.d/nginx   


#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac


而在nginx启动时需要依赖于日志目录和pid文件目录、所以我们要事先给nginx创建这两目录先、还给创建锁文件:   


# mkdir /mnt/sysroot/var/log/nginx
# mkdir /mnt/sysroot/usr/local/logs
# mkdir -pv /mnt/sysroot/var/lock/subsys
# chmod +x /mnt/sysroot/var/log/nginx
# chmod +x /mnt/sysroot/tmp/
# sync


OK、我们启动定制的目标系统、再启动dropbear和nginx、而服务也可以正常启动了、测试我们的nginx吧、如果服务脚本使用不了那就是里面可以有一些依赖函数或一些命令没有全都移植到目标机上、不过不要紧、我们可以手动启动服务器、这个问题都不大、最后测试完没什么就poweroff关机吧、如果nginx启动不了就重新把文件系统挂载为可读写就OK了:
# nginx
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (30: Read-only file system)
2016/03/10 19:22:02 [emerg] 78#0: mkdir() "/usr/local/client_body_temp" failed (30: Read-only file system)
# mount -o remonut,rw /



至此,我们的定制linux已完成,可以根据实际情况继续增加功能


总结下主要步骤:

1、准备目标磁盘
2、提供bzImage
3、提供busybox
建议静态编译:事先安装glibc-static
4、准备根文件系统
(1) 复制编译安装完成的busybox
(2) 补全所需要的其它目录
5、为init提供配置文件
etc/inittab
etc/rc.d/rc.sysint
6、提供虚拟终端,同时帐号密钥等文件
(1)编辑etc/inittab
::respawn:/sbin/getty 19200 tty1
::respawn:/sbin/getty 19200 tty2
(2)为目标系统提供passwd, group, shadow
7、主机名和banner
(1) /etc/sysconfig/network文件
编辑rc.sysinit,添加
[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z "$HOSTNAME" -o "$HOSTNAME" == "(none)" ] && HOSTNAME="localhost"
/bin/hostname $HOSTNAME
(2) 编辑/etc/issue
Welcome to MageEdu MiniLinux
kernel \r
8、提供ssh服务
(1) 
9、提供nginx服务
(1) 编辑安装并移植nginx
(2) 为目标系统上的nginx提供配置文件
(3) 提供测试网页


查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 去掉QoS的20%网速真的会快吗?

    在各种的Windows XP优化文章中有一篇关于QoS的文章可谓是历史悠久,从Windows XP刚开始发布时就开始流传,一直到现在还出现在频频出现在各种Windows XP的优化文章中。  那这个技巧到底是什么呢?  我们先来看看这个优化技巧的其中一个版本。  “在“运行”对话框中键入“…...

    2024/4/14 22:56:21
  2. 一组RadioButton,分别对应一个TextBox,当RadioButton被选中时,其后的TextBox置为不可用

    任务要求:一组RadioButton,分别对应一个TextBox,当RadioButton被选中时,其后的TextBox置为不可用。 //testControlPage.aspx.cs <%@ Page Language="C#" AutoEventWireup="true" CodeFile="testControlPage.aspx.cs" Inherits="tes…...

    2024/4/14 22:56:20
  3. Eclipse中安装配置Tomcat

    Eclipse(4.4.x及以上)中安装配置Tomcat 以下配置说明全部针对免安装版本 基于tomcat的安装目录和运行目录是可以不同的,本文都会进行说明 首先简单介绍一下tomcat的目录结构,一般情况下,tomcat包括以下子目录: bin、conf、lib、logs、temp、webapps、work 按作用不同,主要…...

    2024/4/14 22:56:19
  4. notepad++以16进制查看文件

    1、Notepad++可以编辑PE文件(二进制文件即HEX码),2进制、16进制都可以,通过附加的组件HexEditor即可实现。另外一款Notepad++自带插件TextFX也有这个功能,但实现效果不如Hex Editor。下载地址:https://sourceforge.net/projects/npp-plugins/files/Hex%20Editor/Hex%20Ed…...

    2024/4/16 12:54:00
  5. 感悟生命 感恩生活

    感悟生命 感恩生活 人的一生,无论成败,都会得到太多人的帮助。父母的养育、老师的教诲、配偶的关爱、朋友的帮助、大自然的恩赐和时代的赋予,我们成长的的每一步,都有人指点;我们生活的每一天,都有人帮助。正因为这样,我们度过了一个个难关,一步步走向了成功,创造并享受…...

    2024/4/14 21:52:00
  6. ARM busybox连接NFS

    主要步骤: 1 在PC上,建立NFS服务器。 2 在PC上,确认NFS服务器正确。 3 telent上ARM板busybox, mount -t nfs -o nolock 10.0.2.130:/export /home 建立NFS服务器 1 假设防火墙已经关闭 2 安装yum install nfs-utils.i686 3 安装yum install rpc2 (我实验时,已经…...

    2024/4/14 21:51:59
  7. 适用于XP的AMD双核优化补丁集

    导读:      适用于XP的AMD双核优化补丁集    今天刚给别人配了台机器,U是AM2 4000+ X2,装系统时想到以前看到的关于XP对双核的支持问题,于是上网搜了一下,大多是说给XP打4个补丁...最终找到了比较完整的补丁方案,总共是6个补丁和一个注册表,,6个补丁安装顺序及下载…...

    2024/4/20 1:49:08
  8. gridView和sqlDataSource的使用

    我使用了以下两种不同的方式来实现对数据的编辑和删除 第一种方式:把主要的代码写在aspx页面内[实现了编辑和删除].cs文件内不需要添加任何代码注: 1、 <add name="myTest" connectionString="Data source=.;Database=myTest;Integrated Security=True&…...

    2024/4/14 21:51:57
  9. 感恩与我们同行(参赛作文)

    恩意不在多重,只有真心相拥,相信大家都明白一个道理,那就是要懂得知恩图报。5、10突如其来的灾难,省定西市的岷县发生了特大冰雹山洪泥石流灾害,我们的家园深受暴雨的侵袭,顷刻之间,多少个家庭破裂,多少人失去了生命,这时的我们就像受过伤的雏鹰一样,无力抵挡风雨的侵…...

    2024/4/14 21:51:56
  10. C#连接MySql数据库的方法

    1、要连接MySql数据库必须首先下载MySql官方的连接.net的文件,文件下载地址为http://dev.mysql.com/downloads/connector/net/6.6.html#downloads ,下载平台选择.Net&Mono,下载ZIP免安装版。 2、解压缩刚才下载的mysql-connector-net-6.6.6-noinstall.zip文件,里面有几个…...

    2024/4/14 21:51:55
  11. Bmp格式图片与16进制的互相转换简解 Python

    BMP TO HEX首先介绍Github上一个简单的Bmp转成16进制的py:https://github.com/robertgallup/bmp2hex网上这种例子很多。思路也简单:将bmp文件一个个二进制进行分析,这里的1-2表示2个字节,16个二进制数据,0xXXXX四位16进制数据~:1)1-2:(这里的数字代表的是字节,下同)图…...

    2024/4/16 2:45:48
  12. 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南

    NXP MCU Boot UtilityEnglish | 中文 对于MCUBootUtility,RT-Flash工具,有任何使用上的问题,可以在《痞子衡嵌入式》博客下留言,也可以扫码加入QQ交流群。 1 软件概览 1.1 介绍NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP MCU里BootROM功能…...

    2024/4/14 21:51:52
  13. aspx头部代码

    添加web窗体 vs自动创建两个文件ceshi.aspx/ceshi.cs <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ceshi.aspx.cs" Inherits="SM_ceshi" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xh…...

    2024/4/19 21:51:56
  14. [转]busybox中telnet 功能添加

    使用busybox制作的一个基本根文件系统如何添加telnetd服务呢? 下面把本人的添加过程列出来供大家分享,如有不同意见请不吝赐教! 1、 添加telnet的支持(busybox中配置) Networking Utilities ---> [*] telnet [*] Pass TERM type to remo…...

    2024/4/14 21:51:50
  15. 优化系统,提高XP性能

    优化系统,提高XP性能- - 现在使用XP的人越来越多了,这里我把一些优化系统的方法告诉大家,使大家有个高性能的XP。 1.关闭华特医生(Dr.Watson) 在[运行]里输入--drwtsn32或在附件--〉系统工具--〉系统信息--〉工具--〉Dr.Watso…...

    2024/4/27 8:26:41
  16. Android busybox安装与vim Python IDE开发环境

    在Android上安装BusyBox 0. 先要把手机给Root了,具体教程这里就不提供了,网上有很多。 1. 下载BusyBox的binary,打开这个地址 http://www.busybox.net/downloads/binaries 例如下载了: /downloads/binaries/1.21.1/中的busybox-armv7l 2.把下载好的busybox-armv7l用adb pu…...

    2024/4/15 23:29:17
  17. 如何将double型数值转换为16进制的形式

    昨天编程序遇到一个随机生成的uid,怎么都不知道怎么生成的,最后用了HttpAnalyzerstdv7查了一下,原来是在js中生成的,为了模拟js,笔者将其内部函数看了一下,发现有代码中有一double型变量,将其转换成为了16进制,当时那个纠结啊,浪费了那么多时间也没想明白那些a,b,c,d和…...

    2024/4/14 22:56:18
  18. 感恩节|转行、患癌、一无所长…致敬伴我走出低谷的力量

    一定有一个身影TA默默陪你度过人生的某个暗黑时刻这个身影或许是家人或许是朋友也许是同事也许是老师但是更多的是自己时至感恩节我们采访了几名从传智播客毕业的老学员不同年龄的他们,对于“感恩”有着不一样的故事……他们中有刚毕业一个月的职场小萌新也有毕业十年的技术大…...

    2024/4/14 22:56:16
  19. nvm的下载,安装与使用

    nvm的下载,安装与使用 1,nvm作用: 进行nodejs版本控制 2,nvm下载地址: github.com/coreybutler… 注意: github服务器在国内较少,下载速度会很慢 链接:pan.baidu.com/s/1DEk3-VJg… 备注: 此链接为本人网盘链接,课放心使用 3,nvm安装nvm-noinstall.zip: 这个是绿色…...

    2024/4/14 22:56:15
  20. 深度完美 Ghost XP SP3 纯净优化版V2011.11

    深度完美 Ghost XP SP3 纯净优化版V2011.11 深度完美Ghost 系统采用最新的封装技术,全面提升系统在计算机上的部署速度,恢复效率更高. 系统中集成2000年以后流行的各种硬件驱动和最常用的软件。安装了截止2011年11月08前全部微软关键补丁, 完美通过微软正版验证,支持在线更…...

    2024/4/14 22:56:14

最新文章

  1. 【Redis 开发】缓存雪崩和缓存击穿

    缓存问题 缓存雪崩解决方案 缓存击穿互斥锁逻辑时间基于互斥锁解决缓存击穿问题基于逻辑过期方式解决缓存击穿问题 缓存雪崩 缓存雪崩是指在同一时间段&#xff0c;大量的缓存key同时失效或者Redis服务器宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力 解决…...

    2024/4/27 13:53:37
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【鸿蒙千帆起】《开心消消乐》完成鸿蒙原生应用开发,创新多端联动用户体验

    《开心消消乐》已经完成鸿蒙原生应用开发&#xff0c;乐元素成为率先完成鸿蒙原生应用开发的20游戏厂商之一。作为一款经典游戏&#xff0c;《开心消消乐》已经拥有8亿玩家&#xff0c;加入鸿蒙原生应用生态&#xff0c;将为其带来更优的游戏性能和更多创新体验。自9月25日华为…...

    2024/4/27 12:27:44
  4. Spring集成MyBatis

    基本准备 创建Dynamic Web Project 引入相关jar包 Spring框架相关jar包 MyBatis连接Spring相关jar包 连接MySQL驱动包 JSTL标签库包 添加db.properties文件&#xff0c;该属性文件配置连接数据库相关信息 drivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/myba…...

    2024/4/23 6:22:22
  5. 蓝桥杯习题

    https://www.lanqiao.cn/problems/1265/learning/ 第一题---排序 给定一个长度为N的数组A&#xff0c;请你先从小到大输出它的每个元素&#xff0c;再从大到小输出他的每个元素。 输入描述&#xff1a; 第一行包含一个整数N 第二行包含N个整数a1,a2,a3,...an&#xff0c;表…...

    2024/4/26 0:50:57
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57