分类目录归档:技术文献

sshfs 远程挂载文件系统

SSH 是一个强大且安全的工具,我们除了可以用它来远程管理主机外,还可以通过它建立 SSH tunnel 作 Proxy 用,远程传输文件等等。而这里我想要介绍另外一个功能,那就是结合 sshfs 这个工具可以把远程主机的文件系统映射到本地主机上,透过 SSH 把远程文件系统挂载到本机上,这样我们可以不必使用 scp 工具就可以做到直接复制及删除远程主机的文件了,就像操作本地磁盘一样方便。
sshfs 是基于 FUSE 构建的 SSH 文件系统客户端程序,通过它远程主机的配置无需作任何改变,就可以透过 SSH 协议来挂载远程文件系统了,非常方便及安全。
首先安装epel的yum源方便安装
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum -y install sshfs

挂载远程 ssh 文件系统:

sshfs [email protected]:/home/ /mnt/
sshfs 用户名@远程主机IP:远程主机路径 本地挂载点
sshfs -o transform_symlinks -o follow_symlinks user@hostname: /home/username/sshfs
-o transform_symlinks 表示转换绝对链接符号为相对链接符号
-o follow_symlinks 沿用服务器上的链接符号

 

通过/etc/fstab 开机自动挂载

I was able to make sshfs mount via fstab with Ubuntu 14.04 by doing using the following syntax as a standard user (note anything in CAPS is a variable for you to fill in):

USER@HOST:/REMOTE_DIR /LOCAL_DIR fuse.sshfs delay_connect,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/USERNAME/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID,gid=USER_GID 0 0
This is a combination of the information found here http://superuser.com/questions/669287/automount-sshfs-using-fstab-without-mount-a and adding the **delay_connect** from here http://askubuntu.com/questions/326977/sshfs-is-not-mounting-automatically-at-boot-despite-etc-fstab-configuration.

I used this tutorial to get my USER_ID and USER_GID: https://kb.iu.edu/data/adwf.html

To find a user’s UID or GID in Unix, use the id command. To find a specific user’s UID, at the Unix prompt, enter:

id -u username

Replace username with the appropriate user’s username. To find a user’s GID, at the Unix prompt, enter:

id -g username

树莓派的启动流程

为了降低成本,树莓派省去了传统计算机用来存储引导加载程序的板载存储器(BIOS), 而是直接把引导程序放在了SD卡中。
model-b-plus-Raspberry-Pi
树莓派B+模型图

树莓派具有一款博通的BCM2835系统芯片, 当启动时,ARM1176JZF-S的CPU会处于复位状态,由VideoCore IV GPU核心负责启动系统。启动的第一阶段, 从系统芯片中加载第一阶段的启动程序, 这个启动程序负责加载存放在SD卡中的第二启动程序(bootcode.bin)。bootcode.bin在VideoCore GPU上执行并加载第三阶段的启动器start.elf。 start.elf读取存放系统配置的文件config.txt。

当config.txt文件被加载解析之后, start.elf会读取cmdline.txt和kernel.img. cmdline.txt包涵内核运行的参数,而kernel.img将会被加载到处理器分配的共享内存中,当内核加载成功,处理器将结束复位状态,内核开始正式运行,系统启动正式开始。

启动流程:
1, 系统加电。
2, 加载系统芯片中的第一启动程序。
3, 第一启动程序加载SD卡上的bootcode.bin。
4, bootcode.bin执行,并加载第三阶段启动程序start.elf。
5, start.elf读取config.txt并加载内核。
6, config.txt解析完成,start.elf读取再次加载cmdline.txt文件,最后加载内核文件,然后CPU开始运行,系统启动成功。

参考:
1, Understanding the Raspberry Pi Boot Process

使用 PyInstaller 把python程序 .py转为 .exe 可执行程序

最近使用Python为项目开发一款绘图工具(绘出 声场三维模型)。因为希望能把Python脚本发布为脱离Python平台运行的可执行程序,比如单个的exe文件。PyInstaller恰满足这个需求。本文PyInstaller的版本是2.0,支持Python2.7。下面讨论怎样安装,使用PyInstaller。PyInstaller本身并不属于Python包。在安装 pyinstaller 之前假设你已经安装了python ,注意把python 环境变量配置好, 即 进入cmd后 输入 python 会进入 python shell.
pyinstaller安装:
1,下载pyinstaller并解压(可以去官网下载最新版):
2,安装最新版本的 pywin32-217.win32-py2.7.exe:
不然会出现错误Error: PyInstaller for Python 2.6+ on Windows needs pywin32.
3,进入cmd ,
d:\>cd d:\PyInstaller-2.1
d:\pyinstaller>python pyinstaller.py
Usage: python pyinstaller.py [opts] <scriptname> [ <scriptname> ...] | <specfile>
pyinstaller.py: error: Requires at least one scriptname file or exactly one .spec-file
以上信息表示可以开展工作了,以下是测试一个demo.py 文件的打包,文件放在当前目录的pyinstaller-2.1文件夹里面 .
d:\pyinstaller-2.1>python pyinstaller.py --console --onefile demo.py

上面的命令成功运行后demo.py 会生成一个demo文件夹。在这个文件夹下面会有一个名为dist的文件夹,此文件夹下面有转换好的demo.exe。

1

点击 demo.exe,首先会出来一个 控制台的黑窗口,如下图:

2
4, 上面编译出来的exe能够正常运行了,但带一个黑色的console,以下重新编译,加入--windowed --icon,取消--console
D:\PyInstaller-2.1>python pyinstaller.py -w --onefile --icon="my.ico" demo.py
icon是你喜欢的图标文件,py为你要打包的程序。最后生成一个demo.exe可执行文件,点击demo.exe直接显示所绘图形。

3

Qemu命令行参数解析

1.介绍
1.1特征
qemu是一个快速的动态译指的虚拟机。他支持多种处理器指令集的模拟。他有两种运行模式:
(1)全系统仿真,这种模式下,他就像一个PC,有独立CPU和外设,可支持多种操作系统。
(2)用户模式仿真,在这种模式下,他就像Wine一样,成为一个windows api模拟器
2.安装
支持linux、windows、mac os
3.QEMU PC系统仿真
3.1介绍
qemu系统仿真外设:(PCI,)
- i440FX host PCI bridge and PIIX3 PCI to ISA bridge (PCI桥和PCI到ISA桥)
- Cirrus CLGD 5446 PCI VGA card or dummy VGA card with Bochs VESA extensions (hardware level, including all non standard modes).

(VGA设备)
- PS/2 mouse and keyboard (PS2鼠标键盘)
- 2 PCI IDE interfaces with hard disk and CD-ROM support (两个PCI上的IDE借口,用于接硬盘和光驱)
- Floppy disk (软盘)
- NE2000 PCI network adapters (PCI网卡)
- Serial ports (串口)
- Creative SoundBlaster 16 sound card (声卡)
- ENSONIQ AudioPCI ES1370 sound card (声卡)
- Adlib(OPL2) - Yamaha YM3812 compatible chip (音频兼容芯片)
- PCI UHCI USB controller and a virtual USB hub. (PCI UHCI USB控制器和一个虚拟usb hub)
3.2快速启动
qemu linux.img
3.3调用
usage:qemu [options] [disk_image]
一般使用:
-h:帮助

-version:查看版本

-M machine:选择虚拟机

-fda file:
-fdb file:使用文件作为软盘,可以使用主机的“/dev/fd0”

-hda file:硬盘选项
-hdb file:硬盘选项
-hdc file:硬盘选项
-hdd file:硬盘选项

-cdrom file:光驱选项

-drive option[,option[,option[,...]]]:定义一个新的驱动器,有效选项如下:
file=file:定义镜像文件
if=interface:该选项定义驱动被连接的类型,ide, scsi, sd, mtd, floppy, pflash, virtio.
bus=bus,unit=unit:这些选项定义连接的驱动器定义总线数字和单位ID。
index=index:此选项定义驱动器连接在一个给定的接口类型列表中可用的连接器使用索引。(可能为盘符)
media=media:cdrom还是disk
cyls=c,heads=h,secs=s[,trans=t]:选项同‘-hdachs’
snapshot=snapshot:值为"on" or "off",允许被给的驱动器使能snapshot
cache=cache:值为"none", "writeback", or "writethrough" ,控制主机缓存用于访问数据块
aio=aio:值为"threads", or "native" ,选择线程基于磁盘IO还是本地linux IO
format=format:指定磁盘格式,建议使用raw
serial=serial:给设备指定序列号(可能是串口,也可能和串口无关)
addr=addr:指定PCI地址(仅仅:if=virtio)
默认情况下,连续写入缓存被用于所有的块设备,这意味着主机页缓存将被用于读和写数据,但是仅仅当数据被报知被写入存储子系统,写通

知将被发送到客户机。
Instead of ‘-cdrom’ you can use:qemu -drive file=file,index=2,media=cdrom
Instead of ‘-hda’, ‘-hdb’, ‘-hdc’, ‘-hdd’, you can use:
qemu -drive file=file,index=0,media=disk
qemu -drive file=file,index=1,media=disk
qemu -drive file=file,index=2,media=disk
qemu -drive file=file,index=3,media=disk

-boot:启动选项,软盘(a)、硬盘(c)、光驱(D)、网卡(n),默认是从硬盘启动

-snapshot:快照功能

-no-fd-bootchk:禁止启动检测软盘

-m megs:内存大小

-cpu model:选择cpu模式

-smp n:cpu个数

-numar opts:模拟一个多节点的非统一内存访问,如果cpu内存都被忽略,资源平分

-nographic:通常,QEMU使用SDL显示VGA输出,使用这个选项,使qemu成为简单的命令行应用程序

-k language:键盘布局,默认是en-us

-audio-help:声音子系统帮助显示,驱动列表,可调参数等

-soundhw card1,card2,... or -soundhw all:使能音频并选择声卡

-localtime:设置真实时钟为本地时钟,默认是UTC时间

-full-screen:全屏

-pidfile file:存储qemu进程PID到文件,用于脚本启动

-daemonize:初始化后QEMU进程长期驻留,qemu将不从标准IO分离,除非他准备连接到他的设备中的起其中一个。这个选项用于外部程序启动qemu

而不用去初始化静态条件。

-option-rom file:加载一个可选ROM文件内容,用于加载像EtherBoot这样的东西。

-mtdblock file:

USB选项:
-usb:使能usb驱动,默认项

-usbdevice devname:添加usb设备名称,有效的设备如下:
mouse:虚拟鼠标,会覆盖ps/2鼠标仿真
tablet:使用绝对坐标的指针设备(如:触摸屏),也会覆盖ps/2鼠标
disk:file:基于文件的大容量存储设备
host:bus.addr:通过总线地址传递主机设备(仅仅linux平台有效)
host:vendor_id:product_id:通过pid、vid传递主机设备(仅仅linux平台有效)

Network options: (网络这里先不做重点)
-net nic[,vlan=n][,macaddr=addr][,model=type]:

-net user[,vlan=n][,hostname=name]:

-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]:

-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]:

-net socket[,vlan=n][,fd=h][,mcast=maddr:port]:

-net none:

-tftp prefix:

-smb dir:

-redir [tcp|udp]:host-port:[guest-host]:guest-port:重定向网络

-kernel bzImage: 内核镜像

-append cmdline:内核命令行

-initrd file:使用文件作为ram盘

Debug/Expert options:
-serial dev:重定向虚拟串口到主机设备。默认设备是vc在图形模式下,是stdio在非图形界面。这个选项可被使用多次,可模拟4个串口。使用-

serial none会屏蔽所有串口。有效的字符设备是:
vc:虚拟控制台
pty:仅仅linux有效,虚拟tty(一个虚拟伪终端会被立刻分配)
none:没有设备被分配
null:无效设备
/dev/XXX:仅仅linux有效,使用主机tty,e.g. `/dev/ttyS0'.
/dev/parportN:仅仅linux有效,使用主机并口N,当前仅仅SPP(串行式)特征能被使用。
file:filename:写输出到filename,没有字符被读
stdio:仅仅unix可用
pipe:filename:命名管道
COMn:仅仅windows可用,使用主机串口n
udp:[remote_host]:remote_port[@[src_ip]:src_port]:这实现了UDP网络控制台,当远程主机(remote_host)或源ip(src_ip)未指定

,则会被默认设置为0.0.0.0。当未使用源端口(src_port)

tcp:[host]:port[,server][,nowait][,nodelay]:TCP网络控制方式有两种模式。可以发送串口I/O到一个位置或等待一个连接。默认情况下,TCP

网络控制台通过port发送主机。
Example to send tcp console to 192.168.0.2 port 4444
-serial tcp:192.168.0.2:4444
Example to listen and wait on port 4444 for connection
-serial tcp::4444,server
Example to not wait and listen on ip 192.168.0.100 port 4444
-serial tcp:192.168.0.100:4444,server,nowait

telnet:host:port[,server][,nowait][,nodelay]:telnet协议是用来代替原始的tcp协议,这个选项工作类似于-serial tcp。

unix:path[,server][,nowait]:使用unix域套接字代替tcp套接字,这个选项工作类似于-serial tcp。

-parallel dev:重定向虚拟并口到主机设备。最多可虚拟3个并口。

Ubuntu Server + kvm + qemu 搭建虚拟机

查看cpu是否支持。
$ grep vmx /proc/cpuinfo
flags标记中存在vmx即可
安装kvm+qemu
$ sudo apt-get install kvm qemu libvirt-bin virtinst virt-manager virt-viewer
查看kvm是否安装成功
$ sudo virsh -c qemu:///system list
创建 kvm文件夹
$ sudo mkdir /home/kvm
用qemu-img命令创建一个虚拟磁盘
$ qemu-img create -f qcow2 /home/kvm/ubuntu1204.img 10G
NOTE:create意思是创建一个新的磁盘,-f指定该磁盘的类型,可以创建raw的,也可以创建vmware兼容的,这里选择qcow2,qemu自己的类型来安装ubuntu,接下里的参数就是虚拟磁盘的文件名,可以放在你喜欢的任何地方,然后就是磁盘初始大小,一般5G,10G都可以,qemu的磁盘大小是随着需要可以自动的增大的,所以初始可以选择小点。
下载镜像包并且安装虚拟机操作系统
上传iso镜像
$ sudo qemu-system-x86_64 -hda /home/kvm/ubuntu1204.img -cdrom /home/kvm/ubuntu-12.04-server-amd64.iso -boot d -m 1024 -no-acpi -vga std -k en-us -vnc :1

 

VNC Viewer 连接成功后闪退的解决方法

依次点Option-->Advanced-->Expert找到ColourLevel,默认值是pal8,修改为rgb222或full。