Maneira recomendada de instalação dos pacotes regulares (cli) .deb no Ubuntu Phone?


12

tl; dr: Estou procurando uma maneira "canônica" ou "recomendada" de instalar pacotes (cli) .deb no Ubuntu touch

Uso o Ubuntu no meu desktop e servidor há um ano e estou muito satisfeito. Agora comprei o primeiro telefone Ubuntu, o BQ Aquaris e4.5 Ubuntu Edition. No entanto, descobri que não consigo instalar .debpacotes normais ou instalar coisas usando apt-get. Como posso "fazer root" no meu telefone para instalar .debpacotes "normais" ?

Eu mesmo tentei. Eu sei que a primeira coisa é tornar seu sistema de arquivos gravável. Executei as etapas a seguir, mas fiquei preso por causa de um erro do 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

E este é o lugar onde o erro começa a me bloquear:

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

Então eu tentei

sudo apt-get install -f

Mas ficou preso no "Bluetooth main config". Eu reiniciei o telefone, mas ele não queria mais ligar. Eu tentei a Recoveropção de inicialização. Isso funcionou. Eu tentei install -fnovamente, e desta vez funcionou. Mas depois de fazer upgradeeu ainda tinha o mesmo erro.


Tornar a partição do sistema gravável e usar o apt não é suportado. Se você realmente precisar usar alguns aplicativos de console por algum motivo, é melhor criar um chroot dentro do diretório inicial e depois instalar o que você precisa dentro desse chroot.
Dobey

1
Posso confirmar que o uso do apt-get upgrade resultará em um sistema danificado. Estive lá, fiz isso.
Merlijn Sebrechts

1
@ Galgalesh obrigado pela edição, não parece muito melhor. Por enquanto a sua resposta vai pegar uma recompensa :)
jangorecki

1
Dê para @dobey, por favor. Sua resposta é muito melhor :)
Merlijn Sebrechts

1
Sinta-se à vontade para clicar também em "Aceitar esta resposta" ao lado da resposta. :)
dobey

Respostas:


17

Crie um chroot dentro do diretório inicial:

mkdir -p vívido-chroot
cd vivid-chroot
wget http://cdimage.ubuntu.com/ubuntu-touch/vivid/daily-preinstalled/current/vivid-preinstalled-touch-armhf.tar.gz
sudo tar -zxvf vívida-pré-instalada-touch-armhf.tar.gz

Em seguida, use o chroot e instale as ferramentas da CLI que você precisar usar dentro desse chroot:

cd ~ / chroot vívido
sudo chroot.
atualização apt-get
apt-get install git

Para executar certas coisas, pode ser necessário vincular a montagem de alguns diretórios. Você precisará tomar cuidado especial ao fazer isso, se desejar excluir o chroot do seu telefone ou executar outras ações destrutivas.

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

Esta não é uma lista exaustiva, mas você pode montar outros diretórios conforme necessário, de maneira semelhante. Você não precisa criar o chroot em seu diretório pessoal se tiver um dispositivo de armazenamento externo para criá-lo, como um cartão SD. No entanto, nem todos os telefones possuem slots para cartão SD. Se você deseja criar o chroot em um cartão SD, basta substituir o diretório inicial nos comandos acima, pelo caminho para um diretório na mídia de armazenamento alternativa em que deseja criar o chroot.


Uau, muito obrigado por este guia! Fico feliz por não precisar /mais mexer quando quero mexer no meu telefone ... #
Merlijn Sebrechts 13/15

Além disso, sudo mount -o bind /run /home/phablet/vivid-chroot/runpara obter a rede dentro do chroot askubuntu.com/questions/469209/…
sdbbs

1
@sdbbs não acho que seja necessário. Não vinculo nada à montagem no meu chroot, e o acesso à rede funciona bem. Eu uso bzr e apt o tempo todo dentro dele.
Dobey

Copiei o /etc/resolv.conf para o vivid-chroot / etc para obter a resolução do DNS funcionando.
popey

4

Aviso: este é apenas um truque para se livrar do problema de link entre dispositivos no apt-get upgrade com pacote powerd. Esta não é uma solução certificada "UBUNTU"

Pré-requisito: ter feito do R / W a instalação do ubuntu com:

phablet-config writable-image

Copie o arquivo powerd * .deb baixado do telefone para um PC a partir do caminho:

/ var / cache / apt / arquivos /

No PC, descompacte o arquivo .deb, remova o arquivo /usr/share/powerd/device_configs/config-default.xml (dos meus testes, o resultado não é fundamental):

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 

Tudo deve ser feito como root para manter as permissões originais dos arquivos e diretórios do pacote. Reembale, copie de volta no telefone e instale com:

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

Você ainda receberá o erro:

"/usr/share/powerd/device_configs/config-default.xml": dispositivo ou recurso ocupado

Mas no final o pacote é atualizado.

Agora se você: sudo apt-get upgradeo erro desapareceu.

Meu telefone BQ Aquaris parece funcionar bem e estável.


Obrigado pela solução! Por enquanto, não aceitarei, pois ainda espero obter uma maneira mais recomendada (não precisa ser suportada ). Entre. e as futuras atualizações powerd? requer hackear a cada atualização?
Jangorecki 10/05

Até que alguém resolva esse problema de usar hardlinks no dpkg (uma história antiga) em uma instalação entre dispositivos, no momento não vejo uma solução alternativa.
Ezio Somà

1
Pode ser que seja possível alterar alguns pontos de montagem no rder para evitar esse hardlink entre dispositivos, mas precisa de algum tempo para ser analisado. Só olhando para fstab ou saída mont eu não era capaz de descobrir o que ao acaso
Ezio Soma

3

Como já foi apontado, você deve instalar um chroot compatível com ARM no dispositivo e instalar todos os pacotes necessários nesse chroot. No entanto, fazer isso em seu diretório pessoal gasta muito espaço valioso. Em vez disso, isso pode ser feito no seu cartão SD usando um computador executando um sistema operacional Linux apropriado (testado no Linux Mint 17 e Ubuntu Trusty). Como não encontrei nenhuma informação sobre isso em nenhum outro lugar, coloquei aqui como resposta a uma pergunta antiga.

As instruções a seguir assumem que você deseja instalar um debian jessie chroot no diretório jessie.

Criando e preenchendo o arquivo de imagem em um computador desktop

Criando um arquivo de imagem vazio

Para criar uma imagem de 1 GB chamada IMAGE.img no diretório de trabalho atual, faça:

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

Observe que o B em GB é deixado de fora. "if" significa "arquivo de entrada", "of" para "arquivo de saída" e "bs" para "tamanho do bloco".

Existem comandos mais eficientes por aí, mas esses funcionam apenas em certos tipos de sistemas de arquivos, tanto quanto eu sei. Este também funciona em um cartão SD ou em um tempfs. Observe o uso de / dev / zero e não / dev / random ou / dev / urandom, pois isso levaria muito mais tempo e levaria muito mais tempo para transferir a imagem entre os dispositivos posteriormente.

Criando um sistema de arquivos na imagem

Sem o sistema de arquivos, o telefone não seria capaz de armazenar dados na imagem. Sem um sistema de arquivos, você ainda não pode montar a imagem em um diretório, apenas em um dispositivo de bloco.

Este comando bash produzirá o próximo dispositivo de loop vazio na variável LOOP:

$LOOP=$(sudo losetup -f)

Em seguida, atribua a imagem a um dispositivo de bloco:

sudo losetup $LOOP IMAGE.img

Em seguida, crie o sistema de arquivos ext4 nele:

sudo mkfs -t ext4 $LOOP

Em seguida, desanexe a imagem do dispositivo de loop:

sudo losetup -d $LOOP

Se você receber erros de comando não encontrado, basta instalar os programas ausentes.

Monte o arquivo de imagem no computador para acessá-lo

Agora, crie um diretório temporário no diretório de trabalho:

mkdir jessie

e monte o arquivo de imagem IMAGE.img nele:

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

O comando pwdgarantirá que você monte um caminho absoluto para o seu diretório de trabalho atual.

Preencher a imagem com o novo sistema operacional com qemu-debootstrap

O próximo passo será usar o qemu-debootstrap para baixar os arquivos necessários. Isso é fácil se o qemu-debootstrap estiver disponível, como é o caso do Ubuntu e de sistemas operacionais derivados. Se você receber erros de comando não encontrado ao executar qemu-debootstrap --help, tente instalar o pacote apropriado, o que pode ser feito no Ubuntu via:

sudo apt-get install qemu-user-static

Para baixar todos os arquivos necessários e preparar o novo sistema operacional, execute o seguinte comando:

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

Observe que o primeiro jessierepresenta a versão do sistema operacional, enquanto o segundo jessierepresenta o diretório em que os arquivos serão instalados. Agora você pode desmontar a imagem, pois o restante do trabalho deve ser feito no telefone. Faça isso através de:

sudo umount $(pwd)/jessie

Se você não conseguir instalar o qemu-debootstrap, consulte a próxima seção.

Preencher a imagem com o novo sistema operacional sem qemu-debootstrap

Pule esta seção se você tiver o qemu-debootstrap disponível. Você ainda precisará de um debootstrap nativo para sua arquitetura. Se isso acontecer, use apenas a linha de comando acima, mas substitua qemu-debootstrappor debootstrap. Caso contrário, siga esta seção.

Para baixar todos os arquivos necessários para o novo sistema operacional, execute o seguinte comando:

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

Agora você pode desmontar a imagem, pois o restante do trabalho deve ser feito no telefone. Faça isso através de:

sudo umount $(pwd)/jessie

Transferir imagem para o telefone

Agora é melhor criar um arquivo tar a partir deste e copiá-lo para o seu telefone. Não importa se o arquivo é colocado no cartão SD ou no armazenamento interno. Crie o arquivo na área de trabalho usando:

tar -cvzf jessie.tar.gz IMAGE.img

Agora, no seu telefone, ative o suporte ssh para copiar a imagem novamente. Você também pode fazer isso usando um cabo USB. Como o servidor ssh é redefinido a cada reinicialização, inicie o serviço ssh no telefone via: sudo service ssh start

Em seguida, copie a imagem via:

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

onde a variável COPYDIRcontém o diretório em que a imagem deve ser armazenada. Este comando assume que seu nome de usuário no telefone é phablet e o nome do host do telefone é ubuntu-phablet. Você pode descobrir emitindo echo $USER eecho $HOSTNAME por telefone, respectivamente.

Agora você só precisa extrair o arquivo onde quiser que a imagem resida. Suponha que o diretório onde você deseja que a imagem a ser localizado é armazenado na variável IMAGEDIR. Extraia a imagem lá através do comando bash:

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

Agora você pode remover o arquivo morto:

rm $COPYDIR/jessie.tar.gz

Finalizando e usando a imagem no telefone

Se você não ativou o servidor ssh no telefone, faça-o agora através de:

sudo service ssh start

Em seguida, monte sua imagem em um diretório de sua escolha (neste caso "jessie"):

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

Agora, digite seu chroot pela primeira vez via:

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

Se você tinha o qemu-debootstrap disponível no seu computador, está pronto. Use os 2 comandos acima para se conectar ao seu chroot. Caso contrário, você ainda precisará executar o seguinte comando quando estiver dentro do chroot, para configurar corretamente o sistema operacional:

/debootstrap/debootstrap --second-stage

Resumo de como acessar o chroot

Se você seguiu as etapas acima, poderá acessar seu chroot usando este script simples no telefone:

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

Você deve primeiro transferir o ssh para o seu telefone a partir do telefone devido a restrições de aplicação do aplicativo de terminal. O aplicativo de terminal só pode executar binários em determinados locais e nem o diretório pessoal nem o cartão SD estão entre eles. O serviço ssh, no entanto, não possui essas restrições.


1

Tornar gravável o sistema de arquivos raiz no telefone

Para remontar o sistema de arquivos raiz como gravável, execute o seguinte comando no seu telefone (baixe o aplicativo de terminal se você ainda não o tiver):

sudo mount -o remount,rw /

Observe que após reiniciar o telefone, ele /é somente leitura novamente . Se você quiser que isso seja permanente, mude /etc/fstab. No entanto, o toque do Ubuntu no BQ ainda não está nos principais repositórios de braço do Ubuntu. Instalar coisas como treeou libreofficenão funcionará ainda. Eles podem estar na versão mais recente do desenvolvimento.

Executando a última versão devel do Ubuntu

(possui mais vantagens no repositório, como ferramentas de linha de comando e outras)

Como executar o último lançamento de desenvolvimento do Ubuntu touch no telefone bq?

Consertando coisas quando você quebra tudo

Quando você quebra tudo completamente, você pode apenas atualizar o seu dispositivo .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.