14 декабря 2012 г.

Команды для работы с openSSL

Команды для работы с openSSL


Узнать как установить OpenSSL можно прочитав данную статью "Установка OpenSSL"

Основные команды:

Эти команды позволяют создать CSR запросы, сертификаты, приватные ключи, а так же выполнять другие задачи.

Создание нового приватного ключа и CSR запроса:

openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key

Создание самоподписаного сертификата:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

Создание CSR запроса для существующего приватного ключа:

openssl req -out CSR.csr -key privateKey.key -new

Создание нового CSR запроса на основе существующего сертификата:

openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

Удаление секретной фразы-пароля из приватного ключа:

openssl rsa -in privateKey.pem -out newPrivateKey.pem

Использование OpenSSL для конвертирования

Конвертирование файла DER (.crt .cer .der) в PEM:


openssl x509 -inform der -in certificate.cer -out certificate.pem

Конвертирование файла PEM в DER:

openssl x509 -outform der -in certificate.pem -out certificate.der

Конвертирование файла PKCS # 12, который содержит приватный ключ и сертификат в PEM:

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

Конвертирование PEM файла и приватного ключа в PKCS # 12:

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

Установка OpenSSL

Установка OpenSSL

OpenSSL — это система защиты и сертификации данных, название SSL переводится, как система безопасных сокетов (secure socket layer). OpenSSL используется практически всеми сетевыми серверами для защиты передаваемой информацией. Официальный сайт проекта http://www.openssl.org/.

Для скачивания переходим по ссылки http://slproweb.com/products/Win32OpenSSL.html, на момент написания статьи последняя версия была 1.0.1с. В зависимости от разрядности вашей операционной системы скачиваем соответствующий инсталятор (рис. 1).

Рисунок 1
После того как вы скачали нужный пакет можно запускать его. На первой странице мастера установки мы увидим приветствие. Нажимаем Next> (рис.2)
Рисунок 2

На второй странице нам необходимо прочитать и принять лицензионное соглашение. Выбираем "I accept the agreement" и нажимаем Next> (рис. 3)
Рисунок 3

На третьей странице можно указать путь куда будет установлена программа, можно оставить по умолчанию и нажать Next> (рис. 4)
Рисунок 4

На четвертой странице предлагается выбрать название папки в которую инсталятор поместит ярлыки, оставляем как есть и жмем Next> (рис. 5)
Рисунок 5

На пятой странице инсталятор спрашивает что необходимо сделать после установки с библиотеками : 
  • The Windows system directory - скопировать библиотеки в системный каталог Windows
  • The OpenSSL binaries(/bin) directory - скопировать библиотеки в папку с программой
Лучше оставить по умолчанию первый пункт так как библиотеки станут доступны и другим программам. Для продолжения нажимаем Next>  (рис. 6).

Рисунок 6

На шестой странице смотрим сводную информацию, проверяем что все настроено так как нам необходимо и нажимаем Install для начала процесса установки (рис. 7)
Рисунок 7

На седьмой странице отображается прогресс операции установки (рис. 8)
Рисунок 8

На восьмой странице будет предложено сделать пожертвования в пользу проекта, если есть желание помочь то можете выбрать какой либо пункт. Если же вы не имеете возможности сделать пожертвования в данный момент просто снимите флажки и нажмите Finish (рис. 9)
Рисунок 9

Все процесс установки OpenSSL закончен.

15 октября 2012 г.

Конвертация XML в JSON

Конвертация XML в JSON

Недавно столкнулся с проблемой преобразования ответа от сервера из XML в JSON. После продолжительного поиска в сети был найден замечательный скрипт от Stefan Goessner, который можно скачать по данному адресу: http://goessner.net/download/prj/jsonxml/. Там же присутствует и скрипт для обратной конвертации, а так же примеры как использовать данные скрипты.
Скрипт очень хорош, но при его использовании может возникнуть пара проблем о которых я и хочу рассказать в данном посте.
Функция конвертации имеет вид xml2json(xml, tab), где xml - строка  в xml, а tab - это символ которым необходимо разделять строки. Первый параметр как все понимают обязательный, а второй необязательный. Теперь когда мы вызываем функцию без второго параметра то получаем строку в JSON формате в начале которой стоит "undefined ". С чего бы это вдруг ? Оказывается что в ответе возвращается строка return "{\n" + tab + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "\n}"; . Теперь все ясно первый раз вставляется символ tab без проверки на наличие. Заменяем данную строку на следующую return "{\n" + (tab ? tab : "") + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "\n}"; . Ну вот другое дело, теперь нам возвращается JSON без лишних неопределенных элементов.

Вторая проблема возникает когда скрипт пытается обработать xml-строку в которой имеется заголовок вида <?xml version="1.0" encoding="windows-1251"?> , скрипт его не отрабатывает, поэтому перед передачей строки скрипту необходимо удалить данный заголовок.

Еще одна проблема возникает когда мы пытаемся из полученной строки получить объект. При выполнении var jsonObj = JSON.parse(xml2json(xml,""));, где xml - это все та же строка в формате XML в ответ вместо желанного объекта мы получаем ошибку SyntaxError: Unexpected token ILLEGAL. На сей раз проблема кроется в символе переноса строки "\n" который стоит после первой и перед последней фигурными скобками.  Функция JSON.parse() не может обработать данную последовательность и поэтому завершается неудачно. Решение проблемы очень легкое просто удалить данные символы из вывода. return "{" + (tab ? tab : "") + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "}"; Теперь все должно заработать. Для тех кому лень разбираться я сделал форк данного скрипта и разместил его по адресу https://github.com/oiljin/xml2json так что качайте , пользуйтесь.

Пример использования:


Для начала напишите функцию которая создает DOMParser
function parseXml(xml) {
   var dom = null;
   if (window.DOMParser) {
      try { 
         dom = (new DOMParser()).parseFromString(xml, "text/xml"); 
      } 
      catch (e) { dom = null; }
   }
   else if (window.ActiveXObject) {
      try {
         dom = new ActiveXObject('Microsoft.XMLDOM');
         dom.async = false;
         if (!dom.loadXML(xml)) // parse error ..

            window.alert(dom.parseError.reason + dom.parseError.srcText);
      } 
      catch (e) { dom = null; }
   }
   else
      alert("cannot parse xml string!");
   return dom;
}
Затем используйте так:
var xml = '<e name="value">text</e>',
    dom = parseXml(xml),
    json = xml2json(dom);
var jsonObj = JSON.parse(json);


20 сентября 2012 г.

 Настройка работы Tortoise по протоколу SSH через PuTTY.

1. Установка PuTTY

Первым шагом необходимо скачать и установить программу PuTTY.
Скачиваем с оф.сайта: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html инсталятор для Windows из секции A Windows installer for everything except PuTTYtel.


Запускаем скачанный файл putty-0.62-installer.exe. Первым делом нас приветствуют и рекомендуют перед установкой закрыть все запущенные приложения и после этого нажать Next>  (рис. 1).

Рисунок 1

  На следующем шаге возможно выбрать путь установки PuTTY выбрав Browse...После выбора каталога необходимо нажать Next> (рис. 2).
Рисунок 2

На следующем шаге инсталятор предлагает создать ярлыки для устанавливаемых программ. Имеется возможность выбрать папку куда будут сохранены ярлыки, а также возможность отключить создание ярлыков в меню ПУСК (Don't create a Start Menu folder) (рис. 3). После настройки нажимаем Next>.

Рисунок 3

На следующем шаге предлагается настроить (рис. 4)
Ярлыки:
Create a desctop icon for PuTYY - создать ярлык для PuTTY на рабочем столе.
For all users - для всех пользователей
For the current user only - только для текущего пользователя
Create a Quick Launch icon for PuTTY (current user only) - создать ярлык для PuTTY в панели быстрого запуска (только для текущего пользователя)

А так же:
Associate .PPK file(PuTTY Private Key) with Pageant and PuTTYgen - ассоциировать расширение файлов .PPK(PuTTY приватный ключ) с программой PuTTYgen.
Рисунок 4

На следующем шаге выводится сводная информация о сделанных ранее настройках(рис.5). Проверяем что все настроено как иы хотели и нажимаем Install для запуска процесса инсталяции.

Рисунок 5

После установки появится экран с сообщением об удачном завершении процесса. Для окончания установки следует нажать Finish (рис. 6).

Рисунок 6

После всего проделанного у вас в меню ПУСК->Все программы должны создаться (если вы не выключили) следующие ярлыки (рис. 7).

Рисунок 7

2. Создание ключей с помощью PyTTYgen.

Для генерации ключей запускаем программу PyTTYgen (рис. 7). После запуска появится главное окно приложения PyTTYgen (рис. 8).
Рисунок 8
В поле Parameters (параметры) указываем какой тип ключа необходимо сгенерировать. Данную информацию уточните у своего системного администратора. Если вы и есть администратор, то решайте сами какой тип вы будете использовать на сервере. Для генерации нажимаем кнопку Generate.


Окно примет вид изображенный на рисунке 9. Для генерации необходимо в произвольном порядке передвигать курсор мыши в области под полосой прогресса.

Рисунок 9

После генерации в верхней части окна будет отображен открытый ключ для сервера (рис. 10). 
Рисунок 10

Для дополнительной защиты приватного ключа можно ввести фразу пароль в поле Key passphrase и подтвердить в Confirm passphrase. (PS: если вы не установили ключевую фразу сразу, то это можно сделать позднее загрузив свой ключ с помощью кнопки Load и установив ключевую фразу сохранить новый ключ. Публичный ключ в замене не нуждается). Теперь сохраняем наши ключи:

Save public key - сохранить публичный ключ (рис. 11)
Рисунок 11

Save private key - сохранить приватный ключ (рис. 12)
Рисунок 12

После всего проделанного мы получили два ключа (рис. 13)
Рисунок 13

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


3. Настройка Pageant для работы с ключами.

Теперь необхдимо настроить PuTTy Pageant (рис. 14)
Рисунок 14

В правой части клавного окна выбираем категорию Session (рис. 15)
В поле Host Name (or IP address) - Имя хоста(или IP адресс) вводим адрес нашего SVN-сервера.
В поле Port (порт) вводим порт SSH.
Теперь самое главное! в поле Saved Sessions пишем имя соединения и запоминаем его, оно нам еще пригодится!
Рисунок 15

Теперь необходимо установить наш приватный ключ (рис. 16). Для этого переходим Connection->SSH->Auth
В секции Authentication parameters в поле Private key file for authentication необходимо вставить путь к вашему приватному ключу или с помощью кнопки Browse можно выбрать располжение ключа.
Рисунок 16

Для автоматического входа на сервер от имени заранее известного пользователя необходимо перейти в Connection->Data и в поле Auto-login username вписать имя пользователя (рис. 17).
Рисунок 17

Теперь сохраним нашу сессию. Для этого переходим в Session и нажимаем Save (рис.18). В нижнем списке должно отразиться имя нашей новой сессии.
Рисунок 18

4. Выкачиваем репозиторий с помощью SVN Tortiose

В подготовленном заранее каталоге нажимаем правую кнопку мыши и выбираем SVN Checkout...(рис. 19).
Рисунок 19

Теперь в поле URL of repository (URL адрес репозитория) пишем строку формата svn+ssh://имя_нашего_соединения_из_PuTTY/путь_в_репозитории и нажимаем OK (рис. 20)
Рисунок 20

Наблюдаем процесс скачивания (рис. 21).
Рисунок 21
Настройка завершена!!!

3 сентября 2012 г.

Форматированный вывод даты в JavaScript

Форматированный вывод даты в JavaScript.

  В одном проекте мне постоянно требовалось выводить даты в разных форматах.Так как в JS такой функции не имеется, то было решено написать следующую функцию getDateTimeToString(). Способ использования довольно прост, в параметр передается строка содержащая специальные ключи. Функция разбирает входной параметр и заменяет ключи значениями текущей даты. В результате работы будет возвращена строка.
 

В функции используются следующие ключи (на примере даты 1 февраля 2012г 10:5:23:233):

yyyy - полный год, пр.: 2012
yy - последние цифры года, пр.: 12
MM - номер месяца, пр.: 02
dddd - полное название дня недели, пр.: Среда
ddd - сокращенное название дня недели, пр.: Ср.
dd - число, пр.: 01
hh - часы, пр.: 10
mm - минуты, пр.: 05
ss - секунды, пр.: 23
zz - миллисекунды, пр.: 233

Пример использования:


getDateTimeToString("dd/MM/yy г. Время:hh:mm:ss");
getDateTimeToString("dd-MM-yyyy hh:mm");
getDateTimeToString("Год: yyyy, День недели: dddd");

Исходный код функции:

/**
* Генерирует дату и время в заданном формате
* 12:59:52 03.09.2012
* @author Ильин Олег
* @param {String} strFormat формат-строка
* @returns {String} отформатированная дата
*/

function getDateTimeToString(strFormat){
var resultDateTime = strFormat;
var d = new Date();

var daysLong = ["Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"];
var daysShort = ["Пн.","Вт.","Ср.","Чт.","Пт.","Сб.","Вс."];
var yearRegExp = d.getFullYear();
var monthRegExp = (String(d.getMonth()+1).length ==1) ? ("0"+(d.getMonth()+1)) : (d.getMonth()+1);
var dayRegExp = (d.getDate().toString().length ==1) ? ("0"+d.getDate()) : d.getDate();
var dayNameRegExp = d.getDay();
var hoursRegExp = (d.getHours().toString().length ==1) ? ("0"+d.getHours()) : d.getHours();
var minuteRegExp = (d.getMinutes().toString().length ==1) ? ("0"+d.getMinutes()) : d.getMinutes();
var secondsRegExp = (d.getSeconds().toString().length ==1) ? ("0"+d.getSeconds()) : d.getSeconds();
var milisecondsRegExp = (d.getMilliseconds().toString().length ==1) ? ("00"+d.getMilliseconds()) : ((d.getMilliseconds().toString().length ==2) ? ("0"+d.getMilliseconds()) : d.getMilliseconds());

resultDateTime = resultDateTime.replace(new RegExp('yyyy', 'g'), yearRegExp);
resultDateTime = resultDateTime.replace(new RegExp('yy', 'g'), String(yearRegExp).slice(-2));
resultDateTime = resultDateTime.replace(new RegExp('MM', 'g'), monthRegExp);
resultDateTime = resultDateTime.replace(new RegExp('dddd', 'g'), daysLong[dayNameRegExp-1]);
resultDateTime = resultDateTime.replace(new RegExp('ddd', 'g'), daysShort[dayNameRegExp-1]);
resultDateTime = resultDateTime.replace(new RegExp('dd', 'g'), dayRegExp);
resultDateTime = resultDateTime.replace(new RegExp('hh', 'g'), hoursRegExp);
resultDateTime = resultDateTime.replace(new RegExp('mm', 'g'), minuteRegExp);
resultDateTime = resultDateTime.replace(new RegExp('ss', 'g'), secondsRegExp);
resultDateTime = resultDateTime.replace(new RegExp('zz', 'g'), milisecondsRegExp);

return resultDateTime+"";
};

30 августа 2012 г.

Порты FreeBSD

Порты FreeBSD

Вместе с FreeBSD в составе базового комплекта системы поставляется богатый набор системных утилит. Однако для выполнения какой-то реальной работы очень скоро возникает необходимость в установке дополнительных приложений сторонних разработчиков. FreeBSD даёт две взаимодополняющих технологии для установки программного обеспечения сторонних разработчиков в вашу систему: Коллекция Портов FreeBSD и бинарные пакеты с программным обеспечением. Любая из этих систем может быть использована для установки самых последних версий ваших любимых приложений с локальных носителей или прямо из сети.
Коллекция Портов - представляет собой в основном набор файлов Makefile, патчей, файлов описаний, и размещается в каталоге /usr/ports.


Порт FreeBSD для приложения является набором файлов, предназначенных для автоматизации процесса компиляции приложения из исходного кода. Файлы, составляющие порт, содержат всю информацию, необходимую для того, чтобы система сделала основную работу за вас. Вы задаёте пару простых команд, и исходный код приложения автоматически загружается, распаковывается, модифицируется, компилируется и устанавливается.


Порты принимают во внимание зависимости. Предположим, что вы хотите установить приложение, которое зависит от некоторой установленной библиотеки. И приложение, и библиотека доступны во FreeBSD в виде портов. Если вы используете систему портов для добавления приложений, то будет обнаружено, что библиотека не была установлена, и сначала будет автоматически выполнена установка библиотеки.

Преимущества портов

  • Пакеты обычно компилируются с консервативными параметрами, потому что они должны работать на максимальном количестве систем. При установке из порта вы можете изменять параметры компиляции для того, чтобы (к примеру) генерировался код, специфичный для процессора Pentium IV или Athlon.
  • Некоторые приложения имеют опции времени компиляции, связанные с тем, что они могут или не могут делать. К примеру, Apache может быть настроен с широким набором различных опций. При построении из порта вы можете не принимать параметры по умолчанию, и задать их самостоятельно.
  • В некоторых случаях для одного и того же приложения будут иметься несколько пакетов для указания конкретных настроек. Например, Ghostscript имеется как пакет ghostscript и как пакет ghostscript-nox11, в зависимости от того, установили вы сервер X11 или нет.
  • Условия лицензирования некоторых дистрибутивов программного обеспечения запрещает распространение в двоичном виде. Они должны распространяться в виде исходного кода.
  • Некоторые не доверяют дистрибутивам в двоичном виде. При использовании исходного кода вы (по крайней мере теоретически) можете прочесть его и попытаться найти потенциальные проблемы самостоятельно.
  • Если у вас есть собственные патчи, вам нужен исходный код для того, чтобы их применять.
  • Некоторым нравится иметь исходный код, чтобы его можно было просматривать и править, заимствовать из него (конечно, при разрешающем это лицензионном соглашении) и тому подобное.

Поиск нужного приложения

Существует несколько способов найти необходимое вам приложение:

1. Если вы знаете точное имя порта, и хотите определить, в какой категории он находится, используйте команду whereis(1). Просто наберите в приглашении ''whereis file'', где file - программа, которую вы хотите установить. И если она имеется в системе, об этом будет сообщено, как показано ниже:

# whereis lsof 
lsof: /usr/ports/sysutils/lsof

Это говорит о том, что lsof (системная утилита) находится в каталоге
/usr/ports/sysutils/lsof.

2. Ещё одним способом поиска некоторого порта является использование встроенной возможности поиска в Коллекции Портов. Чтобы ею воспользоваться, вы должны находиться в каталоге /usr/ports. Очутившись в этом каталоге, выполните команду make search name=program-name, где program-name - это название программы, которую вы хотите найти. Например, если вы ищете lsof:

# cd /usr/ports 
# make search name=lsof 
Port: lsof-4.56.4 
Path: /usr/ports/sysutils/lsof 
Info: Lists information about open files (similar to fstat(1)) 
Maint: obrien@FreeBSD.org 
Index: sysutils 
B-deps: 
R-deps: 

Вам следует обратить особое внимание на строчку
''Path:'', так как в ней указывается, где найти порт.

3. Для выполнения более глубокого поиска вы можете также использовать make search key=string, где string представляет собой некоторый текст, относящийся к искомому порту. При этом будет выполнен поиск в именах портов, комментариях, описаниях и зависимостях, и его можно использовать для поиска портов, связанных с некоторой темой, если вы не знаете названия программы, которую вы ищете.

В обоих этих случаях строка поиска нечувствительна к регистру. Поиск ''LSOF'' приводит к тому же самому результату, что и поиск ''lsof''.

Что содержит порт?

Каждый порт включает:

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

Файл distinfo. Этот файл содержит информацию о файлах, которые должны существовать на вашей системе для успешной сборки порта, и их контрольные суммы, для проверки при помощи md5(1) того, что файлы в процессе загрузки не были повреждены.

Каталог files. Этот каталог содержит патчи, использование которых необходимо для компиляции и установки программы в вашей системе FreeBSD. Патчи - это, как правило, маленькие файлы, в которых содержатся изменения, которые нужно внести в какой-то конкретный файл. Они имеют обычный текстовый формат и в основном содержат указания типа ''Удалить строку 10'' или ''Заменить строку 26 на такую ...''. Патчи также называются ''diff-файлами'' или просто ''диффами'', потому что они генерируются программой diff(1)Этот каталог также может содержать другие файлы, используемые для построения порта.

pkg-descr. Это более подробное, зачастую многострочное описание программы.

pkg-plist. Это список всех файлов, которые будут установлены портом. В нем также содержатся указания системе портов на удаление определенных файлов во время удаления порта.

В некоторых портах присутствуют и другие файлы, такие, как pkg-message. Система портов использует эти файлы для обработки особых ситуаций. Если вы хотите узнать более подробно об этих файлах и о портах вообще, то обратитесь к Руководству по созданию портов для FreeBSD.
В порт включаются инструкции относительно того, как выполнять построение из исходного кода, но не сам код. Вы можете получить исходный код с CD-ROM или из Интернет.

Установка портов.

Чтобы начать установку, перейдите в каталог с нужным вам портом: 
# cd /usr/ports/sysutils/lsof

Оказавшись в каталоге lsof, вы увидите структуру порта. Следующим шагом является компиляция, или построение (''build'') порта. Это выполняется простой выдачей команды make install в ответ на приглашение командного процессора. 

# make install 
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/. 
>> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
439860 bytes transferred in 18.0 seconds (23.90 kBps) 
===> Extracting for lsof-4.57 
...
[вывод команды при распаковке опущен]
... 
>> Checksum OK for lsof_4.57D.freebsd.tar.gz. 
===> Patching for lsof-4.57 
===> Applying FreeBSD patches for lsof-4.57 
===> Configuring for lsof-4.57 
...
[вывод команды процесса конфигурации опущен] 
... 
===> Building for lsof-4.57 
... 
[вывод команды компиляции опущен] 
... 
===> Installing for lsof-4.57 
... 
[вывод команды процедуры установки опущен] 
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.57
===> Registering installation for lsof-4.57
===> SECURITY NOTE: 
          This port has installed the following binaries which execute with
          increased privileges. 
#

Как только вы вернулись к приглашению вашей оболочки, вы должны суметь запустить приложение, которое только что установили. Так как lsof является программой, которая запускается с повышенными правами, выдаётся предупреждение о безопасности. Во время построения и установки портов вы должны принимать во внимание все выдаваемые предупреждения.

Удаление установленных портов.

Мы удалим порт из нашего предыдущего примера (а это была программа lsof, если вы обратили внимание). Как и при установке портов, первым делом вы должны перейти в каталог с портом, /usr/ports/sysutils/lsof. После смены каталога вы готовы к удалению lsof. Это делается командой make deinstall:

# cd /usr/ports/sysutils/lsof 
# make deinstall 
===> Deinstalling for lsof-4.57 

Это было достаточно легко. Вы удалили
lsof из вашей системы. Если вам захочется переустановить эту программу, то это можно будет сделать, выдав команду make reinstall из каталога /usr/ports/sysutils/lsof.

23 августа 2012 г.

Установка и русификация Tortoise SVN


Установка и русификация Tortoise SVN

TortoiseSVN — это бесплатный Windows-клиент с открытыми исходным кодом для системы управления версиями Apache™ Subversion®. То есть TortoiseSVN управляет файлами и директориями во времени. Файлы хранятся в центральном хранилище. Хранилище больше похоже на обычный файловый сервер, кроме того он запоминает каждое изменение когда-либо сделанное в ваших файлах и директориях. Это позволяет вам восстановить старые версии ваших файлов и проверить историю изменений — как, когда и кто изменял ваши данные. Вот почему многие думают о Subversion, и вообще о системах управления версиями, как о своего рода «машине времени».
TortoiseSVN работает под операционной системой Windows XP (c Service Pack 3) или выше, и доступен как в 32-битной, так и в 64-битной версии. Установщик для 64-битной Windows также включает 32-битную часть. Что означает что вы не должны устанавливать 32-битную версию отдельно чтобы контекстное меню и оверлей TortoiseSVN работало в 32-битных приложениях.


Где получить Tortoise SVN?


Для скачивания Tortoise SVN необходимо перейти на официальный сайт проекта расположенный по адресу http://tortoisesvn.net/downloads.html. На главной странице доступны две ссылки для  32-х и 64-х битной версии продукта (рис 1):
Рисунок 1

Нажимаем на необходимую ссылку (зависит от разрядности вашей платформы) и нас перенаправляет на сайт http://sourceforge.net (рис 2)
Рисунок 2
Дожидаемся окончания отсчета таймера (красная стрелка) и перед вами появится стандартный диалог сохранения файла. Укажите путь куда вы хотите сохранить установочный файл и нажмите ОК. Если диалог для сохранения не появился попробуйте повторить попытку выбрав другое зеркало для скачивания (синяя стрелка).
После окончания загрузки у вас на жестком диске будет лежать исполняемый файл TortoiseSVN.


Установка Tortoise SVN.


Запустите двойным щелчком исполняемый файл, который вы только что скачали. Перед вами должно появиться следующее окно (рис 3). Здесь разработчики приветствуют вас и предлагают начать установку нажав на кнопку Next. Чтож так и сделаем, жмем Next.
Рисунок 3

На следующем шаге приводится текст лицензионного соглашения, его необходимо прочитать и принять если вы желаете пользоваться программой или отклонить если оно вас не устраивает и вы хотите отменить установку (рис 4). Если все вас устраивает ставим переключатель на пункт I accept the terms in the License Agreement и нажимаем Next.
Рисунок 4

На следующем шаге (рис 5) у нас имеется возможность отключить ненужные нам компоненты. Получить описание каждого компонента можно нажав на его название и увидев справа в блоке Feature Description краткую характеристику. Выставляем нужные настройки и нажимаем Next.
Рисунок 5

На следующем шаге (рис 6) нам сообщают что все готово к установке и если вы вдруг что то забыли настроить или еще раз хотите проверить свои настройки но можете нажать Back. А для установки необходимо нажать Install, что мы и делаем.
Рисунок 6

Начинается процесс установки (рис 7).
Рисунок 7

После окончания установки вы увидите финишное окно (рис 8). Здесь разработчики говорят что установка закончена и вы можете начать пользоваться Tortoise SVN нажав на кнопку Finish. Также вы можете поддержать разработчиков нажав на кнопке Donate!.
Рисунок 8

На этом установка клиента TortoiseSVN закончена.

Русификация TortoiseSVN.


Для получения файла перевода необходимо перейти на сайт проекта http://tortoisesvn.net/downloads.html и найти раздел Language Pasks (рис 9)

Рисунок 9

Напротив русского языка находится несколько ссылок:

  1. русификатор для 32-х битной версии
  2. русификатор для 64-х битной версии
  3. руководство по TortoiseSVN в PDF формате
  4. руководство по TortoiseMerge в PDF формате


Нажимаем на ссылку русификатора удовлетворяющего нашим требованиям (должен совпадать с установленной версией TortoiseSVN) и нас опять перенаправляет на сайт http://sourceforge.net. Действия по скачиванию абсолютно идентичны описанным выше.

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

Программа установки начинает копирование файлов на наш компьютер (рис 11).
Рисунок 11

После завершения установки появится окно (рис 12) в котором необходимо нажать кнопку Готово.
Рисунок 12

Нажимаем правой кнопкой на в любом пустом месте рабочего стола и в контекстном меню выбираем TortoiseSVN->Settings (рис 13).
Рисунок 13

В настройка во вкладке General в разделе TortoiseSVN->Language выбираем русский (Россия) (рис 14). Сохраняем изменения и получаем русскую версию TortoiseSVN.
Рисунок 14

Для стабильной работы необходимо перезагрузить компьютер! Теперь все готово к работе.