Category: Linux

  • 无显示器-通过SD卡为cubieboard安装ubuntu linaro的ssh server

    最近买了一块cubieboard的板子,因为没有HDMI接口的现实器,板子买了一两个星期,还没用起来,买了跟HDMI转VGA的线也不能用。
    经过几番摸索,终于把系统安装好,并且用起来了。

    首先,通过下面的教程为SD卡安装ubuntu linaro系统:
    http://cn.cubieboard.org/forum.p … d=55&extra=page%3D1

    安装好了之后,启动,发现系统可以启动了,通过路由器,可以看到系统连接到网络,但是,要想在外部通过ssh连接到板子,出现拒绝连接的情况,没有安装ssh server。

    在论坛找到一个安装SSH SERVER 到SD的方法,但是不管用,还是连不上,ssh server没启动成功。
    http://cn.cubieboard.org/forum.p … d=56&extra=page%3D1

    下面自己编译代码的方案还没有试过:
    http://cn.cubieboard.org/forum.php?mod=viewthread&tid=54&extra=

    不过经过不断地努力和尝试,通过在linux宿主机编辑SD卡的信息,然后插入到板子上运行,记录一些日志信息,终于发现了些问题,也想到了解决办法。
    下面是发现的一些问题:
    查看/var/log/syslog经常出现sshd启动后,又退出的日志。
    在外面交叉编译的telnetd程序没启动成功,于是想到了在板子上编译的方法。

    下面说说我自己的方法:
    先下载telnetd的代码,在linux启动的时候,自动安装gcc编译器,然后编译程序,启动telnetd。通过外部程序telnet,再安装ssh。

    1.首先在宿主机下载telnetd的代码,拷贝到sd卡的opt目录下,并且在该目录下创建一个bin目录,修改权限。
    http://www.pudn.com/downloads166/ebook/detail757786.html
    下载的代码可能会编译不过,在宿主机试着编译一下,找出错误修改一下。
    记得有一个SHELLPATH的宏未定义,还有一些警告信息,修改一下即可。

    然后执行下面的命令:
    cp utelnetd.c /media/sdcard/opt
    cd /media/sdcard/opt
    sudo mkdir bin
    chmod 777 bin

    2.在Linux宿主机创建个人启动跟踪日志目录,然后编辑SD卡的Ubuntu linaro linux启动脚本。

    创建个人启动跟踪日志目录:
    cd /media/sdcard/var/log
    sudo mkdir sysstart
    chmod 777 sysstart

    编辑启动脚本.
    vi /media/sdcard/etc/init.d/rcS
    在脚本最后输入下面的内容:
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    #通过runlevel >> /var/log/sysstart/runlevel.txt,查看到之前系统启动后的运行等级是2,改成标准模式3。
    init 3
    # 启动后自动安装下面的编译器
    apt-get –fix-missing -y install gcc
    apt-get –fix-missing -y install g++
    apt-get –fix-missing -y install build-essential
    #编译代码
    gcc -o /opt/bin/telnetd utelnetd.c
    #重定向方便出错时跟踪
    /opt/bin/telnetd -d >> /var/log/sysstart/telnetd.txt
    netstat -anp >> /var/log/sysstart/netstat-anp.txt
    ps aux >> /var/log/sysstart/ps-aux.txt

    保存后,把SC卡插入cubieboard,接上网线,上电启动,找出板子的IP,然后就可以telnet连接了。
    telnet 192.168.1.101

    >apt-get –fix-missing -y install openssh-server

    安装好了后,启动:
    /etc/init.d/ssh start

    然后就可以通过ssh连接板子的系统了。

    安装好了ssh后,再编辑/etc/init.d/rcS文件,去掉刚开始添加的那些内容。

    总结:
    后来发现,也可以在宿主机编辑SD卡的linux启动脚本,添加2行:
    apt-get –fix-missing -y install openssh-server
    /etc/init.d/ssh start
    启动的时候安装ssh server并启动,就省去了下载telnetd源码的工作了。

  • Linux wc 统计

    $ wc –help
    用法:wc [选项]… [文件]…
    Print newline, word, and byte counts for each FILE, and a total line if
    more than one FILE is specified. With no FILE, or when FILE is -,
    read standard input.
    -c, –bytes print the byte counts
    -m, –chars print the character counts
    -l, –lines print the newline counts
    -L, –max-line-length print the length of the longest line
    -w, –words print the word counts
    –help 显示此帮助信息并退出
    –version 输出版本信息并退出
    例如:
    统计tcp的连接数:netstat -an|grep tcp | wc -l

  • netstat+awk 查看tcp的网络连接状态

    执行以下命令:
    #netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key.”\t”.state[key]}’
    会得到类似下面的结果,具体数字会有所不同:
    FIN_WAIT_1 286
    FIN_WAIT_2 960
    SYN_SENT 3
    LAST_ACK 32
    CLOSING 1
    CLOSED 36
    SYN_RCVD 144
    TIME_WAIT 2520
    ESTABLISHED 352
    这条命令可以把当前系统的网络连接状态分类汇总。
    这条语句是在张宴那边看到,据说是从新浪互动社区事业部技术总监王老大那儿获得的,非常不错。
    返回参数的说明如下:
    SYN_RECV表示正在等待处理的请求数;
    ESTABLISHED表示正常数据传输状态;
    TIME_WAIT表示处理完毕,等待超时结束的请求数。
    ——————————————————————
    再来看看awk:
    /^tcp/
    滤出tcp开头的记录,屏蔽udp, socket等无关记录。
    state[]
    相当于定义了一个名叫state的数组
    NF
    表示记录的字段数,如上所示的记录,NF等于6
    $NF
    表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT
    state[$NF]
    表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数
    ++state[$NF]
    表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一
    END
    表示在最后阶段要执行的命令
    for(key in state)
    遍历数组
    print key,”\t”,state[key]
    打印数组的键和值,中间用\t制表符分割,美化一下。

  • Freetds 连接SQL Server 错误:Unexpected EOF from the server

    安装

    安装好freetds 0.82后,用tsql连接数据库,会出现以下错误:

    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    Error 20017 (severity 9):
            Unexpected EOF from the server
            OS error 115, "Operation now in progress"
    Error 20002 (severity 9):
            Adaptive Server connection failed

    There was a problem connecting to the server

    程序连接也一样,Unexpected EOF from the server。

    查看网上的内容,可能与配置有关,于是修改配置文件freetds.conf,将对应的内容修改为以下的值:

    tds version = 8.0

    再次连接,成功连接到SQL Server。

  • Ubuntu mysql 不能远程连接的问题

    Ubuntu10.04上自带的MySQL,执行了
    apt-get install mysql
    安装完mysql-server
    启动mysql
    start
    本地可以连接进入数据库。
    -uroot -p
    设置了远程访问权限:
    mysql> grant all PRIVILEGES on *.* to admin@’%’ identified by ‘123456’;
    Query OK, 0 rows affected (0.04 sec)
    mysql> use information_schema
    mysql> select * from user_privileges;
    查询到有下面的结果:’admin’@’%’,说明mysql已经授权远程连接。
    在windows下访问Ubuntu的数据库,连接不上,但是Ubuntu上安装的apache可以访问。
    用iptalbes添加端口3306后也无法访问。
    :~# iptables -A INPUT -p tcp –dport 3306 -j ACCEPT
    Ubuntu上查看Mysql网络连接:
    :~# netstat -an |grep 3306
    tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
    本地端口也在监听
    :~# ufw status
    Firewall not loaded
    本地防火墙未打开
    后来在网上找到一个解决办法:
    打开 /etc/mysql/my.cnf 文件,找到 bind-address = 127.0.0.1 修改为 bind-address = 0.0.0.0
    重启mysql : sudo /etc/init.d/mysql restart
    就好了,我在windows下就可以连上了。

  • windwos引导linux

    以前机器上装有solaris,并且solaris为主分区,采用grub启动,引导到windows和solaris,后来在windows下用分区攻击PM8.5删除了solaris分区并将其转为ntfs格式(因为pc上运行太慢了),机器在第二次启动时,无法进入系统,又没有windows系统引导光盘,只有一张Redhat的安装盘。
    于是,在装有windows xp的机器上安装了Redhat linux 5.2,重启发现还是无法启动到linux,也就无法修复以前的gurb启动了。
    最后,没办法,找来一张windows的ghost光盘,进入winpe,运行磁盘分区工具ftd,将安装windows的分区设为活动,重启电脑,总算可以进入windows了。
    能不能在windows分区下引导linux系统呢,网上的资料比较少,大多数多系统启动都是采用grub引导的。经过一番摸索,终于还是让我成功 了。
    首先,将linux安装盘放到光驱,启动电脑,从linux光盘启动机器,进入rescue模式,在图形操作时,不要让系统自动mount原来的系统,进入命令行模式,通过以下命令分别将windows的C盘和linux分区mount到该模式的/mnt中,具体操作如下:
    #mkdir /mnt/redhat
    #mount /dev/sda9 /mnt/redhat
    #mkdir /mnt/windowsc
    #mount /dev/sda1 /mnt/windowsc
    将linux引导信息复制到 /mnt/windowsc下,即C盘。
    #dd if=/dev/sda9 bs=512 count=1 of=/mnt/windowsc/linux.lnx
    如果windows系统原来还有个grldr的grub引导程序,上一步可以省略,grldr跟linux.lnx是同一个东西。
    然后,将linux的menu.lst也复制到c盘。
    #cd /mnt/redhat/boot/grub
    #cp menu.lst /mnt/windowsc
    重启,进入linux,在C:盘根目录下找到boot.ini,如果没看到,则显示隐藏文件,并且去掉只读属性。
    在boot.ini中添加
    C:\linux.lnx=”boot from linux”
    或者C:\grldr=”boot from linux”
    保存,退出。
    下次重启后,linux.lnx或者grldr就会查找menu.lst,读取linux的启动信息,这样就可以从windows引导linux了。

    或者直接在linux下将grdlr和menu.lst复制到U盘,然后放到windows的C盘。