UnicodeDecodeError в Ubuntu при установке PHP5.6 из PPA


10

У меня чистый VPS, с Ubuntu 14.04 LTS x64. И попробовал следующее:

# Upgrade The Base Packages

apt-get update
apt-get upgrade -y

# Add A Few PPAs To Stay Current

apt-get install -y software-properties-common

apt-add-repository ppa:nginx/stable -y
apt-add-repository ppa:rwky/redis -y
apt-add-repository ppa:chris-lea/node.js -y
apt-add-repository ppa:ondrej/php5-5.6 -y

Но тогда это терпит неудачу в последнем:

root@xxx:~# apt-add-repository ppa:ondrej/php5-5.6 -y

gpg: keyring `/tmp/tmp9jdzm9kw/secring.gpg' created
gpg: keyring `/tmp/tmp9jdzm9kw/pubring.gpg' created
gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp9jdzm9kw/trustdb.gpg: trustdb created
gpg: key E5267A6C: public key "Launchpad PPA for Ond\xc5\x99ej Sur�" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 687, in addkey_func
    func(**kwargs)
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 370, in add_key
    return apsk.add_ppa_signing_key()
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 261, in add_ppa_signing_key
    tmp_export_keyring, signing_key_fingerprint, tmp_keyring_dir):
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 210, in _verify_fingerprint
    got_fingerprints = self._get_fingerprints(keyring, keyring_dir)
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 202, in _get_fingerprints
    output = subprocess.check_output(cmd, universal_newlines=True)
  File "/usr/lib/python3.4/subprocess.py", line 605, in check_output
    output, unused_err = process.communicate(inputdata, timeout=timeout)
  File "/usr/lib/python3.4/subprocess.py", line 936, in communicate
    stdout = _eintr_retry_call(self.stdout.read)
  File "/usr/lib/python3.4/subprocess.py", line 487, in _eintr_retry_call
    return func(*args)
  File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 92: ordinal not in range(128)

Я не мог понять, что не так. Это все довольно просто.


1
Только что получил эту ошибку при создании образа Docker, попробуйте добавить цепочку с помощью репозитория export LANG=C.UTF-8, это сработало для меня.
Томаш Ковальчик

@ TomaszKowalczyk, который работал на меня, спасибо!
настойчиво

Ответы:


12

Правильный способ - включить поддержку UTF-8 в вашем терминале.

Сначала проверьте ваши локали:

locale -a

Затем установите языковой стандарт UTF-8 для en_US, например, следующим образом:

locale-gen en_US.UTF-8

Затем вам нужно экспортировать его:

export LANG=en_US.UTF-8

Тогда add-apt-repositoryкоманда будет работать нормально.

Если это все еще не работает, попробуйте использовать эту строку:

LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/php


Спасибо большое за твою помощь. Это был единственный способ, чтобы я заработал. Но почему Linux делает все так сложно? Не может ли быть стандарта, которому нужно следовать, чтобы все работало гладко? Я не говорю, что Windows великолепна, поскольку я отказываюсь от нее для Linux, но, боже мой, всегда что-то не работает или выдает ошибки. Это так расстраивает. Каким бы ни было мое настроение, я хочу поблагодарить вас за этот идеальный процесс.
Marcnz

Пожалуйста! Некоторые дистрибутивы (особенно настраиваемые серверные выпуски провайдерами VPS) готовятся как минимальные и не включают пакеты поддержки UTF-8 для меньшего пространства, насколько я могу судить, ресурсов.
Арда

Хм ... Это не работаетCannot add PPA: 'ppa:ondrej/php5-5.6'. Please check that the PPA name or format is correct.
Кирби

@Kirby Это потому, что имя PPA изменилось. Я обновил свой ответ соответственно. Один ppa ondrej/phpтеперь содержит все версии PHP, поддерживаемые его автором.
Арда

4

Я столкнулся с той же проблемой. Я думаю, что ошибка происходит из-за не западных символов в имени (Ond \ xc5 \ x99ej Sur ).

Убедитесь, что вы удалили php5.

Вы можете добавить репозиторий вручную:

# echo "deb http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu trusty main" > /etc/apt/sources.list.d/ondrej-php5-5_6-trusty.list

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C

# apt-get install php5

Проверьте с помощью php -v, установлен ли у вас 5.6:

# php -v
PHP 5.6.6-1+deb.sury.org~trusty+1 (cli) (built: Feb 20 2015 11:22:10) 

0

Попробуйте установить языковой пакет, который может исправить ваши проблемы с кодировкой, например

sudo apt-get install language-pack-en

Это обеспечит обновление данных перевода на английский язык для всех поддерживаемых пакетов (включая Python).

См .: UnicodeEncodeError: кодек «ascii» не может кодировать символ .


0

Попробуйте следующее:

  • Пожалуйста, удалите, если вы уже установили php5.

  • Теперь попробуйте свежую установку.

  • Запустите, gedit /etc/apt/sources.listчтобы добавить следующие коды:

    deb http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu trusty main 
    deb-src http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu trusty main
    

    Пожалуйста, внимательно редактируйте и добавляйте исходный код.

  • Сохраните и обновите его. (1234)

    sudo apt-get update  
    
  • Теперь попробуйте установить php5.

После установки вы должны получить php5-5.6.


Попробовал это. Не сработало Это была свежая установка, кстати, без php.
fiibaar

Вам нужно импортировать ключи ppa, чтобы это работало.
Арда
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.