Как синхронизировать OneDrive Business /Office 365 в Linux?

Microsoft OneDrive Business/Office 365 Pro предлагает облачное хранилище объемом 1 ТБ, но, к сожалению, в Linux никогда не было способа его синхронизации.

3 ответа

Ubuntu 18.04 и позже

В репозиториях Ubuntu по умолчанию в Ubuntu 18.04 и более поздних версиях есть клиент OneDrive. OneDrive - это облачная система хранения данных Microsoft. Этот пакет предоставляет клиент командной строки, специализирующийся на синхронизации с облачным хранилищем OneDrive.

Установите его с помощью:

sudo apt install onedrive

При первом запуске он просит вас пройти аутентификацию по ссылке. После аутентификации вы можете включить демона с помощью systemctl --user enable onedrive а потом systemctl --user start onedrive, Дальнейшие объяснения можно найти на странице руководства man onedrive, Он очень прост в настройке и занимает всего около пяти минут.

В настоящее время экспериментальная версия onedrive-d является программой с открытым исходным кодом, которая может синхронизировать только личные учетные записи OneDrive, поскольку она не принимает ссылки Microsoft Sharepoint. Вот метод синхронизации OneDrive Business/Office 365 с использованием GoodSync для Linux, который является бесплатным для личного использования.

  1. Установите подходящую версию на ваш компьютер Linux, например:

    ./goodsync-linux-x86_64-release.run
    

    Ответьте как за настройку GoodSync Connect, так и за веб-интерфейс GsServer.

  2. Откройте OneDrive в веб-браузере. выберите "Вернуться к классическому OneDrive" в правой нижней части.
  3. Веб-адрес в вашем браузере теперь будет выглядеть так: https://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents/Forms/All.aspx и на основе этого получить ссылку на синхронизацию, которая будет office365://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents,
  4. Создайте новый файл в подпапке.goodsync у себя дома:

    gedit ~/.goodsync/jobs.tix
    
  5. Введите следующий код в файл и сохраните его:

    <Job>
    Name = "OneDrive_Sync"
    Side1 = <SideOptions>
    Dir = <Connect>
        Url = "put_your_syncing_link_here"
        UserID = "put_your_OneDrive/Office365_Bussiness_email_here"
    </Connect>
    </SideOptions>
    Side2 = <SideOptions>
    Dir = <Connect>
        Url = "file:///your_home_folder/one_drive_folder"
    </Connect>
    </SideOptions>
    Direction = 0
    ExcludeHidden = No
    ExcludeSystem = No
    DetectMovesAndRenames = Yes
    LinksOption = 1
    ExcludeEmptyFolders = No
    LimitChangesPercent = 100
    AutoResolveConflicts = 3
    DetectMovesAndRenames = Yes
    </Job>
    
  6. Запустите процесс синхронизации:

    gsync sync "OneDrive_Sync"
    
  7. На этом этапе ваш веб-браузер откроет страницу OneDrive/Office 365 и запросит у вас авторизацию, чтобы позволить goodsync получить доступ к вашей учетной записи. После ввода ваших учетных данных начнется синхронизация.

Ограничения: Microsoft не разрешает URL-запросы длиной более 270 символов, поэтому GoodSync НЕ МОЖЕТ синхронизировать файлы с длинными путями.

Наслаждайтесь!

rclone поддерживает OneDrive для бизнеса. См. Статью " Как монтировать OneDrive в Linux с помощью Rclone (поддерживает деловые и личные учетные записи)" - блог Linux Uprising для использования.

Вот мой пример для установки нового пульта onedrive1 с rclone 1.48.0 (на Fedora 30):

$ rclone config
2019/10/10 06:35:56 NOTICE: Config file ".config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> onedrive1
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
⋮
19 / Microsoft OneDrive
   \ "onedrive"
⋮
Storage> 19      
** See help for onedrive backend at: https://rclone.org/onedrive/ **

Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id> 
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> 
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n

Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
Choose a number from below, or type in an existing value
 1 / OneDrive Personal or Business
   \ "onedrive"
 2 / Root Sharepoint site
   \ "sharepoint"
 3 / Type in driveID
   \ "driveid"
 4 / Type in SiteID
   \ "siteid"
 5 / Search a Sharepoint site
   \ "search"
Your choice> 1
Found 2 drives, please select the one you want to use:
0: OneDrive - Example Inc (business) id=b!gFLg-RRe****-T9B****
1: OneDrive - Example Inc (business) id=b!gFLg-RRe****-T-H****
Chose drive to use:> 1
Found drive 'root' of type 'business', URL: https://example-my.sharepoint.com/personal/myname_example_com/Documents
Is that okay?
y) Yes
n) No
y/n> y
Current remotes:

Name                 Type
====                 ====
onedrive1            onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

URL диска 0 заканчивается на /ElementinnerHTML и не содержит файлов в моем случае.

Затем смонтируйте его в локальном каталоге через командную строку, rclone-browser или веб-интерфейс, начиная с v1.49.

Хотя оригинал и обычно используется onedrived Инструмент от xybu по-прежнему не поддерживает OneDrive для бизнеса, а только персональный OneDrives. тем не менее, есть derk этого проекта на GitHub от derrix060, который имеет как-то работающую (но все еще ошибочную) реализацию для бизнес-клиента.

Предупреждение. При использовании этого метода я настоятельно рекомендую всегда проверять правильность синхронизации файлов, проверяя их в Интернете по адресу https://www.office.com/, и / или использовать мой скрипт-обертку, показанный в конце этой страницы. по крайней мере получать информацию о любых ошибках, используя уведомления на рабочем столе!

Иногда onedrived, похоже, не может получить некоторые изменения или загрузить их правильно, оставляя OneDrive в (частично) несинхронизированном состоянии. Также может случиться так, что он по какой-то причине генерирует конфликты слияния с самим собой и переименовывает ваши файлы локально, добавляя имя вашего хоста в скобках и, возможно, число. К сожалению, нет сообщений об ошибках, но вы можете увидеть записи в вашем лог-файле.

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

Совет. Кажется, что у библиотеки onedrived часто возникают проблемы, особенно с файлами, которые были сохранены непосредственно в корне OneDrive. Вероятно, лучше поместить все файлы в подкаталоги, а не выгружать их непосредственно в папку OneDrive.

Хотя это звучит глупо, я также заметил, что, по-видимому, меньше проблем с загрузкой файлов через веб-клиент OneDrive и ожиданием их синхронизации в локальной папке (хотя это может занять несколько минут), чем их создание или копирование / перемещение. на местном уровне. Является ли это практичным или полностью аннулирует цель OneDrive зависит от вашего собственного решения...

См. Файл readme проекта для полных инструкций по установке, но вот краткое резюме:

Монтаж

  1. Убедитесь, что у вас нет другой версии onedrived (или же onedrive-d) установлены.

  2. Установите пакеты зависимостей:

    sudo apt install build-essential python3-dev libssl-dev inotify-tools python3-dbus libdbus-1-dev libdbus-glib-1-dev
    
  3. Скачать последнюю версию ngrok клиент для Linux с официального сайта https://ngrok.com/download. ngrok-client пакет из репозиториев Ubuntu слишком старый и не соответствует требованиям.
    Распакуйте скачанное ngrok-stable-linux-amd64.zip архив. Он содержит один ngrok двоичный файл, который вы должны поместить в папку на вашем $PATHнапример, в /usr/local/bin/,
    Регистрация в ngrok, вероятно, не требуется.

  4. Установите onedrived Приложение Python3 из GitHub, использующее pip3:

    sudo -H pip3 install git+https://github.com/derrix060/onedriveClient.git
    
  5. При желании настройте местоположение файла журнала для onedrived, где вы можете проверить наличие проблем, если что-то не работает должным образом, например:

    onedrived-pref config set logfile_path ~/.config/onedrived/onedrived.log
    

Настройка учетной записи и настройка диска

После того, как установка прошла успешно, вы должны настроить свою учетную запись и диск (и):

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

    onedrived-pref account add -b
    

    Интерактивный мастер дважды попросит вас открыть ссылку в вашем браузере, где вам нужно будет авторизовать приложение с вашей учетной записью Microsoft Business.
    Он попросит вас вставить URL, на который вы перенаправлены после подтверждения авторизации, обратно в интерактивный мастер. Пожалуйста, следуйте инструкциям, которые дает команда.

  2. Убедитесь, что учетная запись была успешно добавлена, проверив вывод команды ниже. Он должен выглядеть примерно так и перечислить учетную запись, в которую вы вошли:

    $ onedrived-pref account list
    
    All OneDrive accounts associated with user "YOUR_UBUNTU_USERNAME":
    
      #  Account ID                 Owner Name     Email Address         Profile Type
    ---  -------------------------  -------------  --------------------  --------------
      0  YOUR_PERSONAL_ACCOUNT_ID   YOUR_NAME      YOUR_BUSINESS_EMAIL   Business
    
  3. Настройте ваши диски в интерактивном командном режиме, выполнив:

    onedrived-pref drive set
    

    Вы увидите список всех ваших дисков и получите запрос на ввод номера строки диска, который вы хотите добавить в локальную конфигурацию.
    Затем вам нужно указать локальный каталог, который вы хотите использовать в качестве корневой папки для синхронизации с вашим диском. Вы можете просто нажать Enter, и он будет использовать по умолчанию ~/OneDrive, Если путь не существует, он будет создан. То же самое для пути к файлу игнорирования, который вы хотите использовать, вы можете просто нажать Enter, и он будет использовать по умолчанию ~/.config/onedrived/ignore_v2.txt и создайте его, если это необходимо.

  4. Проверьте вывод команды ниже, чтобы отобразить информацию обо всех доступных и настроенных дисках. Он должен показывать только что настроенный диск с правильными настройками под заголовком Drives that have been set up:

    onedrived-pref drive list
    

Запуск демона

Теперь, когда ваш накопитель настроен, вам нужно попробовать запустить onedrived демон. Я рекомендую сначала запустить его в режиме отладки, если есть какие-либо проблемы, которые вы могли бы пропустить. Это начнется onedrived на переднем плане:

onedrived start --debug

Если все в порядке и команда не вылетает и не завершается, попробуйте поместить некоторые файлы в локальную папку OneDrive и посмотреть, синхронизируется ли она. Вероятно, вы сможете проверить это, посетив веб-приложение OneDrive по адресу https://www.office.com/ и проверив, появляются ли там файлы, добавленные вами локально.

Вы можете выйти из onedrived снова обработайте в своем терминале, нажав Ctrl+C.

Запускать onedrived обычно, в качестве фонового демона, запустите его с:

onedrived start

Вам, вероятно, следует добавить эту команду в свои автозагрузочные приложения, чтобы она автоматически запускалась при каждом входе в систему. См. Раздел Как автоматически запускать приложения при входе в систему? для этого.

Оболочка для уведомлений об ошибках

Если вы хотите получать уведомления на рабочем столе всякий раз, когда onedrived регистрирует ошибку (например, неудачная синхронизация файла), вот скрипт-обертка, который анализирует файл журнала в режиме реального времени и использует notify-send для их отображения вам.

Вы можете запустить скрипт-обертку без аргументов (или поместить его в свои автозапускаемые приложения) вместо onedrived start команда.

#!/bin/bash
LOGFILE=~/.config/onedrived/onedrived.log
ICON_START=weather-overcast
ICON_STOP=weather-few-clouds
ICON_ERROR=weather-severe-alert

onexit () {
    onedrived stop
    notify-send -i "$ICON_STOP" "OneDrive" "Wrapper stopped"
    echo "onedrived-wrapper stopped"
}

trap onexit EXIT

onedrived stop
echo "---" >> "$LOGFILE"

onedrived start || {
    echo "Failed to start onedrived!"
    exit 1
}
notify-send -i "$ICON_START" "OneDrive" "Wrapper started"

echo "Monitoring onedrived.log for error messages..."
tail -n 1 -F --pid="$(pgrep -f "onedrived start")" "$LOGFILE" |
    while read LINE ; do
        echo "$LINE"
        if MESSAGE="$(grep -Pio '(?<=ERROR: ).*' <<< "$LINE")" ; then
            notify-send -i "$ICON_ERROR" "OneDrive Error" "$MESSAGE"
        fi
    done
Другие вопросы по тегам