← All posts tagged Debian

Self-Perfection
Debian code
Парагон надёжности debian ни с того ни с сего стал засирать /var/lib/apt/lists/partial/

$ ls -lht /var/lib/apt/lists/partial/|head
total 458M
-rw-r--r-- 1 root root  27M 2015-08-31 18:34 mirror.yandex.ru_debian_dists_jessie_main_source_Sources.xz.decomp.TZdU53
-rw-r--r-- 1 root root  82K 2015-08-31 18:34 mirror.yandex.ru_debian_dists_jessie_non-free_binary-amd64_Packages.xz
-rw-r--r-- 1 root root 6,8M 2015-08-31 18:34 mirror.yandex.ru_debian_dists_jessie_main_source_Sources.xz
-rw-r--r-- 1 root root  98K 2015-08-31 18:34 mirror.yandex.ru_debian_dists_jessie_non-free_source_Sources.xz
-rw-r--r-- 1 root root  11M 2015-08-31 18:28 mirror.yandex.ru_debian_dists_jessie_main_source_Sources.xz.decomp.6tTnbt
-rw-r--r-- 1 root root 3,3M 2015-08-31 18:22 mirror.yandex.ru_debian_dists_jessie_main_i18n_Translation-en.bz2.decomp.B7FRc4
-rw-r--r-- 1 root root  19M 2015-08-31 18:22 mirror.yandex.ru_debian_dists_jessie_main_source_Sources.xz.decomp.ejkiMd
-rw-r--r-- 1 root root  71K 2015-08-31 18:22 mirror.yandex.ru_debian_dists_jessie_non-free_i18n_Translation-en.bz2
-rw-r--r-- 1 root root   32 2015-08-31 18:22 mirror.yandex.ru_debian_dists_jessie-updates_contrib_source_Sources.xz

И всё что я вижу по делу
$ sudo grep  refresh-cache /var/log/syslog|tail
Aug 31 17:46:44 HOSTNAME PackageKit: refresh-cache transaction /2499_cabcaebc from uid 1000 finished with failed after 4909ms
Aug 31 17:52:44 HOSTNAME PackageKit: refresh-cache transaction /2500_eaeacaee from uid 1000 finished with failed after 4793ms
Aug 31 17:58:44 HOSTNAME PackageKit: refresh-cache transaction /2501_dcadddab from uid 1000 finished with failed after 4253ms
Aug 31 18:04:45 HOSTNAME PackageKit: refresh-cache transaction /2502_eeecdccd from uid 1000 finished with failed after 5190ms
Aug 31 18:10:44 HOSTNAME PackageKit: refresh-cache transaction /2503_abaaabdc from uid 1000 finished with failed after 4553ms
Aug 31 18:16:44 HOSTNAME PackageKit: refresh-cache transaction /2504_dbadbbbc from uid 1000 finished with failed after 4706ms
Aug 31 18:22:44 HOSTNAME PackageKit: refresh-cache transaction /2505_cadbbebd from uid 1000 finished with failed after 4620ms
Aug 31 18:28:44 HOSTNAME PackageKit: refresh-cache transaction /2506_daadcbdb from uid 1000 finished with failed after 5013ms
Aug 31 18:34:44 HOSTNAME PackageKit: refresh-cache transaction /2507_eeedeabc from uid 1000 finished with failed after 5030ms
Aug 31 18:40:44 HOSTNAME PackageKit: refresh-cache transaction /2508_cacdddbd from uid 1000 finished with failed after 4663ms

Вот что за фигня?!?!
Self-Perfection
Debian code jessie bash-completion
Что-то у меня очень сильно разъехалось на работе на арчике, так что сломалась его загрузка. И по такому поводу, понимая, что чинить его и разруливать обновления за больше чем полугода та ещё морока, да и зачем мне rolling release, если я так редко на работе глобально обновляюсь, решил поставить Debian 8. Ещё отчасти из-за любопытства, потому что хоть убунтоклоны всякие много трогал, на чистом дебиане не сидел.

Итак расскажу я вам про цирк с bash-completion. Кратко: если у вас свой .bashrc, то bash-completion не работает.

Вообще в /etc/skel/.bashrc есть блок, который сорсит нужные файлы. Но у меня-то свои dotfiles. "Странно", - думаю я: "Занафига подключать bash-completion через пользовательский rc, если он ставится глобальносистемно, значит должен включаться через /etc". И действительно, в /etc/bash.bashrc есть блок, который сорсит bash-completion. Но он закомментирован. Но это, конечно, странно, блок для поддержки прикладного инструмента, который ставится дополнительным пакетом, не должен быть в общем конфиге. И действительно, есть /etc/profile.d/bash_completion.sh! Он не закомментирован, и если я делаю source /etc/profile, то bash-completion включается. Почему же он не включается при логине?

Оказывается, в нём есть такое условие 
# Check for interactive bash and that we haven't already been sourced.
if [ -n "$BASH_VERSION" -a -n "$PS1" -a -z "$BASH_COMPLETION_COMPAT_DIR" ]; then
И этот тест проваливается, потому что "$PS1" очень даже -z. Вообще уже это, пожалуй, баг, потому что правильная проверка на интерактивность bash сеанса делается так:
[[ $- = *i* ]] || return
Но никак не проверкой на пустоту $PS1. Однако почему $PS1 пуст? Смотрим выше в /etc/profile:
if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
	# The file bash.bashrc already sets the default PS1.
	# PS1='\h:\w\$ '
	if [ -f /etc/bash.bashrc ]; then
	  . /etc/bash.bashrc
	fi
  else
	if [ "`id -u`" -eq 0 ]; then
	  PS1='# '
	else
	  PS1='$ '
	fi
  fi
fi
if 
То есть не выставляем $PS1 для bash, т.к. он и так будет выставлен в его /etc/bash.bashrc. А теперь 
$ head /etc/bash.bashrc
# System-wide .bashrc file for interactive bash(1) shells.

# To enable the settings / commands in this file for login shells as well,
# this file has to be sourced in /etc/profile.

# If not running interactively, don't do anything
[ -z "$PS1" ] && return


Снова неправильная проверка на интерактивность и PS1 так и останется не задан, потому что он не задан >_<

Ну что, кто отправит багрепорт/патч?
Дебиан-дебиан, я думал о тебе лучше...