Debian, Dojo, Django, Python

Делюсь опытом в описанных технологиях. Блог в первую очередь выполняет роль памяток для меня самого.

Показаны сообщения с ярлыком установка. Показать все сообщения
Показаны сообщения с ярлыком установка. Показать все сообщения

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-таблицей разделов уже не получится.

Начало установки

  1. Создайте RAID-массив. Для этого обычно есть специальные утилиты, поставляемые производителем материнской платы.

  2. Загрузитесь с носителя. Выбрав пункт Install, нажмите нужную клавишу для редактирования параметров загрузки.

  3. Для 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
  4. Запустите установщик нажатием Enter в BIOS-системах или F10 в UEFI-системах.

  5. Установка будет идти как обычно. В редакторе разделов для UEFI-систем не забудьте Создать в самом начале диска раздел размером 100 МБ, используемый как Загрузочный раздел UEFI. Там будет создана соответствующая запись, позволяющая запускать загрузчик Debian.

  6. На этапе установки загрузчика произойдёт ошибка. ТАК И ДОЛЖНО БЫТЬ - ЗАГРУЗЧИК БУДЕТ УСТАНОВЛЕН ЧУТЬ ПОЗЖЕ. Следует выбрать в меню Продолжение установки без загрузчика.

  7. Устанока будет завершена, будет предложено извлечь установочный носитель и перезагрузиться - перезагрузитесь, снова выбрав загрузку с установочного носителя!

Установка загрузчика

Для корректной установки загрузчика придётся проделать довольно хитрые манипуляции в режиме восстановления, который нужно запустить с установочного носителя.

  1. В меню выберите пункт Advanced options и нажмите Enter, выберите пункт Rescue mode и сконфигурируйте параметры загрузки ядра так, как это было описано выше, после чего запустите режим восстановления.

  2. Проделайте те же шаги, что и на этапе установки. На одном из этапов будет предложено выбрать корневой раздел для загрузки. Следует выбрать самую первую запись - /dev/dm-1

  3. Будет запущена оболочка BusyBox, в которой по-умолчанию используется интерпретатор sh. Для большего удобства я рекомендую запустить bash соответствующей командой.

  4. Откройте файл /etc/fstab с помощью редактора nano:

    nano /etc/fstab
  5. Обратите внимание на имена разделов. Сейчас они будут выглядеть примерно так:

    /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
  6. Всё, что нужно сделать сейчас - удалить лишнюю букву 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.

  7. Следует перемонтировать все имеющиеся разделы:

    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
  8. Теперь следует в файле /etc/default/grub снять комментарий с параметра GRUB_DISABLE_LINUX_UUID=true.

    После того, как изменения будут сделаны и сохранены, выполните следующие команды для установки загрузчика:

    update-grub
    grub-install /deb/mapper/pdc_ehdiebaf

    Здесь вместо pdc_ehdiebaf следует указать такое имя, раздела, которое указано в вашем /etc/fstab для раздела /. Главная отличительная особенность - отсутствие цифр в конце имени.

  9. После того, как загрузчик будет установлен, следует завершить работу в оболочке с помощью команды exit. Если запускали bash, вводить exit придётся дважды.

  10. Перезагрузите ситему, выбрав соответствующий пункт в меню режима восстановления. Теперь установленная система сможет загрузиться.

Дополнительно

Разработчики Debian знают об этом баге с 2013 года, материалы для статьи были взяты из переписки одного из пользователей с ними. Тикет описан здесь, описанное там решение было опробовано в реальной работе.

Сборка PIL с зависимостями (Debian 7)

Данная статья рассказывает о том, как правильно собрать PIL для поддержки различных форматов.

Описание проблемы

Несмотря на то, что уже давно существует и активно развивается библиотека 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.