分类: Linux Development

  • Linux 技巧: Bash 测试和比较函数

    Linux 技巧: Bash 测试和比较函数

    test、[、[[、((、和 if-then-else 解密

    您是否为 Bash shell 中大量的测试和比较选项而困惑呢?这个技巧可以帮助您解密不同类型的文件、算术和字符串测试,这样您就能够知道什么时候使用 test[ ][[ ]](( ))if-then-else 了。

    Ian Shields, 高级程序员, IBM

    2007 年 3 月 16 日

    • +内容

    Bash shell 在当今的许多 Linux® 和 UNIX® 系统上都可使用,是 Linux 上常见的默认 shell。Bash 包含强大的编程功能,其中包括丰富的可测试文件类型和属性的函数,以及在多数编程语言中可以使用的算术和字符串比较函数。理解不同的测试并认识到 shell 还能把一些操作符解释成 shell 元字符,是成为高级 shell 用户的重要一步。这篇文章摘自 developerWorks 教程 LPI 102 考试准备,主题 109: Shell、脚本、编程和编译,介绍了如何理解和使用 Bash shell 的测试和比较操作。

    这 个技巧解释了 shell 测试和比较函数,演示了如何向 shell 添加编程功能。您可能已经看到过使用 && 和 || 操作符的简单 shell 逻辑,它允许您根据前一条命令的退出状态(正确退出或伴随错误退出)而执行后一条命令。在这个技巧中,将看到如何把这些基本的技术扩展成更复杂的 shell 编程。

    测试

    在任何一种编程语言中,学习了如何给变量分配值和传递参数之后,都需要测试这些值和参数。在 shell 中,测试会设置返回的状态,这与其他命令执行的功能相同。实际上,test 是个内置命令

    test 和 [

    内置命令 test 根据表达式expr 求值的结果返回 0(真)或 1(假)。也可以使用方括号:test expr 和 [ expr ] 是等价的。 可以用 $? 检查返回值;可以使用 && 和 || 操作返回值;也可以用本技巧后面介绍的各种条件结构测试返回值。

    清单 1. 一些简单测试
    [ian@pinguino ~]$ test 3 -gt 4 && echo True || echo false
    false
    [ian@pinguino ~]$ [ "abc" != "def" ];echo $?
    0
    [ian@pinguino ~]$ test -d "$HOME" ;echo $?
    0

    在清单 1 的第一个示例中,-gt 操作符对两个字符值之间执行算术比较。在第二个示例中,用 [ ] 的形式比较两个字符串不相等。在最后一个示例中,测试 HOME 变量的值,用单目操作符 -d 检查它是不是目录。

    可以用 -eq、 –ne-lt、 –le、 –gt 或 –ge 比较算术值,它们分别表示等于、不等于、小于、小于等于、大于、大于等于。

    可以分别用操作符 =!=<> 比较字符串是否相等、不相等或者第一个字符串的排序在第二个字符串的前面或后面。单目操作符 -z 测试 null 字符串,如果字符串非空 -n 返回 True(或者根本没有操作符)。

    说明:shell 也用 <> 操作符进行重定向,所以必须用 \<\> 加以转义。清单 2 显示了字符串测试的更多示例。检查它们是否如您预期的一样。

    清单 2. 一些字符串测试
    [ian@pinguino ~]$ test "abc" = "def" ;echo $?
    1
    [ian@pinguino ~]$ [ "abc" != "def" ];echo $?
    0
    [ian@pinguino ~]$ [ "abc" \< "def" ];echo $?
    0
    [ian@pinguino ~]$ [ "abc" \> "def" ];echo $?
    1
    [ian@pinguino ~]$ [ "abc" \<"abc" ];echo $?
    1
    [ian@pinguino ~]$ [ "abc" \> "abc" ];echo $?
    1

    表 1 显示了一些更常见的文件测试。如果被测试的文件存在,而且有指定的特征,则结果为 True。

    表 1. 一些常见的文件测试
    操作符 特征
    -d 目录
    -e 存在(也可以用 -a)
    -f 普通文件
    -h 符号连接(也可以用 -L)
    -p 命名管道
    -r 可读
    -s 非空
    -S 套接字
    -w 可写
    -N 从上次读取之后已经做过修改

    除了上面的单目测试,还可以使用表 2 所示的双目操作符比较两个文件:

    表 2. 测试一对文件
    操作符 为 True 的情况
    -nt 测试 file1 是否比 file2 更新。修改日期将用于这次和下次比较。
    -ot 测试 file1 是否比 file2 旧。
    -ef 测试 file1 是不是 file2 的硬链接。

    其他一些测试可以用来测试文件许可之类的内容。请参阅 bash 手册获得更多细节或使用 help test 查看内置测试的简要信息。也可以用 help 命令了解其他内置命令。

    -o 操作符允许测试利用 set -o 选项 设置的各种 shell 选项,如果设置了该选项,则返回 True (0),否则返回 False (1),如清单 3 所示。

    清单 3. 测试 shell 选项
    [ian@pinguino ~]$ set +o nounset
    [ian@pinguino ~]$ [ -o nounset ];echo $?
    1
    [ian@pinguino ~]$ set -u
    [ian@pinguino ~]$ test  -o nounset; echo $?
    0

    最后,-a-o 选项允许使用逻辑运算符 AND 和 OR 将表达式组合在一起。单目操作符 ! 可以使测试的意义相反。可以用括号把表达式分组,覆盖默认的优先级。请记住 shell 通常要在子 shell 中运行括号中的表达式,所以需要用 \( 和 \) 转义括号,或者把这些操作符括在单引号或双引号内。清单 4 演示了摩根法则在表达式上的应用。

    清单 4. 组合和分组测试
    [ian@pinguino ~]$ test "a" != "$HOME" -a 3 -ge 4 ; echo $?
    1
    [ian@pinguino ~]$ [ ! \( "a" = "$HOME" -o 3 -lt 4 \) ]; echo $?
    1
    [ian@pinguino ~]$ [ ! \( "a" = "$HOME" -o '(' 3 -lt 4 ')' ")" ]; echo $?
    1

    (( 和 [[

    test 命令非常强大,但是很难满足其转义需求以及字符串和算术比较之间的区别。幸运的是,bash 提供了其他两种测试方式,这两种方式对熟悉 C、C++ 或 Java® 语法的人来说会更自然些。

    (( ))复合命令 计算算术表达式,如果表达式求值为 0,则设置退出状态为 1;如果求值为非 0 值,则设置为 0。不需要对 (()) 之间的操作符转义。算术只对整数进行。除 0 会产生错误,但不会产生溢出。可以执行 C 语言中常见的算术、逻辑和位操作。 let 命令也能执行一个或多个算术表达式。它通常用来为算术变量分配值。

    清单 5. 分配和测试算术表达式
    [ian@pinguino ~]$ let x=2 y=2**3 z=y*3;echo $? $x $y $z
    0 2 8 24
    [ian@pinguino ~]$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w
    0 3 8 16
    [ian@pinguino ~]$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w
    0 4 8 13

    同使用 (( )) 一样,利用复合命令 [[ ]] 可以对文件名和字符串使用更自然的语法。可以用括号和逻辑操作符把 test 命令支持的测试组合起来。

    清单 6. 使用 [[ 复合命令
    [ian@pinguino ~]$ [[ ( -d "$HOME" ) && ( -w "$HOME" ) ]] &&  
    >  echo "home is a writable directory"
    home is a writable directory

    在使用 =!= 操作符时,复合命令 [[ 还能在字符串上进行模式匹配。匹配的方式就像清单 7 所示的通配符匹配。

    清单 7. 用 [[ 进行通配符测试
    [ian@pinguino ~]$ [[ "abc def .d,x--" == a[abc]*\ ?d* ]]; echo $?
    0
    [ian@pinguino ~]$ [[ "abc def c" == a[abc]*\ ?d* ]]; echo $?
    1
    [ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* ]]; echo $?
    1

    甚至还可以在 [[ 复合命令内执行算术测试,但是千万要小心。除非在 (( 复合命令内,否则 <> 操作符会把操作数当成字符串比较并在当前排序序列中测试它们的顺序。清单 8 用一些示例演示了这一点。

    清单 8. 用 [[ 包含算术测试
    [ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || (( 3 > 2 )) ]]; echo $?
    0
    [ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || 3 -gt 2 ]]; echo $?
    0
    [ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || 3 > 2 ]]; echo $?
    0
    [ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || a > 2 ]]; echo $?
    0
    [ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* || a -gt 2 ]]; echo $?
    -bash: a: unbound variable

    条件测试

    虽然使用以上的测试和 &&|| 控制操作符能实现许多编程,但 bash 还包含了更熟悉的 “if, then, else” 和 case 结构。学习完这些之后,将学习循环结构,这样您的工具箱将真正得到扩展。

    If、then、else 语句

    bash 的 if 命令是个复合命令,它测试一个测试或命令($?)的返回值,并根据返回值为 True(0)或 False(不为 0)进行分支。虽然上面的测试只返回 0 或 1 值,但命令可能返回其他值。请参阅 LPI 102 考试准备,主题 109: Shell、脚本、编程和编译 教程学习这方面的更多内容。

    Bash 中的 if 命令有一个 then 子句,子句中包含测试或命令返回 0 时要执行的命令列表,可以有一个或多个可选的 elif 子句,每个子句可执行附加的测试和一个 then 子句,子句中又带有相关的命令列表,最后是可选的 else 子句及命令列表,在前面的测试或 elif 子句中的所有测试都不为真的时候执行,最后使用 fi 标记表示该结构结束。

    使用迄今为止学到的东西,现在能够构建简单的计算器来计算算术表达式,如清单 9 所示:

    清单 9. 用 if、then、else 计算表达式
    [ian@pinguino ~]$ function mycalc ()
    > {
    >   local x
    >   if [ $# -lt 1 ]; then
    >     echo "This function evaluates arithmetic for you if you give it some"
    >   elif (( $* )); then
    >     let x="$*"
    >     echo "$* = $x"
    >   else
    >     echo "$* = 0 or is not an arithmetic expression"
    >   fi
    > }
    [ian@pinguino ~]$ mycalc 3 + 4
    3 + 4 = 7
    [ian@pinguino ~]$ mycalc 3 + 4**3
    3 + 4**3 = 67
    [ian@pinguino ~]$ mycalc 3 + (4**3 /2)
    -bash: syntax error near unexpected token `('
    [ian@pinguino ~]$ mycalc 3 + "(4**3 /2)"
    3 + (4**3 /2) = 35
    [ian@pinguino ~]$ mycalc xyz
    xyz = 0 or is not an arithmetic expression
    [ian@pinguino ~]$ mycalc xyz + 3 + "(4**3 /2)" + abc
    xyz + 3 + (4**3 /2) + abc = 35

    这个计算器利用 local 语句将 x 声明为局部变量,只能在 mycalc 函数的范围内使用。let 函数具有几个可用的选项,可以执行与它密切关联的 declare 函数。请参考 bash 手册或使用 help let 获得更多信息。

    如清单 9 所示,需要确保在表达式使用 shell 元字符 —— 例如(、)、*、> 和 < 时 —— 正确地对表达式转义。无论如何,现在有了一个非常方便的小计算器,可以像 shell 那样进行算术计算。

    在清单 9 中可能注意到 else 子句和最后的两个示例。可以看到,把 xyz 传递给 mycalc 并没有错误,但计算结果为 0。这个函数还不够灵巧,不能区分最后使用的示例中的字符值,所以不能警告用户。可以使用字符串模式匹配测试(例如
    [[ ! ("$*" == *[a-zA-Z]* ]]
    ,或使用适合自己范围的形式)消除包含字母表字符的表达式,但是这会妨碍在输入中使用 16 进制标记,因为使用 16 进制标记时可能要用 0x0f 表示 15。实际上,shell 允许的基数最高为 64(使用 base#value 标记),所以可以在输入中加入 _ 和 @ 合法地使用任何字母表字符。8 进制和 16 进制使用常用的标记方式,开头为 0 表示八进制,开头为 0x 或 0X 表示 16 进制。清单 10 显示了一些示例。

    清单 10. 用不同的基数进行计算
    [ian@pinguino ~]$ mycalc 015
    015 = 13
    [ian@pinguino ~]$ mycalc 0xff
    0xff = 255
    [ian@pinguino ~]$ mycalc 29#37
    29#37 = 94
    [ian@pinguino ~]$ mycalc 64#1az
    64#1az = 4771
    [ian@pinguino ~]$ mycalc 64#1azA
    64#1azA = 305380
    [ian@pinguino ~]$ mycalc 64#1azA_@
    64#1azA_@ = 1250840574
    [ian@pinguino ~]$ mycalc 64#1az*64**3 + 64#A_@
    64#1az*64**3 + 64#A_@ = 1250840574

    对输入进行的额外处理超出了本技巧的范围,所以请小心使用这个计算器。

    elif 语句非常方便。它允许简化缩进,从而有助于脚本编写。在清单 11 中可能会对 type 命令在 mycalc 函数中的输出感到惊讶。

    清单 11. Type mycalc
    [ian@pinguino ~]$ type mycalc
    mycalc is a function
    mycalc ()
    {
        local x;
        if [ $# -lt 1 ]; then
            echo "This function evaluates arithmetic for you if you give it some";
        else
            if (( $* )); then
                let x="$*";
                echo "$* = $x";
            else
                echo "$* = 0 or is not an arithmetic expression";
            fi;
        fi
    }

    当然,也可以只用 $(( 表达式 ))echo 命令进行 shell 算术运算,如清单 12 所示。这样就不必学习关于函数或测试的任何内容,但是请注意 shell 不会解释元字符,例如 *,因此元字符不能在 (( 表达式 ))[[ 表达式 ]] 中那样正常发挥作用。

    清单 12. 在 shell 中用 echo 和 $(( )) 直接进行计算
    [ian@pinguino ~]$  echo $((3 + (4**3 /2)))
    35

    结束语

  • Mindspeed: Comcerto®2000高性能通信处理器系列

    WDC MyCloud/3TB

    The control board uses a Mindspeed Comcerto 2000 (M86261G-12) CPU, which has two Cortex-A9 ARM cores, running at 650 MHz.

    • 處理器:Mindspeed Comcerto C2200 M86261 650MHz雙核心
    • 記憶體:256MB DDR3
    • 儲存容量:2TB、3TB、4TB
    • 連接埠:GbE RJ45 x1、USB 3.0 x1
    • 尺寸:170.60 x 139.30 x 49.0(mm)
    • 重量:0.96kg(2TB、3TB)、1kg(4TB)

    http://support.mindspeed.com/products/cpe-processors/comcertoreg-2000

     

    • 1.2GHz single or dual-core ARM Cortex-A9 processor with SMP and ARM Neon™ DSPs
    • Full ARM Cortex processor off load with OPAL: Open Packet Acceleration Logic, a combination of accelerators, such as Packet classification and forwarding for NAT, VPN/firewall applications, QoS processor, DPI engine, security processing accelerator for IPSec/SSL processing, TCP offload engine for NAS, VoIP media processing and a general purpose accelerator for running customer power & management control processing or proprietary protocol processing.
    • OPAL supports 2Gbps NAT, PPPoE and VPN at 64byte packet, with ARM cores fully offloaded
    • Extensive I/O support including support for RGMII, RMII and SGMII, USB 2.0 & 3.0, PCI Gen 2, SATA, DECT, SLIC / SLAC and TDM ports
    • XOR engine RAID acceleration
    • Support for DDR3 with ECC support
    • TrustZone and secure boot support
    • Carrier grade IPv6/IPv4 packet forwarding, NAT, firewall, QoS and IPSec/SSL stack support
    • NAS applications stack implementation utilizing on chip TOE storage processing accelerator
    • Carrier grade VoIP supporting up to 16 complex codecs, robust echo cancellation, fax and modem support; Integrated CAT-iq compliant DECT baseband controller. VoIP applications layer stack with SIP support
    • Full fledged Linux distribution with web-based GUI, Java and OSGI support
    • MLC NAND flash controller with ECC

    敏讯科技有限公司(Mindspeed Technologies, Inc.)已宣布:推出基于多核ARM® Cortex™-A CPU的Comcerto®2000系列通信处理器。通过将软件定义联网(SDN)带到网络的前沿,该处理器能够支撑新一代产品,可用于住宅、企业和中小 型企业的网络设备中的交换、路由、信息安全、多服务网关、企业级无线接入点和控制器、网络存储和互联网语音电话(VoIP)等应用。该系列处理器非常适合 用作控制处理器,或者用于混合控制和数据板应用。

    该系列的头两款器件为Comcerto C2100和C2200,他们分别采用单核和双核1.2GHz的 ARM Cortex-A9 MPCore™处理器,同时均带有对称多处理(SMP)及芯片上原生的二级缓存和ARM TrustZone®的安全技术。这两款器件包括Mindspeed®的OPAL™(开放包加速逻辑)引擎、一个线速率千兆高速可编程数据通道加速引擎、 一套完整的I / O和外设、并支持带ECC校验的DDR3内存。这带来了一个新的高性价比产品层面,它们能够支持新的协议和更高速度而功耗更低。现已可提供芯片、电信级软 件和Linux软件设计工具包(SDK)样品。

    除了高性能的、基于ARM IP的子系统,OPAL还是一个完全可编程的线速度网络加速器的集合,其中包括各种强力的引擎,用于IPv6数据包转发/网络地址转换(NAT)、防火墙 /虚拟专用网络(VPN)、IP安全协议(IPSec)/安全套接层( SSL)的安全处理、深度包检测(DPI)、服务质量(QoS)和存储网络处理。通过智能卸载,Comcerto C2000系列在不利用的ARM Cortex处理器的情况下,可支持线速千兆比特每秒的IPv6 NAT和防火墙应用,保证ARM处理器能够用于运行原始设备制造商(OEM)或服务提供商的增值应用。这种流程将允许客户去实现其服务的差异化和商业化。 例如,该系统在无线企业级双频、多射频802.11ac接入点应用中,可以卸载Wi-Fi和协议的数据包处理,同时ARM Cortex处理器可用于运行企业级服务,如政策,认证和漫游等。

    “Comcerto2000是Mindspeed一个全新的、基于多核ARM IP的高性能通讯处理器系列的首类产品,”Mindspeed用户端设备(CPE)事业部市场营销与产品管理执行总监Marco E. Bello解释道:“双核Comcerto1000处理器已经广泛地部署在世界各地的运营商级网络产品之中,我们在其验证过的成功的基础上进行的开发,将 为我们的客户提供改变行业的价格、功耗和性能。带有OPAL引擎的Comcerto2000处理器系列将软件定义联网功能带到了一个新的产品等级。”

    “ARM的可扩展多核技术使得网络通信应用中能源效率和性能达到了一个新的水平,” ARM有限公司执行副总裁兼处理器和物理知识产权部总经理Simon Segars表示:“Comcerto2000产品线建立在Mindspeed先前基于ARM处理器器件的成功之上,将为网络领域提供最新的、高性能多核 器件。”

    “Mindspeed已在为一些非常苛刻的运营商提供用于宽带客户端设备(CPE)的电信软件和系统级芯片(SoC)上建立极好的声誉。凭借 Comcerto2000和该系列中未来将面世的器件,Mindspeed正积极拓展到更主流的通信处理器市场,”市场调查公司Infonetics宽带 接入和视频研究的总监级分析师Jeff Heynen说:“软件定义联网是网络产业的一个至关重要的领域,而且现在是被放在网络的核心位置上;但Mindspeed以该系列处理器来实现对它的支 持,可将其部署范围扩大到各种各样的新应用。加上ARM对网络设备这一细分市场的重视,这对一些现有处理器供应商意味着一个重大的挑战。”

    Comcerto 2000可以被用作一款控制和管理处理器,或者被用作一个内置的控制和数据通道处理器。其网络加速器都可通过一个应用程序编程接口(API)实现完全可编 程和可配置,允许SDN的概念可被扩展到处于网络边缘的高容量通信应用。借助一套全面的网络安全功能,其中包括ARM TrustZone、安全引导、一次性可编程(OTP)、IPSec和SSL,新的处理器可以用在各种安全系统之中,包括安全网关或需要数字版权管理 (DRM)支持的应用程序,如基于IP的下一代机顶盒、用于交换、路由和VoIP功能的电信级软件解决方案、以及特定的垂直市场应用。这些新器件向下兼容 各种经运营商验证的、为Comcerto100和1000通讯处理器开发的各种软件,使制造商能够迅速开发出一系列针对不同的价格性能点的产品。

    主要功能和软件支持包括:

    • 带有SMP和ARM NeonTMDSPs的1.2GHz单核或双核ARM Cortex-A9处理器
    • 带有OPAL的完整ARM Cortex处理器卸载:开放包加速逻辑是一个加速器的组合,包括用于NAT的包分类识别和转发、VPN /防火墙应用、QoS处理器、DPI引擎、用于IPSec/ SSL处理的安全处理加速器、用于NAS的TCP卸载引擎、VoIP媒体处理和一个运行用户功率&管理控制处理或专用协议处理的通用加速器。
    • 因为ARM内核完全被卸载,OPAL支持2Gbps NAT、PPPoE和64位数据包的VPN
    • 宽泛的I/O支持,包括支持三种GEMAC(SGMII、GMII、RGMII)、USB2.0&3.0、PCI Gen 2、SATA、DECT、SLIC/SLAC和TDM端口
    • XOR引擎的RAID加速
    • 支持带ECC支持的DDR3型内存
    • 支持TrustZone和安全引导
    • 支持电信级的IPv6/IPv4数据包转发、NAT、防火墙、QoS和IPSec/SSL
    • NAS应用栈实现了对片上TOE存储处理加速器的利用
    • 电信级VoIP可支持多达16个复杂编解码器、强大的回音消除、传真和
    调制解调器;内置了与DECT基带控制器兼容的CAT-iq;带有SIP 支持的VoIP应用层协议栈。
    • 带有基于web GUI、Java和OSGI支持的完整成熟的Linux组合
    • 带有ECC校验的MLC NAND闪存

  • How to Remotely access the iLO4 of Home HP MicroServer Gen8 behind a corporation firewall

    By ssh local port forward, we can access the iLO4 and Remote console of Home from the corporation network which protected by firewall,  with only 80 and 433 ports opened via proxy.

     

    HOME

    HP Proliant MicroServer Gen8
    iLO4 Advance License installed
    iLO4  IP=HOME_ILO4_IP               ( Local IP of iLO4 port,   172.24.0.xxx )

    WAN Router
    WNR2000 V3
    DD-WRT build 24160,
    Remote ssh login enabled
    WAN IP=HOME_WAN_IP              ( 220.234.xxx.xxx, public IP )

     

    OFFICE

    Network:

    Only out going 89/443 allowed via HTTP Proxy:
    OFFICE_PROXY_IP : OFFICE_PROXY_PORT

    Linux workstation:
    Ubuntu 10.10
    Open JDK v7.0      Installed
    CorkScrew             Installed

     

    Windows workstation:

    Windows 7
    putty 0.63   Installed

    How to Accesss ILO4 and Remote Console

    by using SSH local port forward,  From Office Workstation to Home SSH Server (Router),  we can assess iLO4 and Remote Console in Office.

     

    Linux:

    #!/bin/sh

    # Http proxy of Corp
    HTTP_PROXY_HOST=OFFICE_PROXY_IP
    HTTP_PROXY_PORT=OFFICE_PROXY_PROXY

    #  Home ssh server
    SSH_HOST=HOME_WAN_IP
    SSH_PORT=443
    SSH_USER=xxxx

    #  Home ILO4 Host
    REMOTE_ILO_HOST=HOME_ILO4_IP
    REMOTE_ILO_PORT=”22 23 17990 80 443 17988 161 162 623″

    # Office Workstation  ILO4 IP
    BIND_ILO_HOST=127.0.0.1
    #BIND_ILO_HOST=192.168.127.8

    #Generate proxy config file

    ILO_SSH_PROXY_CONFIG=/tmp/ilo_ssh_config

    echo “Host ${DDWRT_SSH_HOST}” > ${ILO_SSH_PROXY_CONFIG}
    echo “ProxyCommand corkscrew ${HTTP_PROXY_HOST} ${HTTP_PROXY_PORT} %h %p” >> ${ILO_SSH_PROXY_CONFIG}
    echo “port ${DDWRT_SSH_PORT}” >> ${ILO_SSH_PROXY_CONFIG}

    echo “Host ${LINUX_SSH_HOST}” >> ${ILO_SSH_PROXY_CONFIG}
    echo “ProxyCommand corkscrew ${HTTP_PROXY_HOST} ${HTTP_PROXY_PORT} %h %p” >> ${ILO_SSH_PROXY_CONFIG}
    echo “port ${LINUX_SSH_PORT}” >> ${ILO_SSH_PROXY_CONFIG}

    ILO_OPT_LIST=””
    for p in ${REMOTE_ILO_PORT}; do
    ILO_OPT_LIST=”${ILO_OPT_LIST} -L ${BIND_ILO_HOST}:${p}:${REMOTE_ILO_HOST}:${p}”
    done

    # Stop local services already bind to the local ILO4 Ports
    sudo /etc/init.d/ssh stop
    sudo /etc/init.d/lighttpd stop

    # Setup SSH local forward link from Office to Home
    echo “sudo ssh -N -f -F ${ILO_SSH_PROXY_CONFIG} ${ILO_OPT_LIST} ${SSH_USER}@${SSH_HOST}”
    sudo ssh -N -f -F ${ILO_SSH_PROXY_CONFIG} ${ILO_OPT_LIST} ${SSH_USER}@${SSH_HOST}

    SSH_PID=`pgrep -f “${ILO_OPT_LIST}”`

    # Access the iLO4 via firefox browser
    firefox https://${BIND_ILO_HOST}/

    # Launch the Java remote console from iLO4

    # cleanup,  stop the ssh local forward
    sudo kill -9 ${SSH_PID}

     

    Windows 7:

    Config putty iLO4 session as following:

    Config  Connection/Proxy/HTTP proxy

    Config  Connection/SSH/Tunnels,  by add follow local port forwarding:

    (BIND_ILO_HOST -> HOME_ILO4_IP)

    22 23 17990 80 443 17988 161 162 623

    Launch firefox,  and   goto https:// BIND_ILO_HOST  => iLO4 Panel Access

    Launch  remote console/ .iNET.IRC from iLO4 panel

     

     Note:

    Note:

    If the PC support Intel AMT technology, you may meet the error 10013 when try to forward 623 port,
    because the port 623 have been taken by the LMS.exe service:

    Solution: Disable the LMS service

    Launch the terminal with admin permission, and run:

    sc stop “UNS”
    sc stop “LMS”
    Or disable it forever:

    sc config “UNS” start= disabled
    sc config “LMS” start= disabled

     

    *********************************************

    iLO 2 Advanced License Keys:
    35DPH-SVSXJ-HGBJN-C7N5R-2SS4W
    35SCR-RYLML-CBK7N-TD3B9-GGBW2

     

  • Build openjdk 7 on ubuntu 10.10

    sudo apt-get install git mercurial zip bzip2 unzip tar gawk
    sudo apt-get install ccache make gcc g++ ca-certificates ca-certificates-java
    sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev
    sudo apt-get install libasound2-dev libcups2-dev libfreetype6-dev
    sudo apt-get install build-essential ruby-dev pkg-config
    sudo apt-get install openjdk-6-jdk
    sudo apt-get install fpm

    mkdir /build/openjdk
    cd /build/openjdk
    git clone https://github.com/hgomez/obuildfactory.git

    XBUILD=true ./obuildfactory/openjdk7/linux/standalone-job.sh

    # List output file
    ls OBF_DROP_DIR/openjdk7/
    j2re-image-x86_64-u80-b05-20150127.tar.bz2
    j2sdk-image-x86_64-u80-b05-20150127.tar.bz2

     

    # Install to /opt/openjdk7
    sudo mkdir /opt/openjdk7
    cd /opt/openjdk7
    sudo tar xvfj /build/openjdk/OBF_DROP_DIR/openjdk7/j2sdk-image-x86_64-u80-b05-20150127.tar.bz2