2014年12月17日 星期三

[Linux - Ubuntu]小米 2S 突破 4GB APP 安裝空間限制




最近小米2s的APP 4GB 安裝空間有點不夠了... 因為它不能另外插 SD card,所以 link2SD 也不能用,只好用爆力法更動partition size.

主要注意是這幾個 partition
/system => 用來放系統 App ,這個不用動
/data => 用來放使用者 App ,這個要變大
/sdcard => 用來放Mp3,相片等等假裝成 sdcard 的 partition,這個要變小

因為儲存空間固定,所以就得切一些 /sdcard 空間給 /data
在 Ubuntu 下,大家應該有玩過 gparted 可以直接 resize,就像它的原理。

首先需要先裝含有 repartition 工具的 CM 出版 recovery
CWM for MIUI
http://forum.xda-developers.com/mi-2/development/2014-07-08-clockworkmod-recovery-6-0-5-0-t2878549
how to install by fastboot


http://wiki.cyanogenmod.org/w/Install_CM_for_aries

然後記得備份,我是用鈦備份備份 App,沒試過直接將 /data 整個 copy 下來,如果你成功了,再請分享哦 ;)
另外提醒,如果是用開發版的人,要記得備份 Google Play market 的apk ,我就是忘了備份,還要上網找半天 .....

接下來開進 CWM 後 adb 進手機,
因為我們要動到 /data 所以先 umount 它
$ umount /data
(網上說要 umount /cache 不知為何,我覺得只要 umount /data 就可以)

執行 repartition 工具
$ parted /dev/block/mmcblk0

設定單位
(parted) unit MB

列出目前 partition
(parted) print

16GB 的版本應該會像這樣:
Model: MMC SEM16G (sd/mmc)
Disk /dev/block/mmcblk0: 15.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 89.1MB 89.1MB fat16 modem
2 89.1MB 178MB 89.1MB fat16 modem1
3 178MB 179MB 524kB sbl1
4 179MB 179MB 524kB sbl2
5 179MB 180MB 1049kB sbl3
6 180MB 181MB 1049kB rpm
7 181MB 182MB 1049kB tz
8 182MB 183MB 524kB DDR
9 183MB 187MB 4194kB aboot
10 187MB 188MB 1049kB misc
11 188MB 191MB 2990kB logo
12 191MB 192MB 799kB m9kefs1
13 192MB 193MB 799kB m9kefs2
14 193MB 193MB 1024B m9kefsc
15 193MB 201MB 8501kB bk1
16 201MB 202MB 799kB m9kefs3
17 202MB 268MB 66.3MB bk2
18 268MB 284MB 15.7MB boot
19 284MB 300MB 15.7MB boot1
20 300MB 316MB 15.7MB recovery
21 316MB 327MB 11.5MB bk3
22 327MB 336MB 8389kB ext4 persist
23 336MB 872MB 537MB ext4 system
24 872MB 1409MB 537MB ext4 system1
25 1409MB 1812MB 403MB ext4 cache
26 1812MB 5570MB 3758MB ext4 userdata27 5570MB 15758MB 10188MB ext4 storage

接下來刪掉 26, 27 (注意: 刪掉就回不去了,請先作好備份)
(parted) rm 26
(parted) rm 27

因為 parted 只有 support ext2,所以我們要建 ext2 partition 等一下再轉換成 ext4。
command 格式為 mkpartfs primary ext2 {起始 MB} {結尾 MB}
因為我想多切 2GB 給 /data 所以,是1812MB ~ 5570MB
(parted) mkpartfs primary ext2 1812 5570

剩下的切給 /sdcard 5570MB ~ 15758MB
(parted) mkpartfs primary ext2 5570 15758

給 partition name ,這裡需要跟之前的 partition name 一樣。
(parted) name 26 userdata
(parted) name 27 storage

(parted) quit

然後網路教說是說要作下面動作將 partition 轉成 ext4:
$ tune2fs -j /dev/block/mmcblk0p26
$ e2fsck -fDp /dev/block/mmcblk0p26
$ tune2fs -O extents,uninit_bg,dir_index /dev/block/mmcblk0p26
$ e2fsck -fDp /dev/block/mmcblk0p26

$ tune2fs -j /dev/block/mmcblk0p27
$ e2fsck -fDp /dev/block/mmcblk0p27
$ tune2fs -O extents,uninit_bg,dir_index /dev/block/mmcblk0p27
$ e2fsck -fDp /dev/block/mmcblk0p27

但我覺得應該只要用 mke2fs 就好了,但我還是乖乖照作就是了....
有興趣的人可以試看看,我等有空再試看看好了~
$ mke2fs -T ext4 /dev/block/mmcblk0p26
$ e2fsck -fDp /dev/block/mmcblk0p26

$ mke2fs -T ext4 /dev/block/mmcblk0p27
$ e2fsck -fDp /dev/block/mmcblk0p27

接下來再看一次 partition table list 就會看到不同
$parted /dev/block/mmcblk0
(parted)unit MB

(parted) print
print
Model: MMC 016G92 (sd/mmc)
Disk /dev/block/mmcblk0: 15758MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
1 0.02MB 89.1MB 89.1MB fat16 modem
2 89.1MB 178MB 89.1MB fat16 modem1
3 178MB 179MB 0.52MB sbl1
4 179MB 179MB 0.52MB sbl2
5 179MB 180MB 1.05MB sbl3
6 180MB 181MB 1.05MB rpm
7 181MB 182MB 1.05MB tz
8 182MB 183MB 0.52MB DDR
9 183MB 187MB 4.19MB aboot
10 187MB 188MB 1.05MB misc
11 188MB 191MB 2.99MB logo
12 191MB 192MB 0.80MB m9kefs1
13 192MB 193MB 0.80MB m9kefs2
14 193MB 193MB 0.00MB m9kefsc
15 193MB 201MB 8.50MB bk1
16 201MB 202MB 0.80MB m9kefs3
17 202MB 268MB 66.3MB bk2
18 268MB 284MB 15.7MB boot
19 284MB 300MB 15.7MB boot1
20 300MB 316MB 15.7MB recovery
21 316MB 327MB 11.5MB bk3
22 327MB 336MB 8.39MB ext4 persist
23 336MB 872MB 537MB ext4 system
24 872MB 1409MB 537MB ext4 system1
25 1409MB 1812MB 403MB ext4 cache
26 1812MB 5570MB 3758MB ext4 userdata
27 5570MB 15758MB 10188MB ext4 storage

接下來重開機後,就可以看到 partition 不同,再用鈦備份把 App 備份回來就可以了。






Reference:

http://xiaomi.eu/community/threads/mi2s-extending-size-of-storage-partition.21391/

2014年12月5日 星期五

airdroid 3 - 我最期待的app


看到他 airmirror 的功能,可以把手機上的 app mirror 到 pc 上,這樣就不用慢慢等各家 app 放出pc client app 了,如此 .... 我也可以在 Ubuntu 上用 Line 了
http://help.airdroid.com/customer/portal/articles/1784666-airmirror

但是,可惜現在還不 support Linux .... WTF !!

密切注意這個 thread 吧....
http://forum.xda-developers.com/apps/airdroid/linux-client-t2962111


2014年10月12日 星期日

Linux 多重開機USB disk - multiple OS bootable usb disk


之前花了很多時間想要讓多個OS live CD 放在一個隨身碟裡,試過很多方法都一直有問題,利用這篇記錄一下試過的幾個方式。

這是我比較後來找到的方法,目前是唯一成功讓我在 USB 3.0 disk 上同時放 clonezilla 及 Ubuntu 的方法,但不知為何,只要經過USB 3.0 HUB, 就無法開進 USB disk. 還要再研究。
另外,這個方法作出的 disk 在我的 X240 上面試 clonezillia開機,畫面會亂掉,但在其他PC 不會。因此我幾考其他方法作出來的 clonezillia 開機碟設定,將其 grub.cfg 裡"video=uvesafb:mode_option=800x600-16" 改成"vga=788"後就可以了。



2. GRUB - manually edit
找不到最初看到的文章了,就是自已在 usb disk 上裝 grub2 再把 iso copy 過去,在 grub.cfg 中用 mount loop 的方式 load 進來,我當時遇到的問題是 mount iso 檔的時後,我要如何指到USB 碟? 
用前是用 "set root=(hd0,1)" 指到 usb disk。
這個方法作出來的 disk ,透過 usb hub ,還是可以開進去 clonzillia,所以可以拿來和第一种方法相比較。

後來找到這個有點像,有空再試一下: Boot Multiple ISO from USB via Grub2 using Linux

這個是透過 syslinux 建立的,還沒試,但他這句話讓我有點不想試 XD
"Important Note: YUMI was intended to be used to try to run various "LIVE Linux" Operating Systems from USB. Installing Linux from the YUMI created USB Drive to a Hard Drive is not officially supported. If the installer portion of any Live Linux distro does work, consider it a bonus."

syslinux 似忽都是要將 iso 裡的檔 copy 出來,但我在 copy 時有遇到 error “operation not permitted”,裡面留言所遇到的一樣,但格主沒有回應。

不管那個 error 直接上,Ubuntu 14.04 開不進去,殘唸....

這個也是 syslinux 的方式,就是一個一個用 unetbootin 作好之後,再 copy 到到各別的 folder 再修改 syslinux.cfg 指向它。 但是我看 clonezilla 說,不推用 unetbootin 作開機碟.... 但我想用他的 Tuxboot 作結果應該一樣。

2014年6月13日 星期五

Lenovo Thinkpad X240

最近為了工作買了一台 X240 跑 Ubuntu 14.04 ,分享一下使用上的經驗:


  1. 不知為何,其 default 為 function key
  2. 當使用上面方法時,End/Insert key 就變成以 insert 為 default key.
  3. Ubuntu 14.04 好像取消了中英文輸入法的切換,而改以 super + space 來切換到下一個輸入法,而 super + shift + space 切換到上一個輸入法。
    1. will try this http://jingyan.baidu.com/article/4b07be3c60da3f48b380f3f0.html

      Written with StackEdit.

2014年5月20日 星期二

use case of markdown and associated tool.

決定統一使用簡便的 Markdown 來作事,因此此篇將記錄我用到的 case 及我認為目前最好的方法,歡迎大家一起討論。

2014年5月12日 星期一

[markdown]blogger - headerline optimize

Markdown 有個方便的功能,就是自動建目錄(Why stack edit?),其是依照 <h1></h1>,<h2></h2> 等 tag,建出樹狀的標題分層架構,但這個功能在 blogger用會有一點點問題。

直觀來說,我們認為的分層架構應該如下:

<h1> Title of this post</h1>
<h2> Sub Title of this post</h2>
<h3> Sub Sub-Title of this post</h3>

但是在 blogger 顯示出來的卻會變成:
Unspected-header-font

2014年5月7日 星期三

Install native client application for Naver Line in Linux.

無意間查到這個 Project purple-line 正在利用反向工程試Line Protocol 好讓沒有官方支持的 Linux 系統也可以用 native application 方式使用 Line,讓我們來試看看效果如何。

前置作業

因為作者的 project 為 pidgin 的 plug-in 所以,假設你已裝 pidgin 了.
依 Project readme 的說明,

The prerequisites are a recent C++ compiler, the Apache Thrift compiler and libraries, and libpurple.

2014年5月6日 星期二

如何讓Line 可以在 Linux 下執行?

因為 Naver Line 已深植每個人的生活之中,也 support 各種平台,
但獨缺 Linux 平台,讓 Linux 使用者滿不方便的,
剛好同事分享了某人 分享的 Line protocol project,
查了一下發現,還有其他 Project 在作,且好像已經可以動了,先記錄一下,有空來玩看看。

https://github.com/mvirkkunen/purple-line

https://github.com/OopsMouse/LINEActivity

https://github.com/mvirkkunen/line-protocol/

2014年4月25日 星期五

Why stack edit?

Written with StackEdit.

Survey 幾個寫 blog 的方便後,覺得 stackedit 最方便,下面列出幾項個人覺得實用的功能:

個人覺得好用的功能

  • 有工具列 - 懶人不用記格式
  • 可以和 google drive 同步 - 還可以直接從 google drive 直接開啟
  • 可以從 google+ 直接加图片 - 固定圖床較方便
  • 可以直接 update 之前po 過的文章
  • 利用[TOC]標記自動建立 Table Of Contents - 就是目錄的意思
  • 有 code syntax highlightting 功能.
  • 其他有發現新的好用功能再分享 …. :)

小技巧分享

如何加 tag

---
title: How to use Markdown to edit Blogger posts
tags:
 - Blogger
 - Markdown
---

List item and sub list

 - item
 - subitem

The result will be:

  • item
    • subitem

Other competitor are:
1. logdown
2. Postach.io
3. markdown here - a browser plug-in
4. markable

2014年3月24日 星期一

git-svn experience sharing.

延續之前 git-svn 運作預想图我查了也試了幾個方法,發現事情並不單純,在此分享一下我嘗試過的方法,以試著歸納出最適合這种工作環境的運作方。
首先假設我已在 user home 下面弄好一個 local SVN 的環境以供測試,其架構如下:
file:///home/user/temp/svn_reporsitory
├── branches
│   ├── br1
│   │   ├── add_file
│   │   ├── br1_file
│   │   └── trunk_file
│   ├── br2
│   │   ├── add_file
│   │   ├── svn-commit.tmp
│   │   └── trunk_file
│   └── br3
│       ├── add_file
│       ├── br1_file
│       └── trunk_file
├── tags
├── test
└── trunk
    ├── add_file
    ├── svn-commit.tmp
    └── trunk_file
一定有人想問,為何有些東西不是放在 branches, tags or trunks 裡面,因為我遇到的 SVN repository 就是像這樣,如之前所提,公司人員不一定遵守 standard SVN layout, 因此模擬的 case 就要作得像一點。

local git 和 remote SVN 運作

假設在沒有 remote git repository backup 的需求下,用 local git 就可以了。

standart SVN layout case:

就如上面的 layout 還存在 branches,tags and trunk,因此下面指令就可以將它們都抓下來
$git svn clone -s file:///home/user/temp/svn_reporsitory/
接下來查看 remote branch 就可以看到連到到 remote SVN 的 branch 了。
$ git branch -r
  br1
  br2
  br3
  trunk

$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = file:///home/user/temp/svn_reporsitory
    fetch = trunk:refs/remotes/trunk
    branches = branches/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*
上面可以看到 .git/config 多了一個 [svn-remote "svn"] ,這是git-svn 建立的一個模擬 git remote 的section, 其中 fetch = xxx 就是你要抓的 branch,此例 trunk:refs/remotes/trunk 即表示建一個 refs/remotes/trunk 追綜 file:///home/user/temp/svn_reporsitory/trunk
實際上就是讓 local git 認為有一個 remote git 叫 trunk,而 git-svn 這個 module 會利用 fetch or rebase command 將 remote SVN 的修改版本記錄抓到 local git 認為的 remote, trunk. 如此一來,就可以方便使用 normal git command.

non-standart SVN layout case 1:

就是我遇到的 cases 啦~ 我遇到的 svn layout 如下:
├── branches
│   ├── br1
│   │   ├── add_file
│   │   ├── br1_file
│   │   └── trunk_file
│   ├── br2
│   │   ├── add_file
│   │   ├── svn-commit.tmp
│   │   └── trunk_file
│   ├── br3
│   │   ├── add_file
│   │   ├── br1_file
│   │   └── trunk_file
│   └── test_build
│   └── br1
│   ├── add_file
│   ├── br1_file
│   └── trunk_file
他們將實際上的 trunk 放在 branches 裡面 (ex. br1), 然後在branches 裡再多開folder 叫test_build,用以存放暫時的 build ,ex. ($svn cp br1 test_build/br1)。
這個 case 我就不要把整個 repository 透過 git svn clone -s url 抓下來了,因為太大。
我只想抓我要的 br1, br2 and test_build/br1
先 create 一個 local git,然後把 .git/config 。
$git init test
$vim test/.git/config
[svn-remote "svn-rep"]
        url = file:///home/user/temp/svn_reporsitory
        fetch = branches/br1:refs/remotes/branches/svn-br1
        fetch = branches/test_build/br1:refs/remotes/branches/test_build/svn-br1
$ git svn fetch svn-rep
    ....
    Found possible branch point: file:///home/user/temp/svn_reporsitory/trunk =>    file:///home/user/temp/svn_reporsitory/branches/br1, 9
    ....
    $ git branch -r
  branches/svn-br1
  branches/svn-br1@9
  branches/test_build/svn-br1
這裡出現一個奇怪的 branch branches/svn-br1@9,我猜應該是因為git-svn 需要create 一個branch 來記錄目前 branch 的 parent branch.
這裡可以知道更多更清楚的 git-svn 說明
注記:
在 windows git shell 中執行時,發現第二筆的 fetch 一直都不會被抓下來 (也就是無法在 git branch -r 裡面看到),原因不明… 唯一覺得奇怪的地方在於執行 git svn -r HEAD fetch xxx 時出現了 error message如下:
Couldn't find revmap for svn://xxx/xxx/trunk/xxx/xxx
上面的 xxx 並不是我在 fetch 中指定的 branch ,應該 git-svn 在找尋 parent branch 的資訊時失敗。

non-standart SVN layout case 2:

承接 case 1, 可以發現其實 section name 可以自已取的,以case 1 的例子就是 “svn-rep”,
所以,其實也可以把每個 branch 的 fetch 放到不同的 section name, ex. svn-rep-br1, svn-rep-br2, svn-rep-test_build_br1.
如下例:
.git/config
[svn-remote "svn-rep-br1"]
       url = file:///home/user/temp/svn_reporsitory
       fetch = branches/br1:refs/remotes/branches/svn-br1

[svn-remote "svn-rep-test_build-br1"]
       url = file:///home/user/temp/svn_reporsitory
       fetch = branches/test_build/br1:refs/remotes/branches/svn-test_build-br1
$ git svn fetch svn-rep-test_build-br1
$ git branch -r
branches/svn-br1
branches/svn-br1@9
branches/svn-test_build-br1
$ git svn fetch svn-rep-test_build-br1
$ git branch -r
branches/svn-br1
branches/svn-br1@9
branches/svn-test_build-br1
我也是 git 新手,所以如果有不對的地方,歡迎指正。

2014年3月19日 星期三

git with company svn repository

Written with StackEdit.

因為一般公司都是用 SVN 作 VCS,但當你想用 git 作 local version control 的時後,該怎麼辨呢?
最近花了一點時間在研究這個工作方法 ,有點復雜,分享小弟一些心得給大家。

下面是我的預想图:
enter image description here
首先先看 SVN, 上面有兩個 branch: branch_1,branch_2 (在此我用藍色表示 source注1)
(為何不是 standard SVN layout, trunk, branchs, tags? 因為公司不一定遵守 ….)

我希望將 SVN 拉到 local git repository, 並用 remotes/branch_1, remotes/branch_2 分別指到 SVN 上的 branch_1,branch_2,然後 create local git branchs,svn-branch_1 and svn-branch_1 to track remotes/branch_1 及 remotes/branch_2。

在操作上,svn-XXX 只用來將 SVN 上的 branch 修改拉下來,不會直接在上面修改,以免在下 $git svn rebase 時出問題。因此我們還需要再另外從 svn-XXX branch 出來作修改使用。 在此例即為 git-feature1-branch_1 , git-feature1-branch_2。

(注1: 以上 naming rule 均參考Plasma’s BLOG)
(注2: 在此使用 git 指標的全名說明觀念比較清楚)

最後,我想在再把我的 git 放到另一個 remote git repository 作備份,所以需要再 create remote branch git-feature1, git-feature2 來存 git-feature1-branch_1 , git-feature1-branch_2。
(其實也可以再 create git-svn-branch_1, git-svn-branch_1 來存 svn-branch_1, svn-branch_1,這樣也可以保留 SVN 的 log.)

我也是 git 新手,所以如果有不對的地方,歡迎指正。