安装

OSMC 的前身是 Raspbmc
有关 Raspbmc 、OpenELECXBian 的多方面对比可参看此文

下载镜像

我使用的 Raspberry Pi Model B (下简称 RPi ),请根据手中设备选择镜像并调整相关步骤。

OSMC 官网 下载适配 Raspberry Pi 1 (ARM11 平台) 的 DiskImage 文件。

将镜像写入 SD 卡

官方建议尽量使用 Class 10 的 SD 卡。

确认 SD 卡的分区名:

$ df -h
Filesystem      Size   Used  Avail Capacity  iused  ifree %iused  Mounted on
/dev/disk1     111Gi  108Gi  2.9Gi    98% 28397796 760858   97%   /
devfs          186Ki  186Ki    0Bi   100%      644      0  100%   /dev
map -hosts       0Bi    0Bi    0Bi   100%        0      0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%        0      0  100%   /home
/dev/disk2s1    69Mi   37Mi   32Mi    55%        0      0  100%   /Volumes/UNTITLED

<!--more-->假设 SD 卡分区名是 disk2s1
取消挂载该分区:

$ sudo diskutil unmount /dev/disk2s1
Volume UNTITLED on disk2s1 unmounted

将之前下载的 img 写入该分区:

注意替换为镜像文件的正确路径,假设文件名为 OSMC_TGT_rbp1_20150412.img

$ sudo dd bs=1m if=/Path/to/the/OSMC_TGT_rbp1_20150412.img of=/dev/rdisk2
256+0 records in
256+0 records out
268435456 bytes transferred in 18.087894 secs (14840614 bytes/sec)

弹出 SD 卡:

$ sudo diskutil eject /dev/rdisk2
Disk /dev/rdisk2 ejected

启动

将 SD 卡插入 RPi 并插入网线后通电,
系统将自行安装并启动。

遥控方法非常多:

  • 推荐通过支持 HDMI CEC 的设备遥控器进行配置;
  • 可使用 Kodi Remote 通过网络遥控;
  • 亦可通过网页进行遥控。

配置

OSMC 基于 Debian 二次开发,基本配置不多赘述。

Hostname

$ sudo hostname Watsberry
$ sudo vi /etc/hosts
::1             Watsberry localhost6.localdomain6 localhost6
127.0.1.1       Watsberry
...
$ sudo vi /etc/hostname
Watsberry
$ hostname
$ hostname -f

更新源

备份后编辑源列表:

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
$ sudo vi /etc/apt/sources.list

修改内容为:

deb http://mirrordirector.raspbian.org/raspbian jessie main contrib non-free rpi
deb http://apt.osmc.tv jessie main
deb http://archive.raspbian.org/raspbian jessie main contrib non-free rpi
deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free rpi

再修改配置:

$ sudo vi /etc/apt/preferences

内容为:

Package: *
Pin: release n=wheezy
Pin-Priority: 900
Package: *
Pin: release n=jessie
Pin-Priority: 300
Package: *
Pin: release o=Raspbian
Pin-Priority: -10

现在可以更新:

sudo apt-get update -y
sudo apt-get upgrade -y

SSH

官方说明 ,可知默认用户名密码均为 osmc

首次登录

假设设备当前 IP 是 192.168.1.xxx ,请根据网段情况自行调整。

尝试登录:

$ ssh osmc@192.168.1.xxx

首次登录会自动设置 localeen_US.UTF-8
然后更改密码:

$ passwd

设置密钥登录

远程新建个人 .ssh 目录:

$ mkdir .ssh
$ chmod 700 ~/.ssh

本地通过 scp 上传公钥:

$ scp -P 22 ~/.ssh/id_rsa.pub osmc@192.168.1.xxx:~/.ssh/id_rsa_localbox.pub

远程对其进行授权:

$ cd ~/.ssh
$ cat id_rsa_localbox.pub >> authorized_keys
$ rm id_rsa_localbox.pub
$ chmod 644 ~/.ssh/authorized_keys

大功告成。

新启 Session 尝试连接成功后再禁止密码登录。

NFS

服务端设置

假设 NAS 当前 IP 是 192.168.1.yyy
目标共享目录是 /volume1/videos

NAS 上新建用户 osmc
并设置好相关目录的访问权限。

接着在配置文件 /etc/exports 中增加一行:

/volume1/videos    192.168.1.0/24(rw,async,no_wdelay,insecure,root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)

anonuidanongid 需设置成 NAS 系统 nobody 用户的 UIDGID ,更多选项请参考鸟哥的教程

尝试使配置立即生效:

$ /usr/sbin/exportfs -arv

确认是否成功:

$ showmount -e 192.168.1.yyy
Exports list on 192.168.1.yyy:
/volume1/videos                      192.168.1.0/24

客户端设置

假设计划在 OSMC 上将视频目录挂载至 /mnt/videos

先设置文件夹权限:

$ sudo mkdir -p /mnt/videos
$ sudo chmod 755 /mnt/videos
$ sudo chown osmc:osmc /mnt/videos

再根据情况修改测速脚本 test_nfs.shvia

EXPORT="192.168.1.yyy:/volume1/videos"
MNTDIR="/mnt/videos"
TESTFILE="test.mov"

NFSPROTO="udp"
if [[ -n "$1" ]]; then
        NFSPROTO="tcp"
fi
echo "Testing transfer speed of $NFSPROTO on file $EXPORT/$TESTFILE"
echo
for rsize in 8192 16384 32768 65536 131072 262144
do
        if mount | grep $MNTDIR > /dev/null; then
                  sudo umount $MNTDIR
        fi
        sudo mount -t nfs -o rsize=$rsize,$NFSPROTO,cto,noatime,intr,nfsvers=3 $EXPORT $MNTDIR
        mntedrsize=$(cat /proc/mounts | grep $MNTDIR | grep -oE "rsize=[0-9]{4,6}" | grep -oE "[0-9]{4,6}")
        echo $MNTDIR mounted @ rsize \($((mntedrsize/1024))K\), requested rsize \($((rsize/1024))K\)
        sudo dd if=$MNTDIR/$TESTFILE of=/dev/null | grep "copied"
        echo
done
sudo umount $MNTDIR

分别以 udptcp 协议进行测试:

$ ./test_nfs.sh
...
$ ./test_nfs.sh tcp
...

从执行结果中选出最优组合。

假设 udprsize=65536 的组合速度最优。

修改 /etc/fstab 以求启动时挂载,
加上如下一行:

192.168.1.yyy:/volume1/videos /mnt/videos nfs defaults,rsize=65536,udp,cto,noexec,nosuid,nodev,noauto,noatime,intr,x-systemd.automount,nfsvers=3 0 0

请务必加上 nfsvers=3 ,因为 Raspbmc v13.1 五月第二次更新之后默认使用 NFSv4 版本协议进行挂载。

强制重新挂载:

sudo mount -av

无线网络

我使用 TPLink TL-WN725N v2 网卡,其型号为 rtl8188eu

安装驱动

以下两种方式可任选一种。

下载安装

首先查看当前的系统内核版本:

$ uname -a
Linux raspbmc 3.12.21 #2 PREEMPT Wed Jun 11 04:53:06 UTC 2014 armv6l GNU/Linux

得知内核版本为 3.12.21
可以直接下载对应的网卡驱动,
查表可得文件名为 8188eu-20140509.tar.gz
开始安装驱动:

$ wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20140509.tar.gz
$ tar -zxvf 8188eu-20140509.tar.gz
$ sudo install -p -m 644 8188eu.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
$ sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/wireless/8188eu.ko
$ sudo depmod -a

编译安装

Repository for stand-alone RTL8188EU driver 下载源文件,
上传并解压,
并将 firmware 移至相应目录:

内核高于 3.10.33+ 则可略过。

$ sudo mv rtl8188eufw.bin /lib/firmware/rtlwifi/
$ sudo chown root:root /lib/firmware/rtlwifi/rtl8188eufw.bin

然后进入源码目录开始编译:

$ make all
$ sudo make install

编译过程亦可参考这里

连接无线网络

首先确认无线网卡已安装完毕:

$ lsusb | grep Realtek
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

确认模块已加载:

$ lsmod | grep 8192
8192cu                458968  0 

安装无线连接的必备包:

$ sudo apt-get install wireless-tools wpasupplicant firmware-realtek 

确认无线配置信息:

$ iwconfig
wlan0     unassociated  Nickname:"<WIFI@REALTEK>"

搜索附近的 Wifi

$ iwlist wlan0 scan

连接至某个 SSID

假设 SSID 是 QuChao.com ,密码是 XXXXXXXXXX

$ wpa_passphrase QuChao.com XXXXXXXXXX
network={
    ssid="QuChao.com"
    #psk="XXXXXXXXXX"
    psk=XXXXXXXXXX0b07e09c22ad51dXXXXXXXXXXd3e343f57d437feecXXXXXXXXXX37
}

将回显内容写入 /etc/wpa_supplicant/wpa_supplicant.conf

network={
    ssid="QuChao.com"
    scan_ssid=1
    proto=WPA2
    key_mgmt=WPA-PSK
    pairwise=CCMP TKIP
    group=CCMP TKIP
    #psk="XXXXXXXXXX"
    psk=XXXXXXXXXX0b07e09c22ad51dXXXXXXXXXXd3e343f57d437feecXXXXXXXXXX37
}

然后配置 /etc/network/interfaces
填入以下内容进行自动连接:

auto lo
iface lo inet loopback

iface eth0 inet dhcp

auto wlan1
allow-hotplug wlan1
iface wlan1 inet dhcp
pre-up wpa_supplicant -B w -D wext -i wlan1 -c /etc/wpa_supplicant/wpa_supplicant.conf
post-down killall -q wpa_supplicant

iface default inet dhcp













- 阅读剩余部分 -

GnuPG

安装

安装 GnuPG过程不多赘述,
根据 Enigmail 的建议请安装 GnuPG2

$ brew install gnupg2 --with-readline

readline 将用于 --edit-keys

配置

GnuPG2 的 formula 默认会安装 pinentry
如果只是命令行下使用就够了。
可测试执行:

echo "test" | gpg2 -ase -v | gpg2 -v

若(有设置却)没有提示输入 Passphrase
则可能没有设置 GPG_TTY 环境变量,
请在 .bashrs.zshrc 中增加:

GPG_TTY=$(tty)
export GPG_TTY

若是 oh-my-zsh 用户,建议直接加载 gpg-agent 插件

整合

Enigmail

EnigmailThunderbird 的一款插件,<!--more-->
要正常使用它,
就需要安装支持 GUI 的 Pinentry
Homebrew 默认安装的不是,
因此执行

brew install pinentry-mac

随后修改 ~/.gnupg/gpg-agent.conf 并增加

pinentry-program /usr/local/bin/pinentry-mac

Done!










- 阅读剩余部分 -

前儿给家里弄了台 RB850Gx2 替换 E4200 作主路由器,
首次玩 RouterOS(下称 ROS),
在这里记录一些常用设置以备忘。
(不过近两年许多笔记已改用 Markdown 编写后丢 Google Drive 保存了,
要是能自动同步到 Blog 就太方便了)

一开始我以为 ROS 里的端口转发很简单,
根据网文增加规则之后发现只能从外网通过 DDNS 域名访问(内网不行),
于是回头根据官方教程修改 NAT 回环设置,
折腾好一会儿才据此帖找到了窍门,
提示一点:注意规则顺序

以下是示例,即:
假设内网网段是 192.168.0.0/16 ,
Master Port 是 Ehter1-local-master
将端口 1234 端口转发至内网 192.168.1.x:4321 ,
无需如一些网文所言必须增加定时任务来更新公网 IP 。

/ip firewall nat> print

Flags: X - disabled, I - invalid, D - dynamic 
 0    ;;; NAT - WAN
      chain=srcnat action=masquerade src-address=192.168.0.0/16 out-interface=PPPoE log=no

 1    ;;; NAT - Loopback
      chain=srcnat action=masquerade src-address=192.168.0.0/16 dst-address=192.168.0.0/16 out-interface=Ehter1-local-master log=no

 2    ;;; Port Forwarding
      chain=dstnat action=dst-nat to-addresses=192.168.1.x to-ports=4321 protocol=tcp dst-port=1234 log=no

2014.11.15 更新

不愧是上市公司,动作就是快


2014.11.06 更新

木马已由 PANWClaud Xiao 确认并命名为 WireLurker (aka MacHook),
大家现在可下载其推出的排查脚本来源)来检查系统了。
然而清除工作目前仍需要手工完成,可参看文末。


2014.11.05 更新

网友 littledew 已找到了木马作者嫌疑人,
群众与他正在 V2EX 论战中(已被删帖,点此查看备份);
后续情况详情见 Livid 的声明(请关注声明中提到的某个域名)。


2014.06.01 发布

最近我所有未越狱的 iOS 设备都出现了一个怪现象:
与 Mac 同步之后会莫名出现若干企业应用。
第一次是 5 月 21 日出现的“PP助手正版”(下图),
接着一周后出现了“乱世之刃2”。

PP助手正版

第二次出现奇怪的应用之时引起了我的注意。(头一次被我手快直接删除了)
首先在“描述文件”中皆出现了开发商证书(下图);
其次首次启动该应用会弹出确认。

PP助手正版证书

于是我决定花一点时间研究一下其源头。<!--more-->
起初考虑了很多方向,均被证明“不可能”,这里不再冗述。
后来受这篇文章的启发,
我决定从系统内多处 LaunchAgentsLaunchDaemons 目录排查起。

由于我记得 App 被安装的确切时间,
所以根据文件修改时间排序,
/Library/LaunchDaemons/ 下找到如下若干符合目标时间区间的配置文件:

  • /Library/LaunchDaemons/com.apple.globalupdate.plist
  • /Library/LaunchDaemons/com.apple.itunesupdate.plist
  • /Library/LaunchDaemons/com.apple.machook_damon.plist
  • /Library/LaunchDaemons/com.apple.watchproc.plist

看 Vendor 还以为是系统自带的吧?(这也侧面揭示了其恶意目的)

顺着上面的配置文件找到了如下可执行文件或目录:

  • /usr/bin/globalupdate
  • /usr/bin/itunesupdate
  • /usr/local/machook/
  • /usr/bin/WatchProc

其中 /usr/local/machook/ 是一个包含其主要程序的目录,
由于我并不知道这套恶意程序叫什么名字,
所以下面咱们姑且将它称为 MacHook

然后根据时间区间还找到一个可疑目录:

  • /usr/local/ipcc/

后来证明里面存放的就是被程序偷偷下载下来的 .ipa 文件(下图)。

PPAppInstall_qudaobao.app 包内容

另外,
在刚才找到的 /usr/local/machook/ 目录下,
我们找到了一个名为 foundation 的 Sqlite DB 文件(下图)。

machook 目录内容

用工具打开后你会看到四张表,
分别用于存放——

  • .ipa 文件下载地址(下图);
  • 安装过上述应用的设备 UDID 及安装时间;
  • 这套恶意程序的执行文件及其版本;
  • 设备 UDID ;

machook 目录内容

所以它们记录 UDID 是想做什么呢?
Interesting.

当然大家可能更好奇的是:
这些程序是如何被安装到我的电脑的呢?

排查工作更是费尽周折——
由于我知道恶意程序需要通过守护进程来工作,
而将 Plist 文件写入 LaunchDaemons 目录又是需要管理员权限的,
所以我那几天特别留意了一下异常的授权请求,
终于被我发现在启动某应用时会要求授权。
(由于它是个与开发相关应用,所以头一次询问我并未在意)

经回忆发现这个宿主应用下载自“麦芽地”,
解开这个被恶意修改过的宿主应用,
在其 Resource 目录下发现如下两个“可疑文件”,
(后确认原版应用中没有)

  • /Resource/FontMap1.cfg
  • /Resource/start.sh

其中 FontMap1.cfg 是个压缩包,
解压后你会发现就是初始状态的 /usr/local/machook/ 目录(下图)!
start.sh 则显而易见是用来部署恶意程序并清除安装文件的。

machook 目录内容

至此我们大致了解了整个排查过程。
目前我只知道恶意程序可能是通过 Xcode 的命令行工具实现静默安装应用的,(设备需开启开发模式)

2017-01-01 更新——
有位网名雪山飛狐的朋友询问应用安装的细节。
实际上它应该是通过 USB 使用 itms-services 协议直接将企业签名的应用安装到设备的,
并未使用什么高深技术。
我之前的描述有误,特此更新。也谢谢这位朋友。

希望有逆向实力的朋友帮忙看看其中还有什么猫腻。

点此下载恶意程序压缩档。

P.S.
目前还不知道这个恶意程序是哪一方建立的。
但包含恶意程序的宿主应用下载自“麦芽地”,
(据我在微博上联系到另外两例用户得知:
出现问题的宿主应用全都从“麦芽地”下载而来)
但首个被“推送”下来的应用是“PP助手正版”;
所以具体是哪一方建立了这个通道,
还请大家自行判断。


如下是我写的卸载脚本 machook_removal.sh点此下载),
“卸载”后会把文件全部备份到 ~/ppappinstaller/ 供你继续研究。
有一点需要提醒的是——
如果你不找出包含恶意程序的宿主应用,
那么有可能清除后它还会回来!
判断宿主文件的方法是执行特定操作时(如启动)会询问管理员权限
假如遇到莫名索取权限被授权后恶意程序又“复原”了,
那它必是宿主文件无疑!
请从麦芽地下载的应用排查起!
也可以通过如下命令进行检查(但不一定适用于所有情况):

#!/bin/bash
mkdir -p ~/ppappinstaller/Library/LaunchDaemons ~/ppappinstaller/usr/bin ~/ppappinstaller/usr/local

sudo launchctl unload /Library/LaunchDaemons/com.apple.globalupdate.plist
sudo mv /Library/LaunchDaemons/com.apple.globalupdate.plist ~/ppappinstaller/Library/LaunchDaemons
sudo mv /usr/bin/globalupdate ~/ppappinstaller/usr/bin

sudo launchctl unload /Library/LaunchDaemons/com.apple.itunesupdate.plist
sudo mv /Library/LaunchDaemons/com.apple.itunesupdate.plist ~/ppappinstaller/Library/LaunchDaemons
sudo mv /usr/bin/itunesupdate ~/ppappinstaller/usr/bin

sudo launchctl unload /Library/LaunchDaemons/com.apple.machook_damon.plist
sudo mv /Library/LaunchDaemons/com.apple.machook_damon.plist ~/ppappinstaller/Library/LaunchDaemons
sudo mv /usr/local/machook ~/ppappinstaller/usr/local/machook

sudo launchctl unload /Library/LaunchDaemons/com.apple.watchproc.plist
sudo mv /Library/LaunchDaemons/com.apple.watchproc.plist ~/ppappinstaller/Library/LaunchDaemons
sudo mv /usr/bin/WatchProc ~/ppappinstaller/usr/bin

sudo mv /usr/local/ipcc ~/ppappinstaller/usr/local/ipcc

echo -e "Done!"




















































- 阅读剩余部分 -

2012.09.04 更新

Firefox 终于追随 Opera 和 Chrome 之后实现了 Click to Play 的功能,
启用方法是在 about:config 中将 plugins.click_to_play 设置为 true

前几天我在评论里回答 echo·falsita 朋友时说:

“原生的 Click to Play 还无法很好的管理白名单”

在这里我表示抱歉(见下图)。

The 'Click to Play' Feature in Firefox

看来本工具“阳寿已尽”,多少有点儿伤感……


- 阅读剩余部分 -