Pull to refresh

SVN на Маке

Lumber room
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. Преимущество такого способа в том, что процесс запускается только при обращении к соответствующему порту. Система также удаляет процесс из памяти, когда считает нужным. Что есть хорошо.

Надеюсь, эта небольшая инструкция избавит вас от множества проблем. :)
Tags:
Hubs:
Total votes 53: ↑45 and ↓8 +37
Views 3.9K
Comments Comments 67