EMACS: автоустановка пакетов и хоткеи в русской раскладке
Введение
Наткнулся совершенно случайно на две отличных статьи про EMACS.
Если лень читать, то ниже приводятся готовые коды для включения в .emacs
Автоустановка пакетов
(require 'cl)
(require 'package)
;; Список пакетов для установки, на самом деле у меня их под 50 штук, но смысл
;; публиковать их здесь?
(defvar cfg-var:packages '(
anaconda-mode
company
company-anaconda
company-quickhelp
company-tern
company-web
emmet-mode
ergoemacs-mode
flycheck
powerline
py-autopep8
py-isort
web-mode
yafolding
yasnippet
))
(defun cfg:install-packages ()
(let ((pkgs (remove-if #'package-installed-p cfg-var:packages)))
(when pkgs
(message "%s" "Emacs refresh packages database...")
(package-refresh-contents)
(message "%s" " done.")
(dolist (p cfg-var:packages)
(package-install p)))))
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/") t)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(package-initialize)
(cfg:install-packages)
Рабочее решение, которое гораздо лучше тех, что предложены на StackOverflow.
Хоткеи в русской раскладке
;; Это надо добавить ближе к началу .emacs
(defun cfg:reverse-input-method (input-method)
"Build the reverse mapping of single letters from INPUT-METHOD."
(interactive
(list (read-input-method-name "Use input method (default current): ")))
(if (and input-method (symbolp input-method))
(setq input-method (symbol-name input-method)))
(let ((current current-input-method)
(modifiers '(nil (control) (meta) (control meta))))
(when input-method
(activate-input-method input-method))
(when (and current-input-method quail-keyboard-layout)
(dolist (map (cdr (quail-map)))
(let* ((to (car map))
(from (quail-get-translation
(cadr map) (char-to-string to) 1)))
(when (and (characterp from) (characterp to))
(dolist (mod modifiers)
(define-key local-function-key-map
(vector (append mod (list from)))
(vector (append mod (list to)))))))))
(when input-method
(activate-input-method current))))
;; А вот эта строка должна быть в самом конце
(cfg:reverse-input-method 'russian-computer)
Установка Debian на RAID-контроллер (обновлено 6 марта 2015)
Введение
В статье рассказывается об установке Debian на Fake-RAID - это RAID, эмулируемый некоторыми материнскими платами. При этом аппаратного RAID-контроллера, позволяющего прозрачно работать с массивом, на таких материнских платах нет. Проблем с установкой Debian на нормальный RAID обычно не бывает, а вот с Fake-RAID - ещё какие. Здесь рассказывается о том, как две такие проблемы решить.
Во многом эта статья является цитированием моего же перевода со странички в Wiki Debian, но есть несколько существенных отличий, о которых там не сказано.
Примечания для UEFI-систем.
Debian 7 Wheezy давно поддерживает установку на UEFI-системы, поэтому не надо переводить компьютер в Legacy-режим, продолжайте установку как обычно. В редких случаях в UEFI нужно зайти на вкладку Security и в поле OS type вместо Windows выбрать Other system.
Небольшие различия есть в работе установщика Debian - в случае с обычной системой для правки параметров запуска следует нажать Tab. Для UEFI-систем нужно нажать e. Запуск установщика в этом случае так же производится по-разному: Enter для обычных систем и F10 для UEFI.
Так же для UEFI-систем я НАСТОЯТЕЛЬНО рекомендую преобразовать таблицу разделов из устаревшего уже формата MBR в современный GPT. Однако, должен сразу предупредить: десктопные версии Windows могут работать с GPT только начиная с версии 8, т.е. установить Windows 7 на диск с GPT-таблицей разделов уже не получится.
Начало установки
-
Создайте RAID-массив. Для этого обычно есть специальные утилиты, поставляемые производителем материнской платы.
-
Загрузитесь с носителя. Выбрав пункт
Install, нажмите нужную клавишу для редактирования параметров загрузки. -
Для BIOS-систем просто допишите в конце строки параметров:
dmraid=trueВ UEFI-системах следует использовать клавиши со стрелочками для перехода к 4-ой строке, которая на 64-битных системах обычно выглядит так:
linux /install.amd/vmlinuz video=vesa:ywrap,mtrr vga=788 \ -- quietВ конце этой строки следует дописать параметр
dmraid=true, в итоге получится такая строка:linux /install.amd/vmlinuz video=vesa:ywrap,mtrr vga=788 \ -- quiet dmraid=true -
Запустите установщик нажатием
Enterв BIOS-системах илиF10в UEFI-системах. -
Установка будет идти как обычно. В редакторе разделов для UEFI-систем не забудьте Создать в самом начале диска раздел размером 100 МБ, используемый как
Загрузочный раздел UEFI. Там будет создана соответствующая запись, позволяющая запускать загрузчик Debian. -
На этапе установки загрузчика произойдёт ошибка. ТАК И ДОЛЖНО БЫТЬ - ЗАГРУЗЧИК БУДЕТ УСТАНОВЛЕН ЧУТЬ ПОЗЖЕ. Следует выбрать в меню
Продолжение установки без загрузчика. -
Устанока будет завершена, будет предложено извлечь установочный носитель и перезагрузиться - перезагрузитесь, снова выбрав загрузку с установочного носителя!
Установка загрузчика
Для корректной установки загрузчика придётся проделать довольно хитрые манипуляции в режиме восстановления, который нужно запустить с установочного носителя.
-
В меню выберите пункт
Advanced optionsи нажмитеEnter, выберите пунктRescue modeи сконфигурируйте параметры загрузки ядра так, как это было описано выше, после чего запустите режим восстановления. -
Проделайте те же шаги, что и на этапе установки. На одном из этапов будет предложено выбрать корневой раздел для загрузки. Следует выбрать самую первую запись -
/dev/dm-1 -
Будет запущена оболочка BusyBox, в которой по-умолчанию используется интерпретатор sh. Для большего удобства я рекомендую запустить bash соответствующей командой.
-
Откройте файл
/etc/fstabс помощью редактора nano:nano /etc/fstab -
Обратите внимание на имена разделов. Сейчас они будут выглядеть примерно так:
/dev/mapper/pdc_ehdiebafp1 / ext4 errors=remount-ro 0 1 /dev/mapper/pdc_ehdiebafp9 /home ext4 defaults 0 2 /dev/mapper/pdc_ehdiebafp8 /tmp ext4 defaults 0 2 /dev/mapper/pdc_ehdiebafp5 /usr ext4 defaults 0 2 /dev/mapper/pdc_ehdiebafp6 /var ext4 defaults 0 2 /dev/mapper/pdc_ehdiebafp7 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 -
Всё, что нужно сделать сейчас - удалить лишнюю букву p перед цифрой в конце имени раздела, т.е. привести все строки к такому виду:
/dev/mapper/pdc_ehdiebaf1 / ext4 errors=remount-ro 0 1 /dev/mapper/pdc_ehdiebaf9 /home ext4 defaults 0 2 /dev/mapper/pdc_ehdiebaf8 /tmp ext4 defaults 0 2 /dev/mapper/pdc_ehdiebaf5 /usr ext4 defaults 0 2 /dev/mapper/pdc_ehdiebaf6 /var ext4 defaults 0 2 /dev/mapper/pdc_ehdiebaf7 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0После внесения изменений следует сохранить их с помощью
Crrl+Oи выйти из редактора с помощьюCtrl+X. -
Следует перемонтировать все имеющиеся разделы:
mount -o remount / mount /dev/mapper/pdc_ehdiebaf9 /home mount /dev/mapper/pdc_ehdiebaf8 /tmp mount /dev/mapper/pdc_ehdiebaf5 /usr mount /dev/mapper/pdc_ehdiebaf6 /varКоличество разделов зависит от того, как был размечен диск на этапе установки. Если вдруг забудете, какой раздел куда смонтирован, легко подсмотреть содержимое fstab с помощью команды
cat:cat /etc/fstab -
Теперь следует в файле
/etc/default/grubснять комментарий с параметраGRUB_DISABLE_LINUX_UUID=true.После того, как изменения будут сделаны и сохранены, выполните следующие команды для установки загрузчика:
update-grub grub-install /deb/mapper/pdc_ehdiebafЗдесь вместо
pdc_ehdiebafследует указать такое имя, раздела, которое указано в вашем/etc/fstabдля раздела/. Главная отличительная особенность - отсутствие цифр в конце имени. -
После того, как загрузчик будет установлен, следует завершить работу в оболочке с помощью команды
exit. Если запускали bash, вводитьexitпридётся дважды. -
Перезагрузите ситему, выбрав соответствующий пункт в меню режима восстановления. Теперь установленная система сможет загрузиться.
Дополнительно
Разработчики Debian знают об этом баге с 2013 года, материалы для статьи были взяты из переписки одного из пользователей с ними. Тикет описан здесь, описанное там решение было опробовано в реальной работе.
Сборка PIL с зависимостями (Debian 7)
Описание проблемы
Несмотря на то, что уже давно существует и активно развивается библиотека Pillow, импортирующая функции для обработки изображений средствами Python, в некоторых проектах до сих пор используется устаревший (последняя версия вышла в 2009 году) модуль PIL. Если Вы из тех "везунчиков", кому приходится поддерживать старые проекты, то эта статья для Вас. При установке PIL в виртуальное окружение вводится командаpip install pilПосле этого начинается процесс загрузки расширения и его сборки, выводится куча сообщений, и в самом конце можно увидеть следующий текст:
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.6.8 (unknown, Jan 26 2013, 14:35:25)
[GCC 4.7.2]
--------------------------------------------------------------------
*** TKINTER support not available (Tcl/Tk 8.5 libraries needed)
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
Что означает примерно следующее: модуль успешно собран, но работать не будет, т.к. ни одно из требующихся расширений установлено не было.
Немного погуглив, я натолкнулся на кучу форумов, где описывалось решение, заключающееся в создании символических ссылок на нужные библиотеки в каталоге /usr/lib, однако, ни одно из этих решений не оказалось рабочим. В этой статье я описываю своё решение сборки PIL с поддержкой практически всех нужных расширений.
Установка
Для сборки и установки PIL с зависимостями нам потребуются некоторые дополнительные пакеты- python2.6-dev - заголовочные файлы для сборки Python2.6. Если используете другой - указываете другой.
- libjpeg62-dev - для поддержки JPEG (в Debian есть также libjpeg8-dev, но она не подойдёт)
- zlib1g-dev - поддержка PNG
- libfreetype6-dev - поддержка шрифтов
- liblcms1-dev - поддержка LITTLE CMS. Что это такое, я не знаю, можно не ставить.
apt-get install libjpeg62-dev zlib1g-dev libfreetype6-dev liblcms1-devВсе необходимые зависимости, в том числе GCC, если он не установлен, установятся сами. Итак, необходимые системные пакеты установлены. Теперь нужно будет сделать несколько дополнительных действий с самой библиотекой. Первым делом её нужно скачать с официального сайта.
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gzРаспакуем архив:
tar xfv Imaging-1.1.7.tar.gzЗайдём в созданную папку и отредактируем файл setup.py
cd Imaging-1.1.7 nano setup.pyТут нужно внести следующие изменения:
TCL_ROOT = NONE JPEG_ROOT = NONE ZLIB_ROOT = NONE TIFF_ROOT = NONE FREETYPE_ROOT = NONE LCMS_ROOT = NONEзаменяем на
TCL_ROOT = '/usr/lib/x86_64-linux-gnu/' JPEG_ROOT = '/usr/lib/x86_64-linux-gnu/' ZLIB_ROOT = '/usr/lib/x86_64-linux-gnu/' TIFF_ROOT = '/usr/lib/x86_64-linux-gnu/' FREETYPE_ROOT = '/usr/lib/x86_64-linux-gnu/' LCMS_ROOT = '/usr/lib/x86_64-linux-gnu/'В x86-системах вместо x86_64 нужно вводить i386. Тем самым мы указываем, откуда брать библиотеки. Теперь можно попробовать собрать PIL со всеми расширениями (без реальной установки):
python setup.py build_ext -iЕсли сообщение выглядит примерно так:
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.6.8 (unknown, Jan 26 2013, 14:35:25)
[GCC 4.7.2]
--------------------------------------------------------------------
*** TKINTER support not available (Tcl/Tk 8.5 libraries needed)
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
можно смело устанавливать PIL в виртуальное окружение Вашего проекта. Перед этим рекомендую удалить старую версию через
pip uninstall pil -yи удалить файлы в каталоге lib/site-packages виртуального окружения:
cdsitepackages rm -rf PIL*Установка PIL:
python setup.py install
Заключение
В некоторых проектах БАРС Груп используется PIL, он прописан в зависимостях для установки их пакетов через setup-tools. В этом случае я делаю так:- Устанавливаю PIL
- Устанавливаю пакет, провожу миграции и т.д.
- Удаляю PIL и ставлю Pillow, т.к. Pillow импортирует те же самые функции и пространства имён, что и PIL.