运维工程师必须掌握的基础技能有哪些

  • Linux基础 包括对Linux整体的理解/使用和基本命令: 了解Linux FHS : Filesystem Hierarchy Standard,国人写的这本书不错 Linux系统架构与目录解析 (豆瓣) 入门Linux:鸟哥的Linux私房菜.基础学习篇(第三版) (豆瓣) 个人认为鸟哥的这本书是一本非常好的入门书 基本操作命令:Google,如Linux command cheat sheet 熟悉至少一个内置编辑器: vi, nano 至少熟悉一个发行版(或系列),建议作为服务器常用的如Centos, Debian, Ubuntu,可以了解多个常用发行版 2. 运维的命令: 运维相关的工具(命令),了解它能解决很多问题。 前几天刚回答了一个问题:如何才能更深入的学习linux? 里面的图在这里也可以用到: 可以对着图对学习了解这些命令。 另外我个人也会对平时用到的这些工具做一个整理和记录,总结到我的个人维基上:Wiki · Tanky Woo 3. 基础服务: LAMP或LNMP :Apache/Nginx,MySQL,PHP/Python/Perl LAMP (software bundle) FTP DNS SAMBA EMAIL NTP DHCP ... 可以本地搭建练练手 这里推荐鸟哥另外一本书 服务器架设篇: 鸟哥的Linux私房菜 (豆瓣) 4. 运维平台工具: 也在这个问题 如何才能更深入的学习linux? 里提到了: Nagios Puppet Zabbix Cacti SaltStack .... 可以选择性的折腾下,因为这个涉及到业务,没有实际环境,很难去理解他们的功能和特点。 5. 脚本: 必备:Shell 额外:Python,Perl... 6. 底层: Linux C,内核 7. 网络: 网络是非常重要的一块 把《TCP/IP协议详解》多看几遍,理解。 熟练使用tcpdump等抓包工具 8. 安全: 防火墙配置,如 iptables 9. 硬件: 接口类型 查看硬件信息 知道各类型服务器,如塔式、机架式、刀片式 10. 其它: 了解更多特定技能要求的方式: Google搜"Linux运维工程师 招聘",看看他们的需求。 最后推荐一本书:Unix/Linux系统管理技术手册 UNIX/Linux 系统管理技术手册 (豆瓣) 后续想到再做补充 素养/处理方式: 除了技能,我觉得素养(态度)也可以谈谈 这个正好看到右边相关问题:运维工程师需要具备哪些性格特质? 1. 安全 运维人员的权限很大,所以一定要保证帐号/私钥的安全。 最好使用加密工具存储。比如truecrypt,1password 基于本地存储。切勿用网盘,也不建议用lastpass等 ssh私钥添加密码 以上任何一点都很重要,否则弄丢了,风险会非常大。 2. 责任心 如上面那个帖子里 @山大 提到的 Owner 意识 遇到报警,第一时间处理,而不要等着他人去处理 如果无法处理,应该第一时间让同事协助帮忙,而不要禁止报警,让问题掩盖 3. 细心 你的任何一个操作,都可能造成系统的损坏、业务出问题。所以敲命令时一定要细心、再三确认。你敲的再快,也就节省那么一点时间,出了问题才是大事。 4. 推进/改善 如果代码有问题,导致系统开销很大,比如负载,io等。应该第一时间和开发部门确认,要求优化代码。 5. 进取心/不断学习 运维的知识范围很广,要不断学习。遇到问题,做好分析记录,事后还可以在部门内分享交流。 这也是我为什么热衷于写技术博客和维基的原因,好记性不如烂笔头。记录整理的过程也是一个思考升华的过程。 以上内容由多媒体教室运维-云雀运维编写。
  • PC(Windows)不装任何杀毒软件和防火墙真的没问题么?

    主要取决于你用的什么系统了,基本上只有 Windows 系统有这个需要,其它iOS, Linux 中毒的可能性很小。
    
    防火墙:基本上不与其它人在一网络里面也没有太大必要,比如自己在家使用ADSL+路由器上网。
    
    杀毒软件:我以前用 windows 的时候一般都是裸奔的,没中过毒,因为:
    
    1. 我一般只上固定的几个网站,其它网站一般通过百度的网页快照查看。
    2. 我只安装常用的必要软件,不会经常安装别的软件。
    3. 除非修改系统设置,我一般使用普通用户登录,而不是系统默认的具有管理员权限的帐户。
    4. 通过组策略关闭所有驱动器上的自动播放功能。
    5. 实在遇到可疑文件,修改它的安全设置为“拒绝所有人的读/写/修改权限”。
    6. 查看优盘内容,使用右键->打开,而不是双击。
    国产杀软没用过,以前只用过小红伞,现在系统用的是 Ubuntu。

    我的vagrant 每次启动到 default: SSH auth method: private key 这一步就不动了

    添加box
    如下添加一个debian的box
    E:\ubuntu\vagrant-box-ngixn-php-fpm-mysql-redis-nodejs>vagrant box add  debian p
    ackage.box
    ==> box: Adding box 'debian' (v0) for provider:
        box: Downloading: 
    ejs/package.box
        box: Progress: 100% (Rate: 11.0M/s, Estimated time remaining: --:--:--)
    ==> box: Successfully added box 'debian' (v0) for 'virtualbox'!
    
    vagrantfile
    在任何vagrant工程下面都有一个vagrantfile,就像makefile一眼规,用来配置vagrant的欣慰所创建的虚拟机信息。
    vagrant使用
    添加镜像
    vagrant box add abc   boxpath[url|path]  #abc未名称
    
    开发到开发目录
    vagrant init abc #初始化
    D:\work\test>vagrant init debian
    A Vagrantfile has been placed in this directory. You are now
    ready to vagrant up your first virtual environment! Please read
    the comments in the Vagrantfile as well as documentation on
    vagrantup.com for more information on using Vagrant.
    vagrant up #启动
    D:\work\test>vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    ==> default: Importing base box 'debian'...
    ==> default: Matching MAC address for NAT networking...
    ==> default: Setting the name of the VM: test_default__
    ==> default: Clearing any previously set network interfaces...
    ==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    ==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
    ==> default: Booting VM...
    ==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    ==> default: Machine booted and ready!
    ==> default: Checking for guest additions in VM...
    ==> default: Mounting shared folders...
    default: /vagrant => D:/work/test
    vagrant ssh #ssh登录
    D:\work\test>vagrant ssh
    ssh executable not found in any directories in the %PATH% variable. Is an
    SSH client installed? Try installing Cygwin, MinGW or Git, all of which
    contain an SSH client. Or use your favorite SSH client with the following
    authentication information shown below:
    Host: 127.0.0.1
    Port: 2222
    Username: vagrant
    Private key: C:/Users/zhangwei_f/.vagrant.d/insecure_private_key
    开启ssh后使用xshell登录
    网络配置
    Vagrant的网络有三种模式
    1、较为常用是端口映射,就是将虚拟机中的端口映射到宿主机对应的端口直接使用 ,在Vagrantfile中配置:
    config.vm.network :forwarded_port, guest: 80, host: 8080
    guest: 80 表示虚拟机中的80端口, host: 8080 表示映射到宿主机的8080端口。
    
        开启这个后,如果vagrant已经启动了,在命令行输入 vagrant reload 重启机器,就可以再宿主机伤使用 localhost:8080来访问虚拟机的localhost:80 。
    
    2、如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP ,在Vagrantfile中配置:
    config.vm.network :private_network, ip: "192.168.1.104"
    192.168.1.104 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可
    
    3、如果需要将虚拟机作为当前局域网中的一台计算机,由局域网进行DHCP,那么在Vagrantfile中配置:
    config.vm.network :public_network
    
    目录映射:
    既然是开发环境,那么开发工作肯定还是需要在本地完成,而不是都要进到虚拟机中去完成,虚拟机就好好在后台运行服务就好了,不然就本末倒置了,所以这里就需要使用目录映射功能,将本地的目录映射到虚拟机的对应目录。
    默认情况下,当前的工作目录,会被映射到虚拟机的 /vagrant 目录,当前目录下的文件可以直接在 /vagrant 下进行访问,当然也可以在通过 ln 创建软连接,如
    ln -fs /vagrant/wwwroot /var/www
    
    来进行目录映射,当然,从自动化配置的角度,能不进系统就不需要进系统,所以在Vagrant也可以进行目录映射的操作:
    config.vm.synced_folder "wwwroot/", "/var/www"
    
    前面的参数 “wwwroot/” 表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: “d:/www/”
    后面的参数 “/var/www” 表示虚拟机中对应映射的目录。
    一些命令
    vagrant up (启动虚拟机)
    vagrant halt (关闭虚拟机——对应就是关机)
    vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
    vagrant resume (恢复虚拟机 —— 与前面的暂停相对应)
    vagrant destroy (删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)
        vagrant reload  (重启)

    度娘!我下学期就要上高中了,现在我应该看些什么读物!请帮我介绍介绍几本吧?英语的也介绍一下?如果介

    事实上,你必须认识到存在的问题,有这样做的决心,为什么不听自己内心的声音,最困难,最合适的方式去(每个人不同的方法),你还是问自己。我有45分,但是后来我发现有趣的原因,所以我让自己使劲接触英语,很快坠入爱河,在恋爱。入学超过130。记住自己的独特的重量

    嵌入式qtopia-2.2.0图形界面 怎么关闭

    先说明一下几个QT的区别:
    
    从Qt4.1开始,Qt/Embedded改名为Qtopia Core,又从Qt4.4.1开始,Qtopia Core又改名为Qt for Embedded Linux。
    
    我们通常所说的 Qt 都是指的用于 Linux/Unix 的 Qt/X11,真正意义上Qt 是泛指 Qt 的所有版本的图像界面库,比如 Qt/X11,Qt Windows, Qt Mac 等。
    
    Qt/Embeded 的概念:它是用于嵌入式 Linux 系统的 Qt 版本,Qt/Embeded 也简称 Qte 或 Qt/EQte 去掉了 X Lib 的依赖而直接工作在 Framebuffer 上,虽然它是 Qt 的嵌入式版本,但是它不是 Qt/X11 的子集,它有部分机制(比如 QCOP 等)就不能用于 Qt/X11 中。
    Qtopia 是一个基于 Qte 的类似桌面系统的应用环境,包含有 PDA 版本和 Phone 版本。实质上 Qtopia Core 还是基础类库,相当于 Qte。
    最近 Qtopia Core 改名了,新名字叫做:qt-embeded-linux-xxxxxx。
    
    以下的内容结合《基于 SKY2440/TQ2440 的 Qt/Embeded 应用程序开发完全手册》
    
    编译 PC 版本的 Qtopia-2.2.0
    
    1、准备编译器
    
    知道你的ubuntu10.04默认安装的是gcc4.4,现在我们要使用gcc3.4
    
    #apt-get install gcc-3.4
    
    安装后/usr/bin下就多出了gcc-3.4,原先这里有个gcc,它是指向gcc-4.4的软链接,现在我们要让它指向gcc-3.4
    
    #rm gcc
    
    #ln -s /usr/bin/gcc-3.4 /usr/bin/gcc
    
    测试一下
    
    $gcc -v
    
    注意:在编译PC版本的qt4.5时我们又需要把gcc的版本从3.4升到4.4
    
    2、解压包
    
    #tar xvfj Qte_.tar.bz2 -C /
    
    在“Linux 资源\Linux 平台开发工具包\”里面
    
    �arm-qtopia-2.2.0_build:将 qtopia-2.2.0.tar.bz2 源码编译成 ARM 版本,并且编译 tslib-1.4.1.tar.bz2 源码和 EmbedSky_apps.tar.bz2 源码。
    
    � arm-qtiopia-2.2.0-konqueror_build:在 arm-qtopia-2.2.0_build 的基础上增加了 konqueror.tar.bz2 的 编 译 。
    
    � setARM_QpeEnv:设置 ARM 版本的环境变量的脚本。
    
    � setX86_QpeEnv:设置 X86 版本的环境变量的脚本。
    
    � x86-qtopia-2.2.0_build:将 qtopia-2.2.20tar.bz2 源码编成 PC 版本。
    
    � x86-qtopia-2.2.0-konqeror_build:在 x86-qtopia-2.2.0_build 的基础上增加了 konqueror.tar.bz2 的编译。
    
    � EmbedSky_apps.tar.bz2:后面几个章节讲到的应用程序的源码合集(Makefile 文件基于 ARM 的,可以利用该源码包自行生成 x86 版本的 Makefile 文 件 )。
    
    � konqueror.tar.bz2:Web 浏览器的源码。
    
    � qtopia-2.2.0.tar.bz2:qtopia-2.2.0 的源码。
    
    � test_x86:当 PC 版本的 Qtopia-2.2.0 编译成功后,仿真时运行该脚本。
    
    � tslib-1.4.1.tar.bz2:触摸校正的源码
    
    3、#./x86-qtopia-2.2.0-kongqueror_build
    
    这一步会发生很多错误,下面几步来修正。
    
    以下内容参照 
    
    和 
    
    4、修改几处代码源文件
    
    修改x86-qtopia-2.2.0/qt2/src/tools/qmemoryfile_unix.cpp 143行
    将
        if (!f)
            f = ::pen(tmpFile.latin1(), O_CREAT | O_WRONLY);   
    修改为
        if (!f)
            f = ::pen(tmpFile.latin1(), O_CREAT | O_WRONLY, 0666);
    
    修改x86-qtopia-2.2.0/qtopia/src/libraries/qtopia/qmemoryfile_unix.cpp 141行
    将
        if (!f)
            f = ::pen(tmpFile.latin1(), O_CREAT | O_WRONLY);   
    修改为
        if (!f)
            f = ::pen(tmpFile.latin1(), O_CREAT | O_WRONLY, 0666);  
    
    修改/x86-qtopia-2.2.0/qtopia/src/libraries/qtopia/backend/vobject.cpp:419行
        char *dot = strrchr(g,'.');
    为
        char *dot = (char*)strrchr(g,'.');
    
    修正/x86-qtopia-2.2.0/qtopia/src/plugins/codecs/wavplugin/wavplugin.cpp:435行
        char *ext = strrchr( path.latin1(), '.' );
    改为
        char *ext = (char*)strrchr( path.latin1(), '.' );
    
    修改x86-qtopia-2.2.0-konqueror_biuld的第26行,
    把
            . setQpeEnv
    改为
            ./setQpeEnv
    
    5、安装一些包
    
    # sudo apt-get install libx11-dev x11proto-xext-dev libqt3-mt-dev uuid-dev
    
    6、手动设置环境变量,然后执行脚本
    
    #source ./x86-qtopia-2.2.0/setQpeEnv
    
    #./x86-qtopia-2.2.0-kongqueror_build
    
    7、PC 仿真 Qtopia-2.2.0
    
    #./test_x86
    
    编译 ARM 版本的 Qtopia-2.2.0
    
    1、准备交叉编译器
    
    #tar xvfj EABI_4.3.3_EmbedSky_.tar.bz2 -C /
    
    然后新的交叉编译器就在/opt/EmedSky/4.3.3/bin下面,把这个路径放到/etc/environment中,source一下
    
    #which arm-linux-gcc    ;确保当前的交叉编译器就是/opt/EmedSky/4.3.3/bin下的那个,因为你之前可能装过其他版本的交叉编译器,并且把它的路径也放到了PATH中,并且还在/opt/EmedSky/4.3.3/bin在前面,那就不对了。
    
    2、#./arm-qtopia-2.2.0-kongqueror_build
    
    这一步过程中会有一些错误,下面几步来修正
    
    3、 修改arm-qtopia-2.2.0/qt2/src/tools/qmemoryfile_unix.cpp 143行
    将
        if (!f)
            f = ::pen(tmpFile.latin1(), O_CREAT | O_WRONLY);   
    修改为
        if (!f)
            f = ::pen(tmpFile.latin1(), O_CREAT | O_WRONLY, 0666);
    
    4、手动设置环境变量,然后执行脚本
    
    # source ./arm-qtopia-2.2.0/setQpeEnv
    
    #./arm-qtopia-2.2.0-kongqueror_build
    
    最后显示done!成功。
    
    至于2.3节所讲的制作包含 Qtopia-2.2.0 的文件系统工作就不需要做了天嵌制作好的文件系统里面已经包含了。
    
    开发第一个Qt程序
    
    依照天嵌资料第三章讲的去做。不过有三点需要注意
    
    (1)在main.cpp中印少了一个右括号
    
    (2)Makefile文件要改的地方不仅仅是红色标注的地方。红色标注的只是要添加的内容,还有一些地重复了,要删除。直接把资料上给的Makefile复制过来也有一些问题。如果是自己改注意最后一下文件项后面不能要“\",比如
    
    OBJECTS = first.o \
    
          main.o
    
    main.o后面就不能要“\"。
    
    (3)当编译好arm版本的first程序后,first、first.png、first.desktop是在资料所说的三个位置,但是“把三个文件放到开发板的相应位置”怎么理解呢?
    
    把first放到开发板的/opt/Qtopia/bin/ 下;first.png放到/opt/Qtopia/pics/下;first.desktop放到/Qtopia/apps/EmbedSky/下

    openwrt编译环境出现这个是什么意思

    Openwrt 官方正式的发行版是已编译好了的映像文件(后缀名bin或trx、trx2),此映像文件可从Openwrt官方网站的下载页面中轻松获取到,连接地址为 OpenWrt官方网站。这些编译好的映像文件是基于默认的配置设置,且只针对受支持的平台或设备的。因此,为什么要打造一个自己的映像文件,理由有以下四点:
      您想拥有一个个性化的配置OpenWrt(彰显个性,在朋友圈子里显摆显摆,开个玩笑);
      您想在实验性的平台上测试OpenWrt;
      您参与测试或参与开发OpenWrt的工作;
      或者,最简单的目的就是为了保持自己的Openwrt为最新版本;
      若想实现上述目的,其实很简单,按下述文字即可成功编译出一个您的Openwrt来。
      准备工作
      在开始编译Openwrt之前需要您做些准备工作;与其他编译过程一样,类似的编译工具和编译环境是必不可少的:
      一个构建OpenWrt映像的系统平台,简单说就是准备一个操作系统(比如Ubuntu、Debian等);
      确保安装了所需的依赖关系库, (在debian系统中就是安装各种需要的软件包)
      OpenWrt源代码副 本
      首先, 开机登陆到支持编译Openwrt的操作系统(废话了)。实体机或者虚拟机(Vmware 或者 Qemu)里的操作系统都行,这里推荐使用Linux系统。 bsd和mac osx系统也可以编,但不推荐,且未验证是否可编译成功。下文假定您使用的是Debian操作系统,使用 apt-get 来管理包. 替代的选择是 Ubuntu (分支 Kubuntu, Xubuntu 等即可)。
      第二步, 就是安装所需要的各种软件包, 包括编译器,解压工具,特定的库等. 这些工作可以简单的通过键入以下命令 (通常需要root 或者是 sudo 权限),以root权限安装下列软件包(可能并不完整,会有提示,提示缺少即装就可以了):
      32位(x86)请执行下列命令:
      # apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
      git libncurses5-dev libz-dev patch unzip zlib1g-dev
    
      64位(x86_64)请执行下列命令(多装了哪些库或软件包呢?请您仔细看一看哦):
      # apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
      git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs \
      lib32gcc1 libc6-dev-i386
    
      参考 本列表中 所列的编译环境所需要软件包或库。
      某些依赖的为库或软件包也许操作系统中已经安装过,此时apt-get会作出提示(提示您忽略或重新安装的),别紧张,放轻松些,编译Openwrt不会像编译DD-WRT那样难的(至少本人是体会到了编译DD-WRT的难)。
      最后下载一份完整的 Openwrt 源码到编译环境中。关于Openwrt的源代码下载,途径有二,一是通过 svn ,一是通过 git,建议使用 svn ,因为Openwrt主要以 svn 来维护Openwrt系统的版本。另外,请注意Openwrt中不同的分支版本,一个是用得较多的开发快照,俗称 trunk,二是稳定版,俗称 backfire。
      安装Subversion
      若你想通过svn下载源代码,你需安装 Subversion。Subversion,或称SVN, 是OpenWrt的project中用来控制版本的系统,它非常类似的 CVS的界面和使用条款。 执行下述命令即可安装SVN,很容易的:
      # apt-get install subversion
    
      Subversion安装完毕,通过SVN命令可获取得到一份OpenWrt纯净源代码。您还得创建一个目录以便存放获取得到的Openwrt源代码,要获取源代码你还得输入subversion命令来获取 (svn里这种操作称之为'check out') 。命令很简单的,继续看下去就能见到了,别着急,耐心点儿。
      编译流程
      编译专属于您的设备的特定Openwrt固件以一下五个步骤:
      通过Subversion命令获得源代码;
      更新(或安装) package feeds〔package feeds无法确切翻译,待译吧);
      创建一个默认配置以检查编译环境是否搭建好了 (假如需要的话);
      用Menuconfig来配置即将编译生成的固件映像文件的配置项;
      最后开始编译固件;
      下载源代码
      最后,下载一份完整的OpenWrt源代码。你可选择:
      下载稳定发行版,或
      下载开发版 (俗称"trunk"版)。
      使用发行版的源码
      截止本文时, Openwrt公开发行的稳定版为 OpenWrt 10.03 "backfire"。此版本是最稳定的,但也许不包括最新更新的补丁或最新编写的出的新功能。
      下述代码即举例说明了通过svn从brandkfire获得backfire源代码(此版本意思是从trunk分支的补丁也在backfire版本中了,即包含修复补丁):
      # mkdir OpenWrt/
      # cd OpenWrt/
      # svn co svn://svn.openwrt.org/openwrt/branches/backfire
    
      注解: 上述svn命令将在当前目录创建一个 OpenWrt/backfire/ 子目录,此目录包含此命令获取到的源代码。
      您也可以通过下述命令,下载不含修复补丁的backfire的原版源码:
      # svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03
        使用开发版源代码
      当前的开发版本分支(trunk)已包含最新的实验补丁。此分支或许还突破了Openwrt原来所不支持的硬件设备的限制哦,惊喜的同时也有风险存在。因此,编译trunk版,慎之~
      # mkdir OpenWrt/
      # cd OpenWrt/
      # svn co svn://svn.openwrt.org/openwrt/trunk/
    
      更多详细资料详见: dev.openwrt.org/wiki/GetSource.
      跟进并更新源代码
      因Openwrt的源代码随时都会变动,故此命令将确保您所获取得到的源码的最新性。下述假设您用的是backfire版本的源码:
      ## Here, backfire is the directory name of the current release branch you're tracking
      # cd OpenWrt/backfire/
      # svn up
    
      'svn up' 命令用于更新SVN上更新了,但本地尚未更新的这部分源代码(本人实践证明此命令会将本地源码与SVN上的源码先比较,若SVN有更新才会下载更新的部分,很实用的一个命令)。如果未指定目标路径,则此命令将更新当前目录及当前目录的子目录内的源码。
      Feeds下载
      Feeds即为包含到你的OpenWrt环境中的额外软件包的索引之类的。(feed译名很多,莫衷一是,至2008年底为止,还没有一个十分通用而备受认可的中文译名;所以此文当中我们用英文feed来称呼)。 最主要的Feeds有以下三个:
      'packages' - 路由的基本功能,
      'LuCI' - OpenWrt默认的GUI(WEB管理界面), 及
      'Xwrt' - 其他的GUI。
      一般情况,你至少需要含 'packages' 和 'LuCI'两个Feeds。
      下载完feeds之后, (为编译OpenWrt的recipies额外的预定义包) 您可以检查哪些feeds要包括在内。编辑在你的编译环境的根目录下的'feeds.conf.default'文件。
      然后使用下列命令开始下载(注:可能你需要先运行cd trunk进入trunk目录才能成功执行下列命令):
      # ./scripts/feeds update -a
    
      在此之后,下载的软件包需要安装。亦即指的下边的命令啦。若路过下边的install命令则后续make menuconfig将无法成功执行!(注:可能你需要先运行cd trunk进入trunk目录才能成功执行下列命令):
      # ./scripts/feeds install -a
    
      只需编辑Feeds的配置文件或运行更新命令,即可很方便地更新或添加新的实验性的packages到源码中并编译到OpenWrt固件去。
      注意:请老坛友及旧的新闻组成员们注意了,这一步取代了创建符号链接symlinks的老办法哦。
      更新Feeds
      诸如此类源码,你得定期更新Feeds。 通过如上相同的命令:
      # ./scripts/feeds update -a
      # ./scripts/feeds install -a
    
      注意:若你清楚地知道你不需添加新的packages到menuconfig中去,那么你可在更新Feeds时跳过这一步。
      生成配置
      You may not have to make configration always after updating sources and feeds, but making it ensures that all packages from source and feeds are correctly included in your build configuration.
      Defconfig
      下一步是检查编译环境,若可进行编译则生成默认配置:
      # make defconfig
    
      若defconfig回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可,不难的,细心点就行。
      Menuconfig
      menuconfig是一个基于文本的工具,它处理选择的目标(需要还是不需要)、编译生成软件包(openwrt下是IPKG格式)以及内核选项(编译成模块还是内核)等等
      # make menuconfig
    
      在你离开并保存配置文件(默认都是.config)后,将自动配置依赖关系,让你可以着手编译更新的固件。
      大众可通过'menuconfig'这一简单的图形化的配置环境,非常轻松地编译出专属您本人的OpenWrt固件。
      可以用'menuconfig',以开发的意图来编译OpenWrt的固件,为自己(个人)创造一个结构简单但是功能强大的环境。(上句实在难翻译,只能意译。并且也请大家都学习下编译OP固件,让以OP固件盈利的人丢掉那肮脏的饭碗!)
      Menuconfig或多或少有些难以说明的地方,即使是最专业的配置,也可以寻求帮助并加以解决。 需要你指定何种目标平台,要包含的package软件包和内核模块等均需要你指定,配置标准的过程中会包括修改:
      目标平台(即路由器何种架构,BCM呢还是AR均可选择)
      选择要包含的package软件包
      构建系统设置
      内核模块
      Target system is selected from the extensive list of supported platforms, with the numerous target profiles – ranging from specific devices to generic profiles, all depending on the particular device at hand. Package selection has the option of either 'selecting all package', which might be un-practical in certain situation, or relying on the default set of packages will be adequate or make an individual selection. It is here needed to mention that some package combinations might break the build process, so it can take some experimentation before the expected result is reached. Added to this, the OpenWrt developers are themselves only maintaining a smaller set of packages – which includes all default packages – but, the feeds-script makes it very simple to handle a locally maintained set of packages and integrate them in the build-process.
      假如你需要LuCI, 要到Administration 菜单里,在LuCI组件的子菜单下, 并选择: luci-admin-core, luci-admin-full, and luci-admin-mini组件包。
      假如你不需要PPP,你可到Network菜单下取消对它的选择,以便编译时不包含此组件。
      Menuconfig用法: 确保这些组件包是以 '*'星号标记而不是 'M'标记。
      如果你是以星号 '*'标记该组件包, 则该组件包将编译进最终生成的OpenWrt固件中。
      如果你仅以 'M'标记该组件包, 则该组件包将不会编译进最终生成的OpenWrt固件中。
      The final step before the process of compiling the intended image(s) is to exit 'menuconfig' – this also includes the option to save a specific configuration or load an already existing, and pre-configured, version.
      Exit and save.
      Source Mirrors
      The 'Build system settings' include some efficient options for changing package locations which makes it easy to handle a local package set:
      Local mirror for source packages
      Download folder
      In the case of the first option, you simply enter a full URL to the web or ftp server on which the package sources are hosted. Download folder would in the same way be the path to a local folder on the build system (or network). If you have a web/ftp-server hosting the tarballs, the OpenWrt build system will try this one before trying to download from the location(s) mentioned in the Makefiles . Similar if a local 'download folder', residing on the build system, has been specified. The 'Kernel modules' option is required if you need specific (non-standard) drivers and so forth – this would typically be things like modules for USB or particular network interface drivers etc.
      编译固件
      万事具备,只欠东风,通过下面简单的make命令来编译:
      # make
    
      在多核电脑中编译
      具有多核CPU处理器的电脑进行编译,使用下述参数可令编译过程加速。 常规用法为 <您cpu处理器的数目 + 1> – 例如使用3进程来编译 (即双核CPU), 命令及参数如下:
      # make -j 3
    
      后台编译
      若你在这个系统内编译OpenWrt的同时还处理其他,可以让闲置的I/O及CPU来在后台编译固件 (双核CPU):
      # ionice -c 3 nice -n 20 make -j 2
    
      编译简单的基本的软件包
      当你为OpenWrt开发或打包软件包,编译简单的基本的软件包可以很轻易地编译该软件包 (例如, 软件包cups):
      # make package/cups/compile V=99
    
      一个在Feeds里的软件包大约是这样子的:
      # make package/feeds/packages/ndyndns/compile V=99
    
      编译错误
      如果因某种不知道的原因而编译失败,下面有种简单的方法来得知编译到底错在哪里了:
      # make V=99 2>&1 |tee build.log |grep -i error
    
      上述编译命令意为:V99参数,将出错信息保存在build.log,生成输出完整详细的副本(with stdout piped to stderr),只有在屏幕上显示的错误。
      举例说明:
      # ionice -c 3 nice -n 20 make -j 2 V=99 CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 \
      |tee build.log |egrep -i '(warn|error)'
    
      The above saves a full verbose copy of the build output (with stdout piped to stderr) in build.log and outputs only warnings and errors while building using only background resources on a dual core CPU.
      一键编译
      即使用脚本来编译Openwrt固件。许多朋友编译Openwrt是用的脚本来编译的,详见: forum.openwrt.org/viewtopic.php?id=
      生成的固件在哪
      编译成功后所生成的固件文件位于bin目录下,可用如下命令查看:
      # cd bin/
      # ls */
    
      清理
      编译OpneWrt时你可能需要一个清洁干净的编译环境。 以下操作有利用编译工作:
      清洁
      清洁trunk/ 目录,在编译过程中使用“make clean”命令即可。 此命令将删除bin目录和build_dir目录下的所有文件及文件夹。
      ## See CAUTION below
      # make clean

    openwrt编译环境出现这个是什么意思

    Openwrt 官方正式的发行版是已编译好了的映像文件(后缀名bin或trx、trx2),此映像文件可从Openwrt官方网站的下载页面中轻松获取到,连接地址为 OpenWrt官方网站。这些编译好的映像文件是基于默认的配置设置,且只针对受支持的平台或设备的。因此,为什么要打造一个自己的映像文件,理由有以下四点:
        您想拥有一个个性化的配置OpenWrt(彰显个性,在朋友圈子里显摆显摆,开个玩笑);
        您想在实验性的平台上测试OpenWrt;
        您参与测试或参与开发OpenWrt的工作;
        或者,最简单的目的就是为了保持自己的Openwrt为最新版本;
        若想实现上述目的,其实很简单,按下述文字即可成功编译出一个您的Openwrt来。
        准备工作
        在开始编译Openwrt之前需要您做些准备工作;与其他编译过程一样,类似的编译工具和编译环境是必不可少的:
        一个构建OpenWrt映像的系统平台,简单说就是准备一个操作系统(比如Ubuntu、Debian等);
        确保安装了所需的依赖关系库, (在debian系统中就是安装各种需要的软件包)
        OpenWrt源代码副 本
        首先, 开机登陆到支持编译Openwrt的操作系统(废话了)。实体机或者虚拟机(Vmware 或者 Qemu)里的操作系统都行,这里推荐使用Linux系统。 bsd和mac osx系统也可以编,但不推荐,且未验证是否可编译成功。下文假定您使用的是Debian操作系统,使用 apt-get 来管理包. 替代的选择是 Ubuntu (分支 Kubuntu, Xubuntu 等即可)。
        第二步, 就是安装所需要的各种软件包, 包括编译器,解压工具,特定的库等. 这些工作可以简单的通过键入以下命令 (通常需要root 或者是 sudo 权限),以root权限安装下列软件包(可能并不完整,会有提示,提示缺少即装就可以了):
        32位(x86)请执行下列命令:
        # apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
        git libncurses5-dev libz-dev patch unzip zlib1g-dev
    
        64位(x86_64)请执行下列命令(多装了哪些库或软件包呢?请您仔细看一看哦):
        # apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
        git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs \
        lib32gcc1 libc6-dev-i386
    
        参考 本列表中 所列的编译环境所需要软件包或库。
        某些依赖的为库或软件包也许操作系统中已经安装过,此时apt-get会作出提示(提示您忽略或重新安装的),别紧张,放轻松些,编译Openwrt不会像编译DD-WRT那样难的(至少本人是体会到了编译DD-WRT的难)。
        最后下载一份完整的 Openwrt 源码到编译环境中。关于Openwrt的源代码下载,途径有二,一是通过 svn ,一是通过 git,建议使用 svn ,因为Openwrt主要以 svn 来维护Openwrt系统的版本。另外,请注意Openwrt中不同的分支版本,一个是用得较多的开发快照,俗称 trunk,二是稳定版,俗称 backfire。
        安装Subversion
        若你想通过svn下载源代码,你需安装 Subversion。Subversion,或称SVN, 是OpenWrt的project中用来控制版本的系统,它非常类似的 CVS的界面和使用条款。 执行下述命令即可安装SVN,很容易的:
        # apt-get install subversion
    
        Subversion安装完毕,通过SVN命令可获取得到一份OpenWrt纯净源代码。您还得创建一个目录以便存放获取得到的Openwrt源代码,要获取源代码你还得输入subversion命令来获取 (svn里这种操作称之为'check out') 。命令很简单的,继续看下去就能见到了,别着急,耐心点儿。
        编译流程
        编译专属于您的设备的特定Openwrt固件以一下五个步骤:
        通过Subversion命令获得源代码;
        更新(或安装) package feeds〔package feeds无法确切翻译,待译吧);
        创建一个默认配置以检查编译环境是否搭建好了 (假如需要的话);
        用Menuconfig来配置即将编译生成的固件映像文件的配置项;
        最后开始编译固件;
        下载源代码
        最后,下载一份完整的OpenWrt源代码。你可选择:
        下载稳定发行版,或
        下载开发版 (俗称"trunk"版)。
        使用发行版的源码
        截止本文时, Openwrt公开发行的稳定版为 OpenWrt 10.03 "backfire"。此版本是最稳定的,但也许不包括最新更新的补丁或最新编写的出的新功能。
        下述代码即举例说明了通过svn从brandkfire获得backfire源代码(此版本意思是从trunk分支的补丁也在backfire版本中了,即包含修复补丁):
        # mkdir OpenWrt/
        # cd OpenWrt/
        # svn co svn://svn.openwrt.org/openwrt/branches/backfire
    
        注解: 上述svn命令将在当前目录创建一个 OpenWrt/backfire/ 子目录,此目录包含此命令获取到的源代码。
        您也可以通过下述命令,下载不含修复补丁的backfire的原版源码:
        # svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03
            使用开发版源代码
        当前的开发版本分支(trunk)已包含最新的实验补丁。此分支或许还突破了Openwrt原来所不支持的硬件设备的限制哦,惊喜的同时也有风险存在。因此,编译trunk版,慎之~
        # mkdir OpenWrt/
        # cd OpenWrt/
        # svn co svn://svn.openwrt.org/openwrt/trunk/
    
        更多详细资料详见: dev.openwrt.org/wiki/GetSource.
        跟进并更新源代码
        因Openwrt的源代码随时都会变动,故此命令将确保您所获取得到的源码的最新性。下述假设您用的是backfire版本的源码:
        ## Here, backfire is the directory name of the current release branch you're tracking
        # cd OpenWrt/backfire/
        # svn up
    
        'svn up' 命令用于更新SVN上更新了,但本地尚未更新的这部分源代码(本人实践证明此命令会将本地源码与SVN上的源码先比较,若SVN有更新才会下载更新的部分,很实用的一个命令)。如果未指定目标路径,则此命令将更新当前目录及当前目录的子目录内的源码。
        Feeds下载
        Feeds即为包含到你的OpenWrt环境中的额外软件包的索引之类的。(feed译名很多,莫衷一是,至2008年底为止,还没有一个十分通用而备受认可的中文译名;所以此文当中我们用英文feed来称呼)。 最主要的Feeds有以下三个:
        'packages' - 路由的基本功能,
        'LuCI' - OpenWrt默认的GUI(WEB管理界面), 及
        'Xwrt' - 其他的GUI。
        一般情况,你至少需要含 'packages' 和 'LuCI'两个Feeds。
        下载完feeds之后, (为编译OpenWrt的recipies额外的预定义包) 您可以检查哪些feeds要包括在内。编辑在你的编译环境的根目录下的'feeds.conf.default'文件。
        然后使用下列命令开始下载(注:可能你需要先运行cd trunk进入trunk目录才能成功执行下列命令):
        # ./scripts/feeds update -a
    
        在此之后,下载的软件包需要安装。亦即指的下边的命令啦。若路过下边的install命令则后续make menuconfig将无法成功执行!(注:可能你需要先运行cd trunk进入trunk目录才能成功执行下列命令):
        # ./scripts/feeds install -a
    
        只需编辑Feeds的配置文件或运行更新命令,即可很方便地更新或添加新的实验性的packages到源码中并编译到OpenWrt固件去。
        注意:请老坛友及旧的新闻组成员们注意了,这一步取代了创建符号链接symlinks的老办法哦。
        更新Feeds
        诸如此类源码,你得定期更新Feeds。 通过如上相同的命令:
        # ./scripts/feeds update -a
        # ./scripts/feeds install -a
    
        注意:若你清楚地知道你不需添加新的packages到menuconfig中去,那么你可在更新Feeds时跳过这一步。
        生成配置
        You may not have to make configration always after updating sources and feeds, but making it ensures that all packages from source and feeds are correctly included in your build configuration.
        Defconfig
        下一步是检查编译环境,若可进行编译则生成默认配置:
        # make defconfig
    
        若defconfig回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可,不难的,细心点就行。
        Menuconfig
        menuconfig是一个基于文本的工具,它处理选择的目标(需要还是不需要)、编译生成软件包(openwrt下是IPKG格式)以及内核选项(编译成模块还是内核)等等
        # make menuconfig
    
        在你离开并保存配置文件(默认都是.config)后,将自动配置依赖关系,让你可以着手编译更新的固件。
        大众可通过'menuconfig'这一简单的图形化的配置环境,非常轻松地编译出专属您本人的OpenWrt固件。
        可以用'menuconfig',以开发的意图来编译OpenWrt的固件,为自己(个人)创造一个结构简单但是功能强大的环境。(上句实在难翻译,只能意译。并且也请大家都学习下编译OP固件,让以OP固件盈利的人丢掉那肮脏的饭碗!)
        Menuconfig或多或少有些难以说明的地方,即使是最专业的配置,也可以寻求帮助并加以解决。 需要你指定何种目标平台,要包含的package软件包和内核模块等均需要你指定,配置标准的过程中会包括修改:
        目标平台(即路由器何种架构,BCM呢还是AR均可选择)
        选择要包含的package软件包
        构建系统设置
        内核模块
        Target system is selected from the extensive list of supported platforms, with the numerous target profiles – ranging from specific devices to generic profiles, all depending on the particular device at hand. Package selection has the option of either 'selecting all package', which might be un-practical in certain situation, or relying on the default set of packages will be adequate or make an individual selection. It is here needed to mention that some package combinations might break the build process, so it can take some experimentation before the expected result is reached. Added to this, the OpenWrt developers are themselves only maintaining a smaller set of packages – which includes all default packages – but, the feeds-script makes it very simple to handle a locally maintained set of packages and integrate them in the build-process.
        假如你需要LuCI, 要到Administration 菜单里,在LuCI组件的子菜单下, 并选择: luci-admin-core, luci-admin-full, and luci-admin-mini组件包。
        假如你不需要PPP,你可到Network菜单下取消对它的选择,以便编译时不包含此组件。
        Menuconfig用法: 确保这些组件包是以 '*'星号标记而不是 'M'标记。
        如果你是以星号 '*'标记该组件包, 则该组件包将编译进最终生成的OpenWrt固件中。
        如果你仅以 'M'标记该组件包, 则该组件包将不会编译进最终生成的OpenWrt固件中。
        The final step before the process of compiling the intended image(s) is to exit 'menuconfig' – this also includes the option to save a specific configuration or load an already existing, and pre-configured, version.
        Exit and save.
        Source Mirrors
        The 'Build system settings' include some efficient options for changing package locations which makes it easy to handle a local package set:
        Local mirror for source packages
        Download folder
        In the case of the first option, you simply enter a full URL to the web or ftp server on which the package sources are hosted. Download folder would in the same way be the path to a local folder on the build system (or network). If you have a web/ftp-server hosting the tarballs, the OpenWrt build system will try this one before trying to download from the location(s) mentioned in the Makefiles . Similar if a local 'download folder', residing on the build system, has been specified. The 'Kernel modules' option is required if you need specific (non-standard) drivers and so forth – this would typically be things like modules for USB or particular network interface drivers etc.
        编译固件
        万事具备,只欠东风,通过下面简单的make命令来编译:
        # make
    
        在多核电脑中编译
        具有多核CPU处理器的电脑进行编译,使用下述参数可令编译过程加速。 常规用法为 <您cpu处理器的数目 + 1> – 例如使用3进程来编译 (即双核CPU), 命令及参数如下:
        # make -j 3
    
        后台编译
        若你在这个系统内编译OpenWrt的同时还处理其他,可以让闲置的I/O及CPU来在后台编译固件 (双核CPU):
        # ionice -c 3 nice -n 20 make -j 2
    
        编译简单的基本的软件包
        当你为OpenWrt开发或打包软件包,编译简单的基本的软件包可以很轻易地编译该软件包 (例如, 软件包cups):
        # make package/cups/compile V=99
    
        一个在Feeds里的软件包大约是这样子的:
        # make package/feeds/packages/ndyndns/compile V=99
    
        编译错误
        如果因某种不知道的原因而编译失败,下面有种简单的方法来得知编译到底错在哪里了:
        # make V=99 2>&1 |tee build.log |grep -i error
    
        上述编译命令意为:V99参数,将出错信息保存在build.log,生成输出完整详细的副本(with stdout piped to stderr),只有在屏幕上显示的错误。
        举例说明:
        # ionice -c 3 nice -n 20 make -j 2 V=99 CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 \
        |tee build.log |egrep -i '(warn|error)'
    
        The above saves a full verbose copy of the build output (with stdout piped to stderr) in build.log and outputs only warnings and errors while building using only background resources on a dual core CPU.
        一键编译
        即使用脚本来编译Openwrt固件。许多朋友编译Openwrt是用的脚本来编译的,详见: forum.openwrt.org/viewtopic.php?id=
        生成的固件在哪
        编译成功后所生成的固件文件位于bin目录下,可用如下命令查看:
        # cd bin/
        # ls */
    
        清理
        编译OpneWrt时你可能需要一个清洁干净的编译环境。 以下操作有利用编译工作:
        清洁
        清洁trunk/ 目录,在编译过程中使用“make clean”命令即可。 此命令将删除bin目录和build_dir目录下的所有文件及文件夹。
        ## See CAUTION below
        # make clean

    jdk怎么配置路径?

    jdk安装 E:\Java\jdk1.6.0_02 安装路径首先右键点我的电脑。打开属性。然后选择“高级”里面的“环境变量”,在新的打开界面中的系统变量里需要设置三个属性“java_home”、“path”、“classpath”,其中在没安装过jdk的环境下,path属性是本来存在的。而java_home和classpath是不存在的。 首先点“新建”,然后在变量名写上java_home,顾名其意 ... by liliang_xf 2007-12-24 回复 (0) Linux AS 安装 JDK 1.6 linux配置java环境变量(详细) 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲回车,当询问是否同意的时候,输入yes,回车。之后会在当前目录下生成一个jdk1.6.0_14目录,你可以将它复制到 任何一个目录下。二. 需要配置的环境变量 1. ... by wangsong76 2009-07-08 回复 (0) 在Linux下的Java环境设置一.下载JDK 1.登录Sun的JDK官方下载网址:  2.下载jdk-1_5_0_07-linux-i586-rpm.bin文件 二.安装JDK1.增加jdk-1_5_0_07-linux-i586-rpm.bin文件的可执行权限 #root> chmod 755 jdk-1_5_0_07-linux ... by seagar 2006-12-01 回复 (0) Ubuntu手动安装JDK xmarklet网络书签,收集自己的网络书签,创建自己的网站导航。  Ubuntu手动安装JDK 安装前可以查看一下jdk版本,进入终端 $java -version 回车,可以看到jdk版本是1. 4 .2的。 1. 手动安装jdk6 首先,在 下载jdk-6u12-linu ... by 贝特虫子 2009-03-01 回复 (21) 相关新闻 rapid-generator-v3.9 代码生成 ... v3.9发布说明: rapid-generator是一个生成器引擎,让你可以专注与代码生成器模板的编写, 可以生成如ibatis,ibatis3,hibernate,spring_mvc,struts2等等代码. 本次版本与以往版本不同之处为现在提供一个命令行工具,可以独立运行. 并且生成器有相当多新特性相当实用. 附言: 独立版中自带了h2数据库,可以根据压缩包中的运行说明运行dem ... by badqiu 2010-06-30 回复 (23) Java语言下一步可能快速演化, Ec ... 作为Java开发者, 学习了5以后带来的泛型语法之后, 不知道你有没有注意到一个特殊的地方: Class<?> java.lang.Object.getClass(); 虽然它的签名返回值为 Class<?> , 但是它的规范文档却给出了这样的说明: 引用 Returns ... The actual result type is Class<? extends | ... by 歆渊 2007-02-27 回复 (2) JRuby1.1发布 JVM下的Ruby语言实现JRuby正式发布1.1版,这个版本最主要关注的是性能,除此之外,值得一提的包括: 1- 支持将Ruby代码编译成Java Bytecode。 2- 将Oniguruma这个Ruby 1.9标配的正则库移植到Java。 3- 重构过的IO实现。 4- 更低的内存消耗。 5- 修复大量其他兼容性问题。主页:  下载: ht ... by gml520 2008-04-06 回复 (2) Eclipse 3.6M5 发布 新增动态路 ... 新年伊始,Eclipse研发小组发布了第一个Eclipse 3.6的里程碑版本,在今年6月份他们还将推出Eclipse 3.6的最终版本。Eclipse 3.6的开发代号为Helios(太阳神),这已经是Eclipse历史上第五个里程碑版本,最新加入的特性包括:新的命令行选项、动态路径变量、补丁应用能力,而它对XULRunner 1.9.2的支持、PDE、JDT和Equinox等功能也有 ... by YiSingQ 2010-02-04 回复 (4) 相关博客 jdk安装 E:\Java\jdk1.6.0_02 安装路径首先右键点我的电脑。打开属性。然后选择“高级”里面的“环境变量”,在新的打开界面中的系统变量里需要设置三个属性“java_home”、“path”、“classpath”,其中在没安装过jdk的环境下,path属性是本来存在的。而java_home和classpath是不存在的。 首先点“新建”,然后在变量名写上java_home,顾名其意 ... by liliang_xf 2007-12-24 回复 (0) JDK环境变量 jdk的环境变量配置在桌面上点击 我的电脑右键>属性>高级>环境变量>系统环境变量 PATH有选项点编辑 java_home,classpath没有选项点新建。 jdk1.3版本的环境变量: PATH : 安装目录\jdk\bin; CLASSPATH=.;安装目录\jdk\src.jar;安装目录\jdk\lib\tools.jar;安装目录\jdk\lib\;安装目录 ... by penghao122 2007-02-15 回复 (0) JAVA和Tomcat安装后配置环境变量在JDK安装完成之后,一般需要设置计算机系统的环境变量,以便于其它软件确定JDK的安装位置。我用的是Windows XP操作系统环境,具体操作步骤如下: 1、右击“我的电脑”看“系统属性”---->“高级”------>“环境变量”按钮,进入“环境变量”对话框。在该对话框中可以设置只有当前用户登录时才有效的用户变量,也可以设置该系统的所有登录时都有效的系统变量。 2、在“环境变量”对话框 ... by 清泉风影 2007-06-14 回复 (0) ubuntu9.10下安装JDK 1、下载要安装的JDK(例如:jdk-6u10-linux-i586.bin)。2、将JDK文件放到要安装的目录下。3、修改文件权限为读写(可以在文件属性设置)。4、安装JDK sudo ./jdk-6u10-linux-i586.bin5、配置环境变量 a> sudo gedit /etc/profile 打开profile文件 b> 在umask 022之前加上环境变量 ... by xhmder 2010-06-10 回复 (0) 相关问答 SSH设计论坛 无法登陆出现错误 ... 2009-12-12 21:45:45 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the ja ... by love__lonly 2009-12-14 回复 (2) cmd中输入javac,提示'javac' ... 我 echo %JAVA_HOME% 结果:C:\Program Files\Java\jdk1.6.0_02 echo %path% 结果:%JAVA_HOME%\bin;C:\Program Files\IDM Computer Solutions\UltraEdit\ 请问有什么错误吗??或者还需要别的环境变量????? by tianyihuyidao 2009-11-23 回复 (7) java 安装问题我的环境变量设置是 classpath : .;%java_home%\lib;%java_home%\lib\tools.jar java-home: C:\Program Files\Java\jdk1.6.0_20 path : D:\VC\Tools\WinNT;D:\VC\MSDev98\Bin;D:\VC\Tools;D:\VC98\bin;%java_home%\bin; ... by waha1234 2010-05-10 回复 (9) 关于默认JDK的切换我的系统是XP,安装了JDK1.4和1.6,我在DOS窗口输入java -version 总是显示版本是1.6,我想将系统的默认jdk设置为1.4,请问如何做?我在path中加入了D:\j2sdk1.4.2_13\bin,但运行java -version后还是显示为jdk1.6,请问如何设置为1.4?谢谢。 by dandee 2009-01-07 回复 (36) 相关圈子讨论 fedora7下的环境配置 fc7下的环境配置 export GROOVY_HOME=/usr/local/groovy-1.5.0 export JAVA_HOME=/usr/java/jdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin:$GROOVY_HOME/bin 但 ... by shiren1118 2007-12-09 回复 (4) jruby配置环境变量疑问我在jruby官网下载1.1.4版本后,在环境变量中添加JRUBY_HOME=JRUBY安装路径,然后在path中加入%JRUBY_HOME%\bin, 最后在cmd中敲入jruby提示不是可用的命令。请问下大家到底jruby该怎么配置环境变量呢? by stxu1987 2008-10-13 回复 (4) ubuntu 环境变量问题第一次装ubuntu,版本好像是6.01,用text model安装的,完成后安装jdk1.5(后又安装了jdk1.6),直接解压缩,设置环境变量,修改.bash_profile文件,可是java -version还是1.4.2,在jdk1.5版本直接进入bin文件夹查看,版本也是1.4.2,换1.6版本后可显示正确的版本号. 不解,请找找问题所在. 用户是安装时按系统提示创建的用户. by hisoka 2007-03-26 回复 (4) linux下java开发,如何运行tomc ... 前些天, 在网上看到ubuntu的linux操作系统,下了一人,安装后觉得还不错.还可以运行QQ,及MSN等聊天工具现将自己的操作步骤在这里做一个简单的介绍,便于大家分享. ubuntu linux的下载:  安装后的设置:(这个过程可能比较慢.中间的操作系统的升级可以跳过)  ... by hlsps 2007-02-13 回复 (3) 相关专栏文章 JDK 在 Lin ... Sun发布的JDK/JRE有两种版本,一种是.rpm.bin格式的,另一种则是.bin格式的,前者我没有试,但是我想应该是适合于rpm的,可能会安装到/usr里面去,而且自动化程度可以高一些。后者则完全是绿色软件,只是做一个解压的动作。下面我就来讲后者的安装全攻略。 1、首先我们要到Sun的网站上去下载JDK/JRE(点这里进入),最新的正式版本已经是6.0(也就是1.6),当然老的版本Sun也仍然 ... by Arbow 2006-12-23 回复 (2) AndroMDA生 ... AndroMDA开发环境搭建翻译者:Jason S.H.Chen (英文地址: ) 环境设置本节将一步步 ... by CshBBrain 2010-01-01 回复 (0) TOB - Book ... 如果还没有JDK 5, 从 SUN 网站下载一个安装如果还没有Eclipse (最新是3.2, 至少要3.1, 以便支持Generics, Annotation), 从 eclipse.org 下载一个. 因为最新的JDK 1.5.0_09 的 javac 编译 TOB 生成的代码也会 crash, 所以只能通过eclipse编译. 从  ... by 歆渊 2006-11-24 回复 (0) 开始体验Ab ... TOB是一个ORM的替代品, 但它本身却不是ORM, 而是一个新数据库时代的开始, 从以磁盘为主体的关系模型系统向以内存为主体的关系模型系统的一个转变. TOB的面向对象的持久模型是把OO的思想融入到ER模型里去, 真正的以OO的思想和手法来处理持久问题. 已有的OODB要么是从OO中摒弃ER模型(所谓的Transparent Persistency, 其实是拒绝接受Relation概念); 要么就 ...

    运维工程师必须掌握的基础技能有哪些

    运维人员的权限很大,所以一定要保证帐号/私钥的安全。
    最好使用加密工具存储。比如truecrypt,1password
    基于本地存储。切勿用网盘,也不建议用lastpass等
    ssh私钥添加密码
    
    以上任何一点都很重要,否则弄丢了,风险会非常大。
    
    2. 责任心
    
    如上面那个帖子里 @山大 提到的 Owner 意识
    遇到报警,第一时间处理,而不要等着他人去处理
    如果无法处理,应该第一时间让同事协助帮忙,而不要禁止报警,让问题掩盖
    
    3. 细心
    
    你的任何一个操作,都可能造成系统的损坏、业务出问题。所以敲命令时一定要细心、再三确认。你敲的再快,也就节省那么一点时间,出了问题才是大事。
    
    4. 推进/改善
    
    如果代码有问题,导致系统开销很大,比如负载,io等。应该第一时间和开发部门确认,要求优化代码。
    
    5. 进取心/不断学习
    
    运维的知识范围很广,要不断学习。遇到问题,做好分析记录,事后还可以在部门内分享交流。
    
    这也是我为什么热衷于写技术博客和维基的原因,好记性不如烂笔头。记录整理的过程也是一个思考升华的过程。

    solr jvm配置多大比较好

    0×00 开头照例扯淡
    
    自从各种脱裤门事件开始层出不穷,在下就学乖了,各个地方的密码全都改成不一样的,重要帐号的密码定期更换,生怕被人社出祖宗十八代的我,甚至开始用起了假名字,我给自己起一新网名”兴才”,这个看起来还不错的名字,其实是我们家乡骂人土话,意思是脑残人士…. -_-|||额好吧,反正是假的,不要在意这些细节。
    
    这只是名,至于姓氏么,每个帐号的注册资料那里,照着百家姓上赵钱孙李周吴郑王的依次往下排,什么张兴才、李兴才、王兴才……于是也不知道我这样”兴才”了多久,终于有一天,我接到一个陌生电话:您好,请问是马兴才先生吗?
    
    好么,该来的终于还是来了,于是按名索骥,得知某某网站我用了这个名字,然后通过各种途径找,果然,那破站被脱裤子了。
    果断Down了那个裤子,然后就一发不可收拾,走上了收藏裤子的不归路,直到有一天,我发现收藏已经非常丰富了,粗略估计得好几十亿条数据,拍脑袋一想,这不能光收藏啊,我也搭个社工库用吧……
    
    0×01 介绍
    
    社工库怎么搭呢,这种海量数据的东西,并不是简单的用mysql建个库,然后做个php查询select * from sgk where username like ‘%xxxxx%’这样就能完事的,也不是某些幼稚骚年想的随便找个4g内存,amd双核的破电脑就可以带起来的,上面这样的语句和系统配置,真要用于社工库查询,查一条记录恐怕得半小时。好在这个问题早就被一种叫做全文搜索引擎的东西解决了,更好的消息是,全文搜索引擎大部分都是开源的,不需要花钱。
    
    目前网上已经搭建好的社工库,大部分是mysql+coreseek+php架构,coreseek基于sphinx,是一款优秀的全文搜索引擎,但缺点是比较轻量级,一旦数据量过数亿,就会有些力不从心,并且搭建集群做分布式性能并不理想,如果要考虑以后数据量越来越大的情况,还是得用其他方案,为此我使用了solr。
    
    Solr的基础是著名的Lucene框架,基于java,通过jdbc接口可以导入各种数据库和各种格式的数据,非常适合开发企业级的海量数据搜索平台,并且提供完善的solr cloud集群功能,更重要的是,solr的数据查询完全基于http,可以通过简单的post参数,返回json,xml,php,python,ruby,csv等多种格式。
    
    以前的solr,本质上是一组servlet,必须放进Tomcat才能运行,从solr5开始,它已经自带了jetty,配置的好,完全可以独立使用,并且应付大量并发请求,具体的架构我们后面会讲到,现在先来进行solr的安装配置。
    
    0×02 安装和配置
    
    以下是我整个搭建和测试过程所用的硬件和软件平台,本文所有内容均在此平台上完成:
    
    软件配置: solr5.5,mysql5.7,jdk8,Tomcat8 Windows10/Ubuntu14.04 LTS
    
    硬件配置: i7 4770k,16G DDR3,2T西数黑盘
    
    2.1 mysql数据库
    
    Mysql数据库的安装和配置我这里不再赘述,只提一点,对于社工库这种查询任务远远多于插入和更新的应用来说,最好还是使用MyISAM引擎。
    搭建好数据库后,新建一个库,名为newsgk,然后创建一个表命名为b41sgk,结构如下:
    
    id bigint 主键 自动增长
    
    username varchar 用户名
    
    email varchar 邮箱
    
    password varchar 密码
    
    salt varchar 密码中的盐或者第二密码
    
    ip varchar ip、住址、电话等其他资料
    
    site varchar 数据库的来源站点
    
    接下来就是把收集的各种裤子全部导入这个表了,这里推荐使用navicat,它可以支持各种格式的导入,具体过程相当的枯燥乏味,需要很多的耐心,这里就不再废话了,列位看官自己去搞就是了,目前我初步导入的数据量大约是10亿条。
    
    2.2 Solr的搭建和配置
    
    首先下载solr:
    $ wget 
    
    解压缩:
    $ tar zxvf solr-5.5.0.tgz
    
    安装jdk8:
    $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo apt-get update
    $ sudo apt-get install oracle-java8-installer
    $ sudo apt-get install oracle-java8-set-default
    
    因为是java跨平台的,Windows下和linux下solr是同一个压缩包,windows下jdk的安装这里不再说明。
    
    进入解压缩后的solr文件夹的bin目录,solr.cmd和solr分别是windows和linux下的启动脚本:
    
    因为社工库是海量大数据,而jvm默认只使用512m的内存,这远远不够,所以我们需要修改,打开solr.in.sh文件,找到这一行:
    
    SOLR_HEAP=”512m”
    
    依据你的数据量,把它修改成更高,我这里改成4G,改完保存. 在windows下略有不同,需要修改solr.in.cmd文件中的这一行:
    
    set SOLR_JAVA_MEM=-Xms512m -Xmx512m
    
    同样把两个512m都修改成4G。
    
    Solr的启动,重启和停止命令分别是:
    $ ./solr start
    $ ./solr restart –p 8983
    $ ./solr stop –all
    
    在linux下还可以通过install_solr_service.sh脚本把solr安装为服务,开机后台自动运行。
    
    Solr安装完成,现在我们需要从mysql导入数据,导入前,我们需要先创建一个core,core是solr的特有概念,每个core是一个查询、数据,、索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:
    
    在solr-5.5.0/server/solr子目录下面建立一个新文件夹,命名为solr_mysql,这个是core的名称,在下面创建两个子目录conf和data,把solr-5.5.0/solr-5.5.0/example/example-DIH/solr/db/conf下面的所有文件全部拷贝到我们创建的conf目录中.接下来的配置主要涉及到三个文件, solrconfig.xml, schema.xml和db-data-config.xml。
    
    首先打开db-data-config.xml,修改为以下内容:
    
    这个文件是负责配置导入数据源的,请按照mysql实际的设置修改datasource的内容,下面entity的内容必须严格按照mysql中社工库表的结构填写,列名要和数据库中的完全一样。
    
    然后打开solrconfig.xml,先找到这一段:
    
    true
    managed-schema
    
    把它全部注释掉,加上一行,改成这样:
    
    
    这是因为solr5 以上默认使用managed-schema管理schema,需要更改为可以手动修改。
    
    然后我们还需要关闭suggest,它提供搜索智能提示,在社工库中我们用不到这样的功能,重要的是,suggest会严重的拖慢solr的启动速度,在十几亿数据的情况下,开启suggest可能会导致solr启动加载core长达几个小时!
    
    同样在solrconfig.xml中,找到这一段:
    
    mySuggester
    FuzzyLookupFactory 
    DocumentDictionaryFactory  
    cat
    price
    string
    
    true
    10
    
    suggest
    
    把这些全部删除,然后保存solrconfig.xml文件。
    
    接下来把managed-schema拷贝一份,重命名为schema.xml (原文件不要删除),打开并找到以下位置:
    
    只保留_version_和_root_节点,然后把所有的field,dynamicField和copyField全部删除,添加以下的部分:
    
    id
    
    这里的uniqueKey是配置文件中原有的,用来指定索引字段,必须保留。新建了一个字段名为keyword,它的用途是联合查询,即当需要同时以多个字段做关键字查询时,可以用这一个字段名代替,增加查询效率,下面的copyField即用来指定复制哪些字段到keyword。注意keyword这样的字段,后面的multiValued属性必须为true。
    
    username和email以及keyword这三个字段,用来检索查询关键字,它们的类型我们指定为text_ik,这是一个我们创造的类型,因为solr虽然内置中文分词,但效果并不好,我们需要添加IKAnalyzer中文分词引擎来查询中文。在下载IKAnalyzer for solr5的源码包,然后使用Maven编译,得到一个文件IKAnalyzer-5.0.jar,把它放入solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目录中,然后在solrconfig.xml的fieldType部分加入以下内容:
    
    保存后,core的配置就算完成了,不过要导入mysql数据,我们还需要在mysql网站上下载mysql-connector-java-bin.jar库文件,连同solr-5.5.0/dist目录下面的solr-dataimporthandler-5.5.0.jar,solr-dataimporthandler-extras-5.5.0.jar两个文件,全部拷贝到solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目录中,然后重启solr,就可以开始数据导入工作了。

    版权信息:本站所有资源仅供学习与参考,请勿用于商业用途,如有侵犯您的版权,请及时联系客服,我们将尽快处理。

    上一篇: 现在怎么注册不了淘宝网了 我想在上面买些东西上面显示此网页以被删除???

    下一篇: linux 找不到jdk

    用户评论 (0)

    暂无评论

    嘿,我来帮您!