Ubuntu Phoneにregular(cli).debパッケージをインストールする推奨方法は?


12

tl; dr:Ubuntu touchに(cli).debパッケージをインストールするための「標準」または「推奨」方法を探しています

私はデスクトップとサーバーで1年間Ubuntuを使用していますが、非常に満足しています。今、私は最初のUbuntu電話であるBQ Aquaris e4.5 Ubuntu Editionを購入しました。ただし、通常の.debパッケージをインストールしたり、を使用してインストールしたりすることはできませんapt-get。「通常の」.debパッケージをインストールできるように電話を「ルート化」するにはどうすればよいですか?

自分で試しました。最初に、ファイルシステムを書き込み可能にすることを知っています。次の手順を実行しましたが、dpkgエラーのためにスタックしました。

# Desktop:
sudo add-apt-repository ppa:phablet-team/tools
sudo apt-get update
sudo apt-get install phablet-tools

# Phone:
Security & Privacy: Lock phone: Lock when idle: Never
About this phone: Developer Mode: Developer Mode ON

# connect phone to PC via USB

# Desktop:
adb devices
# no device detected so I've manually added file
touch /home/username/.android/adb_usb.ini
# with content: 0x2a47
sudo adb kill-server
sudo adb start-server
adb devices # now my phone is on the list

# Phone:
sudo test -w filename && echo "Writable" || echo "Not Writable"
# verified it is writable
sudo add-apt-repository ppa:phablet-team/ppa
sudo apt-get update && sudo apt-get upgrade

そして、これはエラーが私をブロックし始める場所です:

dpkg: error processing archive /var/cache/apt/archives/powerd_0.16+15.04.20150430-0ubuntu1_armhf.deb (--unpack):
unable to make backup link of `./usr/share/powerd/device_configs/config-default.xml' before installing new version: Invalid cross-device link

だから私は試した

sudo apt-get install -f

しかし、それは「Bluetooth main config」で行き詰まりました。電話を再起動しましたが、もう電源を入れたくありませんでした。Recoverブートオプションを試しました。うまくいきました。install -fもう一度試してみましたが、今回はうまくいきました。しかし、実行upgrade後も同じエラーが発生しました。


システムパーティションを書き込み可能にし、aptを使用することはサポートされていません。何らかの理由でいくつかのコンソールアプリを本当に使用する必要がある場合は、ホームディレクトリ内にchrootを作成し、そのchroot内に必要なものをインストールするのが最善です。
ドビー

1
apt-get upgradeを使用するとシステムが壊れることを確認できます。そこに行って、それをしました。
Merlijn Sebrechts

1
@Galgaleshは編集に感謝します。今のところあなたの答えは賞金をつかむつもりです:)
jangorecki

1
@dobeyに渡してください。彼の答えははるかに良いです:)
Merlijn Sebrechts

1
回答の横にある「この回答を受け入れる」をクリックしてください。:)
dobey

回答:


17

ホームディレクトリ内にchrootを作成します。

mkdir -p vivid-chroot
cd vivid-chroot
wget http://cdimage.ubuntu.com/ubuntu-touch/vivid/daily-preinstalled/current/vivid-preinstalled-touch-armhf.tar.gz
sudo tar -zxvf vivid-preinstalled-touch-armhf.tar.gz

次に、chrootを使用して、使用する必要があるCLIツールをそのchroot内にインストールします。

cd〜/ vivid-chroot
sudo chroot。
apt-get update
apt-get install git

特定のことを実行するために、いくつかのディレクトリをバインドマウントする必要がある場合があります。電話からchrootを削除する場合、または他の破壊的なアクションを実行する場合は、その際に特に注意する必要があります。

sudo mount --bind / proc / home / phablet / vivid-chroot / proc
sudo mount --bind / dev / home / phablet / vivid-chroot / dev
sudo mount --bind / sys / home / phablet / vivid-chroot / sys

これは完全なリストではありませんが、必要に応じて同様の方法で他のディレクトリをマウントすることができます。SDカードなどの外部ストレージデバイスを作成する場合は、ホームディレクトリにchrootを作成する必要はありません。ただし、すべての電話機にSDカードスロットがあるわけではありません。SDカードにchrootを作成する場合は、上記のコマンドのホームディレクトリを、chrootを作成する代替ストレージメディア上のディレクトリへのパスに置き換えるだけです。


うわー、このガイドに感謝します!私は私が台無しに持っていないことをうれしく思います/....私は自分の携帯電話をいじるしたいときにはもう
Merlijn Sebrechts

また、chrootaskubuntu.comsudo mount -o bind /run /home/phablet/vivid-chroot/run
questions/

1
@sdbbsそれは必要だとは思わない。chrootにマウントをバインドせず、ネットワークアクセスは正常に機能します。私はbzrを使用し、その中で常にaptを使用しています。
-dobey

DNS解決を機能させるために、/ etc / resolv.confをvivid-chroot / etcにコピーしました。
ポピー

4

警告:これは、powerdパッケージを使用したapt-getアップグレードのクロスデバイスリンクの問題を取り除くためのハックです。これは「UBUNTU」認定ソリューションではありません

前提条件:R / Wをubuntuインストール済み環境にしたこと:

phablet-config writable-image

ダウンロードしたpowerd * .debファイルを電話からパスからPCにコピーします。

/ var / cache / apt / archives /

PCで、.debファイルを解凍し、ファイル/usr/share/powerd/device_configs/config-default.xmlを削除します(私のテストでは、検出されません)。

su - root
mkdir tmp
dpkg-deb -R powerd_0.16+15.04.20150507-0ubuntu1_armhf.deb tmp
rm tmp/usr/share/powerd/device_configs/config-default.xml
mv powerd_0.16+15.04.20150507-0ubuntu1_armhf.deb old.deb
dpkg-deb -b tmp powerd_0.16+15.04.20150507-0ubuntu1_armhf.deb 

パッケージファイルとディレクトリの元のアクセス許可を保持するには、すべてをルートとして実行する必要があります。再梱包し、電話にコピーしてから、以下を使用してインストールします。

sudo dpkg -i powerd_0.16+15.04.20150507-0ubuntu1_armhf.deb

それでもエラーが発生します:

「/usr/share/powerd/device_configs/config-default.xml」:デバイスまたはリソースがビジー

しかし、最後にパッケージが更新されます。

すると sudo apt-get upgrade、エラーが消えました。

私の携帯電話BQ Aquarisは、安定して動作するようです。


解決策をありがとう!私はまだそれを行うためのより推奨されたサポートされる必要はない)方法を得ることを望んでいるので、今のところ受け入れません。ところで。の今後のアップデートはpowerdどうですか?更新ごとにハッキングする必要がありますか?
jangorecki

誰かがクロスデバイスインストールでdpkg(古い話)でハードリンクを使用するというこの問題を解決するまで、現時点では代替ソリューションは見当たりません。
エツィオソマ

1
このクロスデバイスハードリンクを回避するために、rderのマウントポイントを変更することは可能かもしれませんが、分析するには時間が必要です。fstabファイルまたはmontの出力を見るだけでは、何が起こるのか
わかり

3

既に指摘したように、デバイスにARM対応のchrootをインストールし、そのchrootにすべての必要なパッケージをインストールする必要があります。ただし、ホームディレクトリでこれを行うと、多くの貴重なスペースが無駄になります。代わりに、適切なLinux OS(Linux Mint 17およびUbuntu Trustyでテスト済み)で実行されているコンピューターを使用して、SDカードで実行できます。私はこれに関する情報を他のどこにも見つけられなかったので、古い質問への答えとしてここに入れました。

以下の手順では、jessieディレクトリーにdebian jessie chrootをインストールすることを想定しています。

デスクトップコンピューターでの画像ファイルの作成と入力

空の画像ファイルを作成する

現在の作業ディレクトリにIMAGE.imgという1GBのイメージを作成するには、次のようにします。

dd if=/dev/zero of=IMAGE.img bs=1G count=1

GBのBは省略されていることに注意してください。「if」は「入力ファイル」、「of」は「出力ファイル」、「bs」は「ブロックサイズ」を表します。

より効率的なコマンドがありますが、私が知る限り、特定のタイプのファイルシステムでのみ機能します。これは、SDカードまたはtempfsでも機能します。/ dev / randomまたは/ dev / urandomではなく/ dev / zeroを使用すると、時間がかかり、デバイス間でイメージを転送するのに時間がかかることに注意してください。

イメージ上にファイルシステムを作成する

ファイルシステムがなければ、電話機は画像にデータを保存できません。ファイルシステムがなければ、まだイメージをディレクトリにマウントすることはできません。ブロックデバイスにのみマウントしてください。

このbashコマンドは、次の空のループデバイスを変数に出力しますLOOP

$LOOP=$(sudo losetup -f)

次に、イメージをブロックデバイスに割り当てます。

sudo losetup $LOOP IMAGE.img

次に、ext4ファイルシステムを作成します。

sudo mkfs -t ext4 $LOOP

次に、ループデバイスからイメージをデタッチします。

sudo losetup -d $LOOP

command not foundエラーが表示された場合は、不足しているプログラムをインストールしてください。

画像ファイルをコンピューターにマウントしてアクセスします

次に、作業ディレクトリに一時ディレクトリを作成します。

mkdir jessie

画像ファイルIMAGE.imgをマウントします:

sudo mount -o loop IMAGE.img $(pwd)/jessie

このコマンドpwdは、マウントに現在の作業ディレクトリへの絶対パスを指定することを確認します。

qemu-debootstrapを使用してイメージに新しいオペレーティングシステムを取り込む

次のステップは、qemu-debootstrapを使用して必要なファイルをダウンロードすることです。Ubuntuおよび派生OSの場合のようにqemu-debootstrapが利用可能な場合、これは簡単です。実行時にcommand not foundエラーが表示される場合 qemu-debootstrap --helpは、適切なパッケージをインストールしてみてください。これはUbuntuで次の方法で実行できます。

sudo apt-get install qemu-user-static

必要なすべてのファイルをダウンロードし、新しいOSを準備するには、次のコマンドを実行します。

sudo qemu-debootstrap --arch=armhf jessie ./jessie http://http.debian.net/debian

1 jessieつ目jessieはOSバージョンを表し、2つ目はファイルをインストールするディレクトリを表します。残りの作業は電話で行う必要があるため、イメージをアンマウントできます。次のようにしてください:

sudo umount $(pwd)/jessie

qemu-debootstrapをインストールできない場合は、次のセクションを参照してください。

qemu-debootstrapを使用せずに新しいオペレーティングシステムでイメージを作成する

qemu-debootstrapを使用できる場合は、このセクションをスキップしてください。ただし、アーキテクチャにはネイティブのデブートストラップが必要です。これはarmhfであることを起こる場合は、単に上記のコマンドラインを使用しますが、置き換えるqemu-debootstrapことで debootstrap。そうでない場合は、このセクションに従ってください。

新しいOSに必要なすべてのファイルをダウンロードするには、次のコマンドを実行します。

sudo debootstrap --arch=armhf --foreign jessie ./jessie \
    http://http.debian.net/debian

これで、残りの作業を電話で行う必要があるため、イメージのマウントを解除できます。次のようにしてください:

sudo umount $(pwd)/jessie

電話に画像を転送する

次に、これからtarアーカイブを作成して、それを電話機にコピーするのが最適です。アーカイブがSDカードにあるか内部ストレージにあるかは関係ありません。次を使用してデスクトップにアーカイブを作成します。

tar -cvzf jessie.tar.gz IMAGE.img

ここで、携帯電話でsshサポートをオンにして、イメージをコピーします。代わりにUSBケーブルを使用して行うこともできます。sshサーバーは再起動のたびにリセットされるため、次の方法で電話でsshサービスを開始します。 sudo service ssh start

次に、次の方法で画像をコピーします。

scp jessie.tar.gz phablet@ubuntu-phablet:$COPYDIR

変数COPYDIRには、イメージが保存されるディレクトリが含まれます。このコマンドは、電話のユーザー名がphabletであり、電話のホスト名がubuntu-phabletであると想定しています。発行echo $USERecho $HOSTNAME電話でそれぞれ確認できます。

これで、イメージを保存する場所にアーカイブを展開するだけで済みます。イメージを配置するディレクトリが変数に格納されていると仮定しますIMAGEDIR。bashコマンドを使用してそこに画像を抽出します。

( cd $IMAGEDIR; tar -xvzf $COPYDIR/jessie.tar.gz; )

これで、アーカイブを削除できます。

rm $COPYDIR/jessie.tar.gz

電話で画像を仕上げて使用する

電話でsshサーバーをオンにしていない場合は、次の方法でオンにします。

sudo service ssh start

次に、選択したディレクトリ(この場合は「jessie」)にイメージをマウントします。

sudo mount -o loop $IMAGEDIR/IMAGE.img $(pwd)/jessie

ここで、最初にchrootを入力します:

ssh localhost "sudo chroot $(pwd)/jessie /bin/bash"

コンピューターでqemu-debootstrapを使用できる場合は、すべて完了です。上記の2つのコマンドを使用して、chrootに接続します。そうでなければ、OSを適切にセットアップするために、chroot内に入ったら次のコマンドを実行する必要があります。

/debootstrap/debootstrap --second-stage

chrootにアクセスする方法の概要

上記の手順に従った場合、電話で次の簡単なスクリプトを使用してchrootにアクセスできるはずです。

#!/bin/bash
sudo service ssh start
ssh localhost "sudo chroot jessie /bin/bash"

端末アプリの防具の制限により、最初に電話から自分の電話にsshする必要があります。ターミナルアプリは特定の場所でのみバイナリを実行できますが、ホームディレクトリもSDカードもその中にはありません。ただし、sshサービスにはこのような制限はありません。


1

電話のルートファイルシステムを書き込み可能にする

ルートファイルシステムを書き込み可能として再マウントするには、電話機で次のコマンドを実行します(ダウンロード まだ端末アプリをていない場合)。

sudo mount -o remount,rw /

電話を再起動した後、/再び読み取り専用になる。これを永続的にする場合は、を変更し/etc/fstabます。ただし、BQに対するUbuntuのタッチは、メインのUbuntuアームリポジトリにはまだありません。のようなものをインストールするtreeか、libreofficeまだ動作しません。それらは最新の開発バージョンにある可能性があります。

Ubuntuの最新の開発バージョンを実行する

(コマンドラインツールなどのように、リポジトリにはさらに多くの利点があります)

bq電話で最新のUbuntuタッチ開発リリースを実行するには?

すべてを壊したときの修正

あなたが物事を完全に壊したとき、あなたはあなたのデバイスを再フラッシュすることができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.