image
Купив Мак, я озадачился установкой на него софта, который стоял до этого у меня на PC. Перенести удалось почти всё. Для чего-то нашлись маковские версии, для чего-то удалось подобрать замену. Проблемы возникли с Subversion (SVN). На PC я пользовался Visual SVN Server, который не требует практически никакой настройки и работает сразу после установки. На Маке такого удовольствия не оказалось, так что пришлось немного повозиться.

Итак, вот что я сделал:
  1. Существует несколько сборок SVN для Mac OS X. Я для себя выбрал версию от MacPorts. На то было ряд причин. Версия там предлагается последняя. Помимо SVN через MacPorts доступно множество других полезных Open Source проектов. В том числе, к примеру, MySQL, который мне тоже нужен. Загрузить MacPorts можно вот отсюда.

    Загрузив dmg файл, смонтируйте образ, если он не смонтировался автоматически. После чего запустите pkg файл, что внутри. MacPorts у��тановится на ваш компьютер.

  2. После установки желательно проверить обновления. Для этого в терминале следует ввести:

    sudo port -v selfupdate

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

  3. Загружаем SVN. Для этого в терминале вводим:

    sudo port install subversion

    Это займет некоторое время. По окончании SVN будет установлен. Все необходимые переменные будут добавлены в PATH. Протестировать установку можно набрав

    svn --version

    Должно появиться что-то типа:

    svn, version 1.5.6 (r36142)
       compiled Mar 14 2009, 20:50:37
    
    Copyright (C) 2000-2008 CollabNet.
    Subversion is open source software, see http://subversion.tigris.org/
    This product includes software developed by CollabNet (http://www.Collab.Net/).
    
    The following repository access (RA) modules are available:
    
    * ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
      - handles 'http' scheme
      - handles 'https' scheme
    * ra_svn : Module for accessing a repository using the svn network protocol.
      - with Cyrus SASL authentication
      - handles 'svn' scheme
    * ra_local : Module for accessing a repository on local disk.
      - handles 'file' scheme
    * ra_serf : Module for accessing a repository via WebDAV protocol using serf.
      - handles 'http' scheme
      - handles 'https' scheme


  4. Теперь нужно перенести ваши репозитории с PC. Для этого я создал папку Repositories в корне системного диска и скопировал туда все репозитории с PC. Если репозиториев у вас до этого не было, то их можно создать командой svnadmin create. К примеру, svnadmin create /Repositories/MyRepo. Подробно описывать процесс создания репозитория я не буду. Посмотреть можно вот тут.

  5. Запустить SVN сервер просто, для этого в терминале нужно ввести

    svnserve -d -r <путь к репозиториям>

    В нашем случае:

    svnserve -d -r /Repositories

    Эта команда запускаем демон SVN. После этого можно обращаться к репозиториям по сети. К примеру так:

    svn://svnserver/MyRepo

  6. Теперь переходим к самому интересному. Я с этим возился дольше всего. Проблема в том, что SVN сервер не запускается автоматически при старте компьютера. Поправить это можно с помощью launchd, стандартного способа автозапуска на Маке. Для этого нужно создать файл

    /Library/LaunchAgents/org.tigris.subversion.svnserve.plist (имя можно выбрать по своему усмотрению):

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>Disabled</key>
      <false/>
      <key>Label</key>
      <string>org.tigris.subversion.svnserve</string>
      <key>ProgramArguments</key>
      <array>
          <string>/opt/local/bin/svnserve</string>
          <string>--inetd</string>
          <string>--root=/repositories</string>
      </array>
      <key>ServiceDescription</key>
      <string>Subversion Standalone Server</string>
      <key>Sockets</key>
      <dict>
        <key>Listeners</key>
        <array>
          <dict>
            <key>SockFamily</key>
            <string>IPv4</string>
            <key>SockServiceName</key>
            <string>svn</string>
            <key>SockType</key>
            <string>stream</string>
          </dict>
          <dict>
            <key>SockFamily</key>
            <string>IPv6</string>
            <key>SockServiceName</key>
            <string>svn</string>
            <key>SockType</key>
            <string>stream</string>
          </dict>
        </array>
      </dict>
      <key>inetdCompatibility</key>
      <dict>
        <key>Wait</key>
        <false/>
      </dict>
    </dict>
    </plist>

    Важно указать полный путь к svnserve. В моём случае это /opt/local/bin/svnserve. Без этого работать всё будет криво. Если вам не нужна конфигурация IPv6, то соответствующий dict блок можно удалить.

    После чего в терминале вводятся следующие команды для активации конфигурации:

    launchctl
    load org.tigris.subversion.svnserve.plist (если вы выбрали другое имя, то введите своё)
    start org.tigris.subversion.svnserve
    <ctrl-D> выход в терминал

Ну вот и всё. После этого у меня всё заработало. Этот способ автостарта не запускает демон, а использует inetd. Преимущество такого способа в том, что процесс запускается только при обращении к соответствующему порту. Система также удаляет процесс из памяти, когда считает нужным. Что есть хорошо.

Надеюсь, эта небольшая инструкция избавит вас от множества проблем. :)