From 58598f8076b4f0bb4b939a2d1ffea68938bee1e0 Mon Sep 17 00:00:00 2001 From: abraunegg Date: Tue, 9 Jan 2024 09:23:48 +1100 Subject: [PATCH] Delete documents again as POSIX rename failure * Delete documents again as POSIX rename failure --- docs/Docker.md | 397 ---------- docs/INSTALL.md | 282 -------- docs/Podman.md | 361 ---------- docs/USAGE.md | 943 ------------------------ docs/advanced-usage.md | 302 -------- docs/application-config-options.md | 1075 ---------------------------- docs/application-security.md | 97 --- docs/build-rpm-howto.md | 379 ---------- docs/business-shared-folders.md | 40 -- docs/known-issues.md | 60 -- docs/national-cloud-deployments.md | 145 ---- docs/privacy-policy.md | 65 -- docs/sharepoint-libraries.md | 228 ------ docs/terms-of-service.md | 54 -- docs/ubuntu-package-install.md | 420 ----------- 15 files changed, 4848 deletions(-) delete mode 100644 docs/Docker.md delete mode 100644 docs/INSTALL.md delete mode 100644 docs/Podman.md delete mode 100644 docs/USAGE.md delete mode 100644 docs/advanced-usage.md delete mode 100644 docs/application-config-options.md delete mode 100644 docs/application-security.md delete mode 100644 docs/build-rpm-howto.md delete mode 100644 docs/business-shared-folders.md delete mode 100644 docs/known-issues.md delete mode 100644 docs/national-cloud-deployments.md delete mode 100644 docs/privacy-policy.md delete mode 100644 docs/sharepoint-libraries.md delete mode 100644 docs/terms-of-service.md delete mode 100644 docs/ubuntu-package-install.md diff --git a/docs/Docker.md b/docs/Docker.md deleted file mode 100644 index 1bf6251f..00000000 --- a/docs/Docker.md +++ /dev/null @@ -1,397 +0,0 @@ -# Run the OneDrive Client for Linux under Docker -This client can be run as a Docker container, with 3 available container base options for you to choose from: - -| Container Base | Docker Tag | Description | i686 | x86_64 | ARMHF | AARCH64 | -|----------------|-------------|----------------------------------------------------------------|:------:|:------:|:-----:|:-------:| -| Alpine Linux | edge-alpine | Docker container based on Alpine 3.18 using 'master' |❌|✔|❌|✔| -| Alpine Linux | alpine | Docker container based on Alpine 3.18 using latest release |❌|✔|❌|✔| -| Debian | debian | Docker container based on Debian Stable using latest release |✔|✔|✔|✔| -| Debian | edge | Docker container based on Debian Stable using 'master' |✔|✔|✔|✔| -| Debian | edge-debian | Docker container based on Debian Stable using 'master' |✔|✔|✔|✔| -| Debian | latest | Docker container based on Debian Stable using latest release |✔|✔|✔|✔| -| Fedora | edge-fedora | Docker container based on Fedora 38 using 'master' |❌|✔|❌|✔| -| Fedora | fedora | Docker container based on Fedora 38 using latest release |❌|✔|❌|✔| - -These containers offer a simple monitoring-mode service for the OneDrive Client for Linux. - -The instructions below have been validated on: -* Fedora 38 - -The instructions below will utilise the 'edge' tag, however this can be substituted for any of the other docker tags such as 'latest' from the table above if desired. - -The 'edge' Docker Container will align closer to all documentation and features, where as 'latest' is the release version from a static point in time. The 'latest' tag however may contain bugs and/or issues that will have been fixed, and those fixes are contained in 'edge'. - -Additionally there are specific version release tags for each release. Refer to https://hub.docker.com/r/driveone/onedrive/tags for any other Docker tags you may be interested in. - -**Note:** The below instructions for docker has been tested and validated when logging into the system as an unprivileged user (non 'root' user). - -## High Level Configuration Steps -1. Install 'docker' as per your distribution platform's instructions if not already installed. -2. Configure 'docker' to allow non-privileged users to run Docker commands -3. Disable 'SELinux' as per your distribution platform's instructions -4. Test 'docker' by running a test container without using `sudo` -5. Prepare the required docker volumes to store the configuration and data -6. Run the 'onedrive' container and perform authorisation -7. Running the 'onedrive' container under 'docker' - -## Configuration Steps - -### 1. Install 'docker' on your platform -Install 'docker' as per your distribution platform's instructions if not already installed. - -### 2. Configure 'docker' to allow non-privileged users to run Docker commands -Read https://docs.docker.com/engine/install/linux-postinstall/ to configure the 'docker' user group with your user account to allow your non 'root' user to run 'docker' commands. - -### 3. Disable SELinux on your platform -In order to run the Docker container, SELinux must be disabled. Without doing this, when the application is authenticated in the steps below, the following error will be presented: -```text -ERROR: The local file system returned an error with the following message: - Error Message: /onedrive/conf/refresh_token: Permission denied - -The database cannot be opened. Please check the permissions of ~/.config/onedrive/items.sqlite3 -``` -The only known work-around for the above problem at present is to disable SELinux. Please refer to your distribution platform's instructions on how to perform this step. - -* Fedora: https://docs.fedoraproject.org/en-US/quick-docs/selinux-changing-states-and-modes/#_disabling_selinux -* Red Hat Enterprise Linux: https://access.redhat.com/solutions/3176 - -Post disabling SELinux and reboot your system, confirm that `getenforce` returns `Disabled`: -```text -$ getenforce -Disabled -``` - -If you are still experiencing permission issues despite disabling SELinux, please read https://www.redhat.com/sysadmin/container-permission-denied-errors - -### 4. Test 'docker' on your platform -Ensure that 'docker' is running as a system service, and is enabled to be activated on system reboot: -```bash -sudo systemctl enable --now docker -``` - -Test that 'docker' is operational for your 'non-root' user, as per below: -```bash -[alex@fedora-38-docker-host ~]$ docker run hello-world -Unable to find image 'hello-world:latest' locally -latest: Pulling from library/hello-world -719385e32844: Pull complete -Digest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d -Status: Downloaded newer image for hello-world:latest - -Hello from Docker! -This message shows that your installation appears to be working correctly. - -To generate this message, Docker took the following steps: - 1. The Docker client contacted the Docker daemon. - 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. - (amd64) - 3. The Docker daemon created a new container from that image which runs the - executable that produces the output you are currently reading. - 4. The Docker daemon streamed that output to the Docker client, which sent it - to your terminal. - -To try something more ambitious, you can run an Ubuntu container with: - $ docker run -it ubuntu bash - -Share images, automate workflows, and more with a free Docker ID: - https://hub.docker.com/ - -For more examples and ideas, visit: - https://docs.docker.com/get-started/ - -[alex@fedora-38-docker-host ~]$ -``` - -### 5. Configure the required docker volumes -The 'onedrive' Docker container requires 2 docker volumes to operate: -* Config Volume -* Data Volume - -The first volume is the configuration volume that stores all the applicable application configuration + current runtime state. In a non-containerised environment, this normally resides in `~/.config/onedrive` - in a containerised environment this is stored in the volume tagged as `/onedrive/conf` - -The second volume is the data volume, where all your data from Microsoft OneDrive is stored locally. This volume is mapped to an actual directory point on your local filesystem and this is stored in the volume tagged as `/onedrive/data` - -#### 5.1 Prepare the 'config' volume -Create the 'config' volume with the following command: -```bash -docker volume create onedrive_conf -``` - -This will create a docker volume labeled `onedrive_conf`, where all configuration of your onedrive account will be stored. You can add a custom config file in this location at a later point in time if required. - -#### 5.2 Prepare the 'data' volume -Create the 'data' volume with the following command: -```bash -docker volume create onedrive_data -``` - -This will create a docker volume labeled `onedrive_data` and will map to a path on your local filesystem. This is where your data from Microsoft OneDrive will be stored. Keep in mind that: - -* The owner of this specified folder must not be root -* The owner of this specified folder must have permissions for its parent directory -* Docker will attempt to change the permissions of the volume to the user the container is configured to run as - -**NOTE:** Issues occur when this target folder is a mounted folder of an external system (NAS, SMB mount, USB Drive etc) as the 'mount' itself is owed by 'root'. If this is your use case, you *must* ensure your normal user can mount your desired target without having the target mounted by 'root'. If you do not fix this, your Docker container will fail to start with the following error message: -```bash -ROOT level privileges prohibited! -``` - -### 6. First run of Docker container under docker and performing authorisation -The 'onedrive' client within the container first needs to be authorised with your Microsoft account. This is achieved by initially running docker in interactive mode. - -Run the docker image with the commands below and make sure to change the value of `ONEDRIVE_DATA_DIR` to the actual onedrive data directory on your filesystem that you wish to use (e.g. `export ONEDRIVE_DATA_DIR="/home/abraunegg/OneDrive"`). - -**Important:** The 'target' folder of `ONEDRIVE_DATA_DIR` must exist before running the docker container. The script below will create 'ONEDRIVE_DATA_DIR' so that it exists locally for the docker volume mapping to occur. - -It is also a requirement that the container be run using a non-root uid and gid, you must insert a non-root UID and GID (e.g.` export ONEDRIVE_UID=1000` and export `ONEDRIVE_GID=1000`). The script below will use `id` to evaluate your system environment to use the correct values. -```bash -export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" -export ONEDRIVE_UID=`id -u` -export ONEDRIVE_GID=`id -g` -mkdir -p ${ONEDRIVE_DATA_DIR} -docker run -it --name onedrive -v onedrive_conf:/onedrive/conf \ - -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" \ - -e "ONEDRIVE_UID=${ONEDRIVE_UID}" \ - -e "ONEDRIVE_GID=${ONEDRIVE_GID}" \ - driveone/onedrive:edge -``` - -When the Docker container successfully starts: -* You will be asked to open a specific link using your web browser -* Login to your Microsoft Account and give the application the permission -* After giving the permission, you will be redirected to a blank page -* Copy the URI of the blank page into the application prompt to authorise the application - -Once the 'onedrive' application is authorised, the client will automatically start monitoring your `ONEDRIVE_DATA_DIR` for data changes to be uploaded to OneDrive. Files stored on OneDrive will be downloaded to this location. - -If the client is working as expected, you can detach from the container with Ctrl+p, Ctrl+q. - -### 7. Running the 'onedrive' container under 'docker' - -#### 7.1 Check if the monitor service is running -```bash -docker ps -f name=onedrive -``` - -#### 7.2 Show 'onedrive' runtime logs -```bash -docker logs onedrive -``` - -#### 7.3 Stop running 'onedrive' container -```bash -docker stop onedrive -``` - -#### 7.4 Start 'onedrive' container -```bash -docker start onedrive -``` - -#### 7.5 Remove 'onedrive' container -```bash -docker rm -f onedrive -``` - -## Advanced Usage - -### How to use Docker-compose -You can utilise `docker-compose` if available on your platform if you are able to use docker compose schemas > 3. - -In the following example it is assumed you have a `ONEDRIVE_DATA_DIR` environment variable and have already created the `onedrive_conf` volume. - -You can also use docker bind mounts for the configuration folder, e.g. `export ONEDRIVE_CONF="${HOME}/OneDriveConfig"`. - -``` -version: "3" -services: - onedrive: - image: driveone/onedrive:edge - restart: unless-stopped - environment: - - ONEDRIVE_UID=${PUID} - - ONEDRIVE_GID=${PGID} - volumes: - - onedrive_conf:/onedrive/conf - - ${ONEDRIVE_DATA_DIR}:/onedrive/data -``` - -Note that you still have to perform step 3: First Run. - -### Editing the running configuration and using a 'config' file -The 'onedrive' client should run in default configuration, however you can change this default configuration by placing a custom config file in the `onedrive_conf` docker volume. First download the default config from [here](https://raw.githubusercontent.com/abraunegg/onedrive/master/config) -Then put it into your onedrive_conf volume path, which can be found with: - -```bash -docker volume inspect onedrive_conf -``` - -Or you can map your own config folder to the config volume. Make sure to copy all files from the docker volume into your mapped folder first. - -The detailed document for the config can be found here: [Configuration](https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#configuration) - -### Syncing multiple accounts -There are many ways to do this, the easiest is probably to do the following: -1. Create a second docker config volume (replace `Work` with your desired name): `docker volume create onedrive_conf_Work` -2. And start a second docker monitor container (again replace `Work` with your desired name): -``` -export ONEDRIVE_DATA_DIR_WORK="/home/abraunegg/OneDriveWork" -mkdir -p ${ONEDRIVE_DATA_DIR_WORK} -docker run -it --restart unless-stopped --name onedrive_Work -v onedrive_conf_Work:/onedrive/conf -v "${ONEDRIVE_DATA_DIR_WORK}:/onedrive/data" driveone/onedrive:edge -``` - -### Run or update the Docker container with one script -If you are experienced with docker and onedrive, you can use the following script: - -```bash -# Update ONEDRIVE_DATA_DIR with correct OneDrive directory path -ONEDRIVE_DATA_DIR="${HOME}/OneDrive" -# Create directory if non-existant -mkdir -p ${ONEDRIVE_DATA_DIR} - -firstRun='-d' -docker pull driveone/onedrive:edge -docker inspect onedrive_conf > /dev/null 2>&1 || { docker volume create onedrive_conf; firstRun='-it'; } -docker inspect onedrive > /dev/null 2>&1 && docker rm -f onedrive -docker run $firstRun --restart unless-stopped --name onedrive -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge -``` - -## Supported Docker Environment Variables -| Variable | Purpose | Sample Value | -| ---------------- | --------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------:| -| ONEDRIVE_UID | UserID (UID) to run as | 1000 | -| ONEDRIVE_GID | GroupID (GID) to run as | 1000 | -| ONEDRIVE_VERBOSE | Controls "--verbose" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_DEBUG | Controls "--verbose --verbose" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_DEBUG_HTTPS | Controls "--debug-https" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_RESYNC | Controls "--resync" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_DOWNLOADONLY | Controls "--download-only" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_UPLOADONLY | Controls "--upload-only" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_NOREMOTEDELETE | Controls "--no-remote-delete" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_LOGOUT | Controls "--logout" switch. Default is 0 | 1 | -| ONEDRIVE_REAUTH | Controls "--reauth" switch. Default is 0 | 1 | -| ONEDRIVE_AUTHFILES | Controls "--auth-files" option. Default is "" | "authUrl:responseUrl" | -| ONEDRIVE_AUTHRESPONSE | Controls "--auth-response" option. Default is "" | See [here](https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#authorize-the-application-with-your-onedrive-account) | -| ONEDRIVE_DISPLAY_CONFIG | Controls "--display-running-config" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_SINGLE_DIRECTORY | Controls "--single-directory" option. Default = "" | "mydir" | -| ONEDRIVE_DRYRUN | Controls "--dry-run" option. Default is 0 | 1 | - -### Environment Variables Usage Examples -**Verbose Output:** -```bash -docker container run -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge -``` -**Debug Output:** -```bash -docker container run -e ONEDRIVE_DEBUG=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge -``` -**Perform a --resync:** -```bash -docker container run -e ONEDRIVE_RESYNC=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge -``` -**Perform a --resync and --verbose:** -```bash -docker container run -e ONEDRIVE_RESYNC=1 -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge -``` -**Perform a --logout and re-authenticate:** -```bash -docker container run -it -e ONEDRIVE_LOGOUT=1 -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" driveone/onedrive:edge -``` - -## Building a custom Docker image - -### Build Environment Requirements -* Build environment must have at least 1GB of memory & 2GB swap space - -You can validate your build environment memory status with the following command: -```text -cat /proc/meminfo | grep -E 'MemFree|Swap' -``` -This should result in the following similar output: -```text -MemFree: 3704644 kB -SwapCached: 0 kB -SwapTotal: 8117244 kB -SwapFree: 8117244 kB -``` - -If you do not have enough swap space, you can use the following script to dynamically allocate a swapfile for building the Docker container: - -```bash -cd /var -sudo fallocate -l 1.5G swapfile -sudo chmod 600 swapfile -sudo mkswap swapfile -sudo swapon swapfile -# make swap permanent -sudo nano /etc/fstab -# add "/swapfile swap swap defaults 0 0" at the end of file -# check it has been assigned -swapon -s -free -h -``` - -If you are running a Raspberry Pi, you will need to edit your system configuration to increase your swapfile: - -* Modify the file `/etc/dphys-swapfile` and edit the `CONF_SWAPSIZE`, for example: `CONF_SWAPSIZE=2048`. - -A reboot of your Raspberry Pi is required to make this change effective. - -### Building and running a custom Docker image -You can also build your own image instead of pulling the one from [hub.docker.com](https://hub.docker.com/r/driveone/onedrive): -```bash -git clone https://github.com/abraunegg/onedrive -cd onedrive -docker build . -t local-onedrive -f contrib/docker/Dockerfile -docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive:latest -``` - -There are alternate, smaller images available by using `Dockerfile-debian` or `Dockerfile-alpine`. These [multi-stage builder pattern](https://docs.docker.com/develop/develop-images/multistage-build/) Dockerfiles require Docker version at least 17.05. - -### How to build and run a custom Docker image based on Debian -``` bash -docker build . -t local-ondrive-debian -f contrib/docker/Dockerfile-debian -docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-ondrive-debian:latest -``` - -### How to build and run a custom Docker image based on Alpine Linux -``` bash -docker build . -t local-ondrive-alpine -f contrib/docker/Dockerfile-alpine -docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-ondrive-alpine:latest -``` - -### How to build and run a custom Docker image for ARMHF (Raspberry Pi) -Compatible with: -* Raspberry Pi -* Raspberry Pi 2 -* Raspberry Pi Zero -* Raspberry Pi 3 -* Raspberry Pi 4 -``` bash -docker build . -t local-onedrive-armhf -f contrib/docker/Dockerfile-debian -docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-armhf:latest -``` - -### How to build and run a custom Docker image for AARCH64 Platforms -``` bash -docker build . -t local-onedrive-aarch64 -f contrib/docker/Dockerfile-debian -docker container run -v onedrive_conf:/onedrive/conf -v "${ONEDRIVE_DATA_DIR}:/onedrive/data" local-onedrive-aarch64:latest -``` -### How to support double-byte languages -In some geographic regions, you may need to change and/or update the locale specification of the Docker container to better support the local language used for your local filesystem. To do this, follow the example below: -``` -FROM driveone/onedrive - -ENV DEBIAN_FRONTEND noninteractive - -RUN apt-get update -RUN apt-get install -y locales - -RUN echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \ - locale-gen ja_JP.UTF-8 && \ - dpkg-reconfigure locales && \ - /usr/sbin/update-locale LANG=ja_JP.UTF-8 - -ENV LC_ALL ja_JP.UTF-8 -``` -The above example changes the Docker container to support Japanese. To support your local language, change `ja_JP.UTF-8` to the required entry. \ No newline at end of file diff --git a/docs/INSTALL.md b/docs/INSTALL.md deleted file mode 100644 index f5338122..00000000 --- a/docs/INSTALL.md +++ /dev/null @@ -1,282 +0,0 @@ -# Installing or Upgrading using Distribution Packages or Building the OneDrive Client for Linux from source - -## Installing or Upgrading using Distribution Packages -This project has been packaged for the following Linux distributions as per below. The current client release is: [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) - -Only the current release version or greater is supported. Earlier versions are not supported and should not be installed or used. - -#### Important Note: -Distribution packages may be of an older release when compared to the latest release that is [available](https://github.com/abraunegg/onedrive/releases). If any package version indicator below is 'red' for your distribution, it is recommended that you build from source. Do not install the software from the available distribution package. If a package is out of date, please contact the package maintainer for resolution. - -| Distribution | Package Name & Package Link |   PKG_Version   |  i686  | x86_64 | ARMHF | AARCH64 | Extra Details | -|---------------------------------|------------------------------------------------------------------------------|:---------------:|:----:|:------:|:-----:|:-------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Alpine Linux | [onedrive](https://pkgs.alpinelinux.org/packages?name=onedrive&branch=edge) |Alpine Linux Edge package|❌|✔|❌|✔ | | -| Arch Linux

Manjaro Linux | [onedrive-abraunegg](https://aur.archlinux.org/packages/onedrive-abraunegg/) |AUR package|✔|✔|✔|✔ | Install via: `pamac build onedrive-abraunegg` from the Arch Linux User Repository (AUR)

**Note:** You must first install 'base-devel' as this is a pre-requisite for using the AUR

**Note:** If asked regarding a provider for 'd-runtime' and 'd-compiler', select 'liblphobos' and 'ldc'

**Note:** System must have at least 1GB of memory & 1GB swap space -| Debian 11 | [onedrive](https://packages.debian.org/bullseye/source/onedrive) |Debian 11 package|✔|✔|✔|✔| **Note:** Do not install from Debian Package Repositories

It is recommended that for Debian 11 that you install from OpenSuSE Build Service using the Debian Package Install [Instructions](ubuntu-package-install.md) | -| Debian 12 | [onedrive](https://packages.debian.org/bookworm/source/onedrive) |Debian 12 package|✔|✔|✔|✔| **Note:** Do not install from Debian Package Repositories

It is recommended that for Debian 12 that you install from OpenSuSE Build Service using the Debian Package Install [Instructions](ubuntu-package-install.md) | -| Debian Sid | [onedrive](https://packages.debian.org/sid/onedrive) |Debian Sid package|✔|✔|✔|✔| | -| Fedora | [onedrive](https://koji.fedoraproject.org/koji/packageinfo?packageID=26044) |Fedora Rawhide package|✔|✔|✔|✔| | -| Gentoo | [onedrive](https://gpo.zugaina.org/net-misc/onedrive) | No API Available |✔|✔|❌|❌| | -| Homebrew | [onedrive](https://formulae.brew.sh/formula/onedrive) | Homebrew package |❌|✔|❌|❌| | -| Linux Mint 20.x | [onedrive](https://community.linuxmint.com/software/view/onedrive) |Ubuntu 20.04 package |❌|✔|✔|✔| **Note:** Do not install from Linux Mint Repositories

It is recommended that for Linux Mint that you install from OpenSuSE Build Service using the Ubuntu Package Install [Instructions](ubuntu-package-install.md) | -| Linux Mint 21.x | [onedrive](https://community.linuxmint.com/software/view/onedrive) |Ubuntu 22.04 package |❌|✔|✔|✔| **Note:** Do not install from Linux Mint Repositories

It is recommended that for Linux Mint that you install from OpenSuSE Build Service using the Ubuntu Package Install [Instructions](ubuntu-package-install.md) | -| NixOS | [onedrive](https://search.nixos.org/packages?channel=20.09&from=0&size=50&sort=relevance&query=onedrive)|nixpkgs unstable package|❌|✔|❌|❌| Use package `onedrive` either by adding it to `configuration.nix` or by using the command `nix-env -iA .onedrive`. This does not install a service. To install a service, use unstable channel (will stabilize in 20.09) and add `services.onedrive.enable=true` in `configuration.nix`. You can also add a custom package using the `services.onedrive.package` option (recommended since package lags upstream). Enabling the service installs a default package too (based on the channel). You can also add multiple onedrive accounts trivially, see [documentation](https://github.com/NixOS/nixpkgs/pull/77734#issuecomment-575874225). | -| OpenSuSE | [onedrive](https://software.opensuse.org/package/onedrive) |openSUSE Tumbleweed package|✔|✔|❌|❌| | -| OpenSuSE Build Service | [onedrive](https://build.opensuse.org/package/show/home:npreining:debian-ubuntu-onedrive/onedrive) | No API Available |✔|✔|✔|✔| Package Build Service for Debian and Ubuntu | -| Raspbian | [onedrive](https://archive.raspbian.org/raspbian/pool/main/o/onedrive/) |Raspbian Stable package |❌|❌|✔|✔| **Note:** Do not install from Raspbian Package Repositories

It is recommended that for Raspbian that you install from OpenSuSE Build Service using the Debian Package Install [Instructions](ubuntu-package-install.md) | -| Slackware | [onedrive](https://slackbuilds.org/result/?search=onedrive&sv=) |SlackBuilds package|✔|✔|❌|❌| | -| Solus | [onedrive](https://dev.getsol.us/search/query/FB7PIf1jG9Z9/#R) |Solus package|✔|✔|❌|❌| | -| Ubuntu 20.04 | [onedrive](https://packages.ubuntu.com/focal/onedrive) |Ubuntu 20.04 package |❌|✔|✔|✔| **Note:** Do not install from Ubuntu Universe

It is recommended that for Ubuntu that you install from OpenSuSE Build Service using the Ubuntu Package Install [Instructions](ubuntu-package-install.md) | -| Ubuntu 22.04 | [onedrive](https://packages.ubuntu.com/jammy/onedrive) |Ubuntu 22.04 package |❌|✔|✔|✔| **Note:** Do not install from Ubuntu Universe

It is recommended that for Ubuntu that you install from OpenSuSE Build Service using the Ubuntu Package Install [Instructions](ubuntu-package-install.md) | -| Ubuntu 23.04 | [onedrive](https://packages.ubuntu.com/lunar/onedrive) |Ubuntu 23.04 package |❌|✔|✔|✔| **Note:** Do not install from Ubuntu Universe

It is recommended that for Ubuntu that you install from OpenSuSE Build Service using the Ubuntu Package Install [Instructions](ubuntu-package-install.md) | -| Void Linux | [onedrive](https://voidlinux.org/packages/?arch=x86_64&q=onedrive) |Void Linux x86_64 package|✔|✔|❌|❌| | - -#### Important information for all Ubuntu and Ubuntu based distribution users: -This information is specifically for the following platforms and distributions: -* Ubuntu -* Lubuntu -* Linux Mint -* POP OS -* Peppermint OS - -Whilst there are [onedrive](https://packages.ubuntu.com/search?keywords=onedrive&searchon=names&suite=all§ion=all) Universe packages available for Ubuntu, do not install 'onedrive' from these Universe packages. The default Universe packages are out-of-date and are not supported and should not be used. If you wish to use a package, it is highly recommended that you utilise the [OpenSuSE Build Service](ubuntu-package-install.md) to install packages for these platforms. If the OpenSuSE Build Service does not cater for your version, your only option is to build from source. - -If you wish to change this situation so that you can just use the Universe packages via 'apt install onedrive', consider becoming the Ubuntu package maintainer and contribute back to your community. - -## Building from Source - High Level Requirements -* Build environment must have at least 1GB of memory & 1GB swap space -* Install the required distribution package dependencies -* [libcurl](http://curl.haxx.se/libcurl/) -* [SQLite 3](https://www.sqlite.org/) >= 3.7.15 -* [Digital Mars D Compiler (DMD)](http://dlang.org/download.html) or [LDC – the LLVM-based D Compiler](https://github.com/ldc-developers/ldc) - -**Note:** DMD version >= 2.088.0 or LDC version >= 1.18.0 is required to compile this application - -### Example for installing DMD Compiler -```text -curl -fsS https://dlang.org/install.sh | bash -s dmd -``` - -### Example for installing LDC Compiler -```text -curl -fsS https://dlang.org/install.sh | bash -s ldc -``` - -## Distribution Package Dependencies -### Dependencies: Ubuntu 16.x -Ubuntu Linux 16.x LTS reached the end of its five-year LTS window on April 30th 2021 and is no longer supported. - -### Dependencies: Ubuntu 18.x / Lubuntu 18.x -Ubuntu Linux 18.x LTS reached the end of its five-year LTS window on May 31th 2023 and is no longer supported. - -### Dependencies: Debian 9 -Debian 9 reached the end of its five-year support window on June 30th 2022 and is no longer supported. - -### Dependencies: Ubuntu 20.x -> Ubuntu 23.x / Debian 10 -> Debian 12 - x86_64 -These dependencies are also applicable for all Ubuntu based distributions such as: -* Lubuntu -* Linux Mint -* POP OS -* Peppermint OS -```text -sudo apt install build-essential -sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl -curl -fsS https://dlang.org/install.sh | bash -s dmd -``` -For notifications the following is also necessary: -```text -sudo apt install libnotify-dev -``` - -### Dependencies: CentOS 6.x / RHEL 6.x -CentOS 6.x and RHEL 6.x reached End of Life status on November 30th 2020 and is no longer supported. - -### Dependencies: Fedora < Version 18 / CentOS 7.x / RHEL 7.x -```text -sudo yum groupinstall 'Development Tools' -sudo yum install libcurl-devel sqlite-devel -curl -fsS https://dlang.org/install.sh | bash -s dmd-2.099.0 -``` -For notifications the following is also necessary: -```text -sudo yum install libnotify-devel -``` - -### Dependencies: Fedora > Version 18 / CentOS 8.x / RHEL 8.x / RHEL 9.x -```text -sudo dnf groupinstall 'Development Tools' -sudo dnf install libcurl-devel sqlite-devel -curl -fsS https://dlang.org/install.sh | bash -s dmd -``` -For notifications the following is also necessary: -```text -sudo dnf install libnotify-devel -``` - -### Dependencies: Arch Linux & Manjaro Linux -```text -sudo pacman -S make pkg-config curl sqlite ldc -``` -For notifications the following is also necessary: -```text -sudo pacman -S libnotify -``` - -### Dependencies: Raspbian (ARMHF) and Ubuntu 22.x / Debian 11 / Debian 12 / Raspbian (ARM64) -**Note:** The minimum LDC compiler version required to compile this application is now 1.18.0, which is not available for Debian Buster or distributions based on Debian Buster. You are advised to first upgrade your platform distribution to one that is based on Debian Bullseye (Debian 11) or later. - -These instructions were validated using: -* `Linux raspberrypi 5.10.92-v8+ #1514 SMP PREEMPT Mon Jan 17 17:39:38 GMT 2022 aarch64` (2022-01-28-raspios-bullseye-armhf-lite) using Raspberry Pi 3B (revision 1.2) -* `Linux raspberrypi 5.10.92-v8+ #1514 SMP PREEMPT Mon Jan 17 17:39:38 GMT 2022 aarch64` (2022-01-28-raspios-bullseye-arm64-lite) using Raspberry Pi 3B (revision 1.2) -* `Linux ubuntu 5.15.0-1005-raspi #5-Ubuntu SMP PREEMPT Mon Apr 4 12:21:48 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux` (ubuntu-22.04-preinstalled-server-arm64+raspi) using Raspberry Pi 3B (revision 1.2) - -**Note:** Build environment must have at least 1GB of memory & 1GB swap space. Check with `swapon`. - -```text -sudo apt install build-essential -sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl ldc -``` -For notifications the following is also necessary: -```text -sudo apt install libnotify-dev -``` - -### Dependencies: Gentoo -```text -sudo emerge app-portage/layman -sudo layman -a dlang -``` -Add ebuild from contrib/gentoo to a local overlay to use. - -For notifications the following is also necessary: -```text -sudo emerge x11-libs/libnotify -``` - -### Dependencies: OpenSuSE Leap 15.0 -```text -sudo zypper addrepo https://download.opensuse.org/repositories/devel:languages:D/openSUSE_Leap_15.0/devel:languages:D.repo -sudo zypper refresh -sudo zypper install gcc git libcurl-devel sqlite3-devel dmd phobos-devel phobos-devel-static -``` -For notifications the following is also necessary: -```text -sudo zypper install libnotify-devel -``` - -### Dependencies: OpenSuSE Leap 15.1 -```text -sudo zypper addrepo https://download.opensuse.org/repositories/devel:languages:D/openSUSE_Leap_15.1/devel:languages:D.repo -sudo zypper refresh -sudo zypper install gcc git libcurl-devel sqlite3-devel dmd phobos-devel phobos-devel-static -``` -For notifications the following is also necessary: -```text -sudo zypper install libnotify-devel -``` - -### Dependencies: OpenSuSE Leap 15.2 -```text -sudo zypper refresh -sudo zypper install gcc git libcurl-devel sqlite3-devel dmd phobos-devel phobos-devel-static -``` -For notifications the following is also necessary: -```text -sudo zypper install libnotify-devel -``` - -## Compilation & Installation -### High Level Steps -1. Install the platform dependencies for your Linux OS -2. Activate your DMD or LDC compiler -3. Clone the GitHub repository, run configure and make, then install -4. Deactivate your DMD or LDC compiler - -### Building using DMD Reference Compiler -Before cloning and compiling, if you have installed DMD via curl for your OS, you will need to activate DMD as per example below: -```text -Run `source ~/dlang/dmd-2.088.0/activate` in your shell to use dmd-2.088.0. -This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1. -Run `deactivate` later on to restore your environment. -``` -Without performing this step, the compilation process will fail. - -**Note:** Depending on your DMD version, substitute `2.088.0` above with your DMD version that is installed. - -```text -git clone https://github.com/abraunegg/onedrive.git -cd onedrive -./configure -make clean; make; -sudo make install -``` - -### Build options -#### GUI Notification Support -GUI notification support can be enabled using the `configure` switch `--enable-notifications`. - -#### systemd service directory customisation support -Systemd service files are installed in the appropriate directories on the system, -as provided by `pkg-config systemd` settings. If the need for overriding the -deduced path are necessary, the two options `--with-systemdsystemunitdir` (for -the Systemd system unit location), and `--with-systemduserunitdir` (for the -Systemd user unit location) can be specified. Passing in `no` to one of these -options disabled service file installation. - -#### Additional Compiler Debug -By passing `--enable-debug` to the `configure` call, `onedrive` gets built with additional debug -information, useful (for example) to get `perf`-issued figures. - -#### Shell Completion Support -By passing `--enable-completions` to the `configure` call, shell completion functions are -installed for `bash`, `zsh` and `fish`. The installation directories are determined -as far as possible automatically, but can be overridden by passing -`--with-bash-completion-dir=`, `--with-zsh-completion-dir=`, and -`--with-fish-completion-dir=` to `configure`. - -### Building using a different compiler (for example [LDC](https://wiki.dlang.org/LDC)) -#### ARMHF Architecture (Raspbian) and ARM64 Architecture (Ubuntu 22.x / Debian 11 / Raspbian) -**Note:** The minimum LDC compiler version required to compile this application is now 1.18.0, which is not available for Debian Buster or distributions based on Debian Buster. You are advised to first upgrade your platform distribution to one that is based on Debian Bullseye (Debian 11) or later. - -**Note:** Build environment must have at least 1GB of memory & 1GB swap space. Check with `swapon`. -```text -git clone https://github.com/abraunegg/onedrive.git -cd onedrive -./configure DC=/usr/bin/ldmd2 -make clean; make -sudo make install -``` - -## Upgrading the client -If you have installed the client from a distribution package, the client will be updated when the distribution package is updated by the package maintainer and will be updated to the new application version when you perform your package update. - -If you have built the client from source, to upgrade your client, it is recommended that you first uninstall your existing 'onedrive' binary (see below), then re-install the client by re-cloning, re-compiling and re-installing the client again to install the new version. - -**Note:** Following the uninstall process will remove all client components including *all* systemd files, including any custom files created for specific access such as SharePoint Libraries. - -You can optionally choose to not perform this uninstallation step, and simply re-install the client by re-cloning, re-compiling and re-installing the client again - however the risk here is that you end up with two onedrive client binaries on your system, and depending on your system search path preferences, this will determine which binary is used. - -**Important:** Before performing any upgrade, it is highly recommended for you to stop any running systemd service if applicable to ensure that these services are restarted using the updated client version. - -Post re-install, to confirm that you have the new version of the client installed, use `onedrive --version` to determine the client version that is now installed. - -## Uninstalling the client -### Uninstalling the client if installed from distribution package -Follow your distribution documentation to uninstall the package that you installed - -### Uninstalling the client if installed and built from source -From within your GitHub repository clone, perform the following to remove the 'onedrive' binary: -```text -sudo make uninstall -``` - -If you are not upgrading your client, to remove your application state and configuration, perform the following additional step: -``` -rm -rf ~/.config/onedrive -``` -**Note:** If you are using the `--confdir option`, substitute `~/.config/onedrive` for the correct directory storing your client configuration. - -If you want to just delete the application key, but keep the items database: -```text -rm -f ~/.config/onedrive/refresh_token -``` diff --git a/docs/Podman.md b/docs/Podman.md deleted file mode 100644 index 4f3474f3..00000000 --- a/docs/Podman.md +++ /dev/null @@ -1,361 +0,0 @@ -# Run the OneDrive Client for Linux under Podman -This client can be run as a Podman container, with 3 available container base options for you to choose from: - -| Container Base | Docker Tag | Description | i686 | x86_64 | ARMHF | AARCH64 | -|----------------|-------------|----------------------------------------------------------------|:------:|:------:|:-----:|:-------:| -| Alpine Linux | edge-alpine | Podman container based on Alpine 3.18 using 'master' |❌|✔|❌|✔| -| Alpine Linux | alpine | Podman container based on Alpine 3.18 using latest release |❌|✔|❌|✔| -| Debian | debian | Podman container based on Debian Stable using latest release |✔|✔|✔|✔| -| Debian | edge | Podman container based on Debian Stable using 'master' |✔|✔|✔|✔| -| Debian | edge-debian | Podman container based on Debian Stable using 'master' |✔|✔|✔|✔| -| Debian | latest | Podman container based on Debian Stable using latest release |✔|✔|✔|✔| -| Fedora | edge-fedora | Podman container based on Fedora 38 using 'master' |❌|✔|❌|✔| -| Fedora | fedora | Podman container based on Fedora 38 using latest release |❌|✔|❌|✔| - -These containers offer a simple monitoring-mode service for the OneDrive Client for Linux. - -The instructions below have been validated on: -* Fedora 38 - -The instructions below will utilise the 'edge' tag, however this can be substituted for any of the other docker tags such as 'latest' from the table above if desired. - -The 'edge' Docker Container will align closer to all documentation and features, where as 'latest' is the release version from a static point in time. The 'latest' tag however may contain bugs and/or issues that will have been fixed, and those fixes are contained in 'edge'. - -Additionally there are specific version release tags for each release. Refer to https://hub.docker.com/r/driveone/onedrive/tags for any other Docker tags you may be interested in. - -**Note:** The below instructions for podman has been tested and validated when logging into the system as an unprivileged user (non 'root' user). - -## High Level Configuration Steps -1. Install 'podman' as per your distribution platform's instructions if not already installed. -2. Disable 'SELinux' as per your distribution platform's instructions -3. Test 'podman' by running a test container -4. Prepare the required podman volumes to store the configuration and data -5. Run the 'onedrive' container and perform authorisation -6. Running the 'onedrive' container under 'podman' - -## Configuration Steps - -### 1. Install 'podman' on your platform -Install 'podman' as per your distribution platform's instructions if not already installed. - -### 2. Disable SELinux on your platform -In order to run the Docker container under 'podman', SELinux must be disabled. Without doing this, when the application is authenticated in the steps below, the following error will be presented: -```text -ERROR: The local file system returned an error with the following message: - Error Message: /onedrive/conf/refresh_token: Permission denied - -The database cannot be opened. Please check the permissions of ~/.config/onedrive/items.sqlite3 -``` -The only known work-around for the above problem at present is to disable SELinux. Please refer to your distribution platform's instructions on how to perform this step. - -* Fedora: https://docs.fedoraproject.org/en-US/quick-docs/selinux-changing-states-and-modes/#_disabling_selinux -* Red Hat Enterprise Linux: https://access.redhat.com/solutions/3176 - -Post disabling SELinux and reboot your system, confirm that `getenforce` returns `Disabled`: -```text -$ getenforce -Disabled -``` - -If you are still experiencing permission issues despite disabling SELinux, please read https://www.redhat.com/sysadmin/container-permission-denied-errors - -### 3. Test 'podman' on your platform -Test that 'podman' is operational for your 'non-root' user, as per below: -```bash -[alex@fedora38-podman ~]$ podman pull fedora -Resolved "fedora" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf) -Trying to pull registry.fedoraproject.org/fedora:latest... -Getting image source signatures -Copying blob b30887322388 done | -Copying config a1cd3cbf8a done | -Writing manifest to image destination -a1cd3cbf8adaa422629f2fcdc629fd9297138910a467b11c66e5ddb2c2753dff -[alex@fedora38-podman ~]$ podman run fedora /bin/echo "Welcome to the Podman World" -Welcome to the Podman World -[alex@fedora38-podman ~]$ -``` - -### 4. Configure the required podman volumes -The 'onedrive' Docker container requires 2 podman volumes to operate: -* Config Volume -* Data Volume - -The first volume is the configuration volume that stores all the applicable application configuration + current runtime state. In a non-containerised environment, this normally resides in `~/.config/onedrive` - in a containerised environment this is stored in the volume tagged as `/onedrive/conf` - -The second volume is the data volume, where all your data from Microsoft OneDrive is stored locally. This volume is mapped to an actual directory point on your local filesystem and this is stored in the volume tagged as `/onedrive/data` - -#### 4.1 Prepare the 'config' volume -Create the 'config' volume with the following command: -```bash -podman volume create onedrive_conf -``` - -This will create a podman volume labeled `onedrive_conf`, where all configuration of your onedrive account will be stored. You can add a custom config file in this location at a later point in time if required. - -#### 4.2 Prepare the 'data' volume -Create the 'data' volume with the following command: -```bash -podman volume create onedrive_data -``` - -This will create a podman volume labeled `onedrive_data` and will map to a path on your local filesystem. This is where your data from Microsoft OneDrive will be stored. Keep in mind that: - -* The owner of this specified folder must not be root -* Podman will attempt to change the permissions of the volume to the user the container is configured to run as - -**NOTE:** Issues occur when this target folder is a mounted folder of an external system (NAS, SMB mount, USB Drive etc) as the 'mount' itself is owed by 'root'. If this is your use case, you *must* ensure your normal user can mount your desired target without having the target mounted by 'root'. If you do not fix this, your Podman container will fail to start with the following error message: -```bash -ROOT level privileges prohibited! -``` - -### 5. First run of Docker container under podman and performing authorisation -The 'onedrive' client within the container first needs to be authorised with your Microsoft account. This is achieved by initially running podman in interactive mode. - -Run the podman image with the commands below and make sure to change the value of `ONEDRIVE_DATA_DIR` to the actual onedrive data directory on your filesystem that you wish to use (e.g. `export ONEDRIVE_DATA_DIR="/home/abraunegg/OneDrive"`). - -**Important:** The 'target' folder of `ONEDRIVE_DATA_DIR` must exist before running the podman container. The script below will create 'ONEDRIVE_DATA_DIR' so that it exists locally for the podman volume mapping to occur. - -It is also a requirement that the container be run using a non-root uid and gid, you must insert a non-root UID and GID (e.g.` export ONEDRIVE_UID=1000` and export `ONEDRIVE_GID=1000`). The script below will use `id` to evaluate your system environment to use the correct values. -```bash -export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" -export ONEDRIVE_UID=`id -u` -export ONEDRIVE_GID=`id -g` -mkdir -p ${ONEDRIVE_DATA_DIR} -podman run -it --name onedrive --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \ - -v onedrive_conf:/onedrive/conf:U,Z \ - -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" \ - driveone/onedrive:edge -``` - -**Important:** In some scenarios, 'podman' sets the configuration and data directories to a different UID & GID as specified. To resolve this situation, you must run 'podman' with the `--userns=keep-id` flag to ensure 'podman' uses the UID and GID as specified. The updated script example when using `--userns=keep-id` is below: - -```bash -export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" -export ONEDRIVE_UID=`id -u` -export ONEDRIVE_GID=`id -g` -mkdir -p ${ONEDRIVE_DATA_DIR} -podman run -it --name onedrive --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \ - --userns=keep-id \ - -v onedrive_conf:/onedrive/conf:U,Z \ - -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" \ - driveone/onedrive:edge -``` - - -**Important:** If you plan to use the 'podman' built in auto-updating of container images described in 'Systemd Service & Auto Updating' below, you must pass an additional argument to set a label during the first run. The updated script example to support auto-updating of container images is below: - -```bash -export ONEDRIVE_DATA_DIR="${HOME}/OneDrive" -export ONEDRIVE_UID=`id -u` -export ONEDRIVE_GID=`id -g` -mkdir -p ${ONEDRIVE_DATA_DIR} -podman run -it --name onedrive --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \ - --userns=keep-id \ - -v onedrive_conf:/onedrive/conf:U,Z \ - -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" \ - -e PODMAN=1 \ - --label "io.containers.autoupdate=image" \ - driveone/onedrive:edge -``` - -When the Podman container successfully starts: -* You will be asked to open a specific link using your web browser -* Login to your Microsoft Account and give the application the permission -* After giving the permission, you will be redirected to a blank page -* Copy the URI of the blank page into the application prompt to authorise the application - -Once the 'onedrive' application is authorised, the client will automatically start monitoring your `ONEDRIVE_DATA_DIR` for data changes to be uploaded to OneDrive. Files stored on OneDrive will be downloaded to this location. - -If the client is working as expected, you can detach from the container with Ctrl+p, Ctrl+q. - -### 6. Running the 'onedrive' container under 'podman' - -#### 6.1 Check if the monitor service is running -```bash -podman ps -f name=onedrive -``` - -#### 6.2 Show 'onedrive' runtime logs -```bash -podman logs onedrive -``` - -#### 6.3 Stop running 'onedrive' container -```bash -podman stop onedrive -``` - -#### 6.4 Start 'onedrive' container -```bash -podman start onedrive -``` - -#### 6.5 Remove 'onedrive' container -```bash -podman rm -f onedrive -``` - - -## Advanced Usage - -### Systemd Service & Auto Updating - -Podman supports running containers as a systemd service and also auto updating of the container images. Using the existing running container you can generate a systemd unit file to be installed by the **root** user. To have your container image auto-update with podman, it must first be created with the label `"io.containers.autoupdate=image"` mentioned in step 5 above. - -``` -cd /tmp -podman generate systemd --new --restart-policy on-failure --name -f onedrive -/tmp/container-onedrive.service - -# copy the generated systemd unit file to the systemd path and reload the daemon - -cp -Z ~/container-onedrive.service /usr/lib/systemd/system -systemctl daemon-reload - -#optionally enable it to startup on boot - -systemctl enable container-onedrive.service - -#check status - -systemctl status container-onedrive - -#start/stop/restart container as a systemd service - -systemctl stop container-onedrive -systemctl start container-onedrive -``` - -To update the image using podman (Ad-hoc) -``` -podman auto-update -``` - -To update the image using systemd (Automatic/Scheduled) -``` -# Enable the podman-auto-update.timer service at system start: - -systemctl enable podman-auto-update.timer - -# Start the service - -systemctl start podman-auto-update.timer - -# Containers with the autoupdate label will be updated on the next scheduled timer - -systemctl list-timers --all -``` - -### Editing the running configuration and using a 'config' file -The 'onedrive' client should run in default configuration, however you can change this default configuration by placing a custom config file in the `onedrive_conf` podman volume. First download the default config from [here](https://raw.githubusercontent.com/abraunegg/onedrive/master/config) -Then put it into your onedrive_conf volume path, which can be found with: - -```bash -podman volume inspect onedrive_conf -``` -Or you can map your own config folder to the config volume. Make sure to copy all files from the volume into your mapped folder first. - -The detailed document for the config can be found here: [Configuration](https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#configuration) - -### Syncing multiple accounts -There are many ways to do this, the easiest is probably to do the following: -1. Create a second podman config volume (replace `work` with your desired name): `podman volume create onedrive_conf_work` -2. And start a second podman monitor container (again replace `work` with your desired name): - -```bash -export ONEDRIVE_DATA_DIR_WORK="/home/abraunegg/OneDriveWork" -export ONEDRIVE_UID=`id -u` -export ONEDRIVE_GID=`id -g` -mkdir -p ${ONEDRIVE_DATA_DIR_WORK} -podman run -it --name onedrive_work --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" \ - --userns=keep-id \ - -v onedrive_conf_work:/onedrive/conf:U,Z \ - -v "${ONEDRIVE_DATA_DIR_WORK}:/onedrive/data:U,Z" \ - -e PODMAN=1 \ - --label "io.containers.autoupdate=image" \ - driveone/onedrive:edge -``` - -## Supported Podman Environment Variables -| Variable | Purpose | Sample Value | -| ---------------- | --------------------------------------------------- |:-------------:| -| ONEDRIVE_UID | UserID (UID) to run as | 1000 | -| ONEDRIVE_GID | GroupID (GID) to run as | 1000 | -| ONEDRIVE_VERBOSE | Controls "--verbose" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_DEBUG | Controls "--verbose --verbose" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_DEBUG_HTTPS | Controls "--debug-https" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_RESYNC | Controls "--resync" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_DOWNLOADONLY | Controls "--download-only" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_UPLOADONLY | Controls "--upload-only" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_NOREMOTEDELETE | Controls "--no-remote-delete" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_LOGOUT | Controls "--logout" switch. Default is 0 | 1 | -| ONEDRIVE_REAUTH | Controls "--reauth" switch. Default is 0 | 1 | -| ONEDRIVE_AUTHFILES | Controls "--auth-files" option. Default is "" | "authUrl:responseUrl" | -| ONEDRIVE_AUTHRESPONSE | Controls "--auth-response" option. Default is "" | See [here](https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#authorize-the-application-with-your-onedrive-account) | -| ONEDRIVE_DISPLAY_CONFIG | Controls "--display-running-config" switch on onedrive sync. Default is 0 | 1 | -| ONEDRIVE_SINGLE_DIRECTORY | Controls "--single-directory" option. Default = "" | "mydir" | -| ONEDRIVE_DRYRUN | Controls "--dry-run" option. Default is 0 | 1 | - -### Environment Variables Usage Examples -**Verbose Output:** -```bash -podman run -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge -``` -**Debug Output:** -```bash -podman run -e ONEDRIVE_DEBUG=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge -``` -**Perform a --resync:** -```bash -podman run -e ONEDRIVE_RESYNC=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge -``` -**Perform a --resync and --verbose:** -```bash -podman run -e ONEDRIVE_RESYNC=1 -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge -``` -**Perform a --logout and re-authenticate:** -```bash -podman run -it -e ONEDRIVE_LOGOUT=1 -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" driveone/onedrive:edge -``` - -## Building a custom Podman image -You can also build your own image instead of pulling the one from [hub.docker.com](https://hub.docker.com/r/driveone/onedrive): -```bash -git clone https://github.com/abraunegg/onedrive -cd onedrive -podman build . -t local-onedrive -f contrib/docker/Dockerfile -``` - -There are alternate, smaller images available by building -Dockerfile-debian or Dockerfile-alpine. These [multi-stage builder pattern](https://docs.docker.com/develop/develop-images/multistage-build/) -Dockerfiles require Docker version at least 17.05. - -### How to build and run a custom Podman image based on Debian -``` bash -podman build . -t local-ondrive-debian -f contrib/docker/Dockerfile-debian -podman run -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" --userns=keep-id local-ondrive-debian:latest -``` - -### How to build and run a custom Podman image based on Alpine Linux -``` bash -podman build . -t local-ondrive-alpine -f contrib/docker/Dockerfile-alpine -podman run -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" --userns=keep-id local-ondrive-alpine:latest -``` - -### How to build and run a custom Podman image for ARMHF (Raspberry Pi) -Compatible with: -* Raspberry Pi -* Raspberry Pi 2 -* Raspberry Pi Zero -* Raspberry Pi 3 -* Raspberry Pi 4 -``` bash -podman build . -t local-onedrive-armhf -f contrib/docker/Dockerfile-debian -podman run -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" --userns=keep-id local-onedrive-armhf:latest -``` - -### How to build and run a custom Podman image for AARCH64 Platforms -``` bash -podman build . -t local-onedrive-aarch64 -f contrib/docker/Dockerfile-debian -podman run -v onedrive_conf:/onedrive/conf:U,Z -v "${ONEDRIVE_DATA_DIR}:/onedrive/data:U,Z" --user "${ONEDRIVE_UID}:${ONEDRIVE_GID}" --userns=keep-id local-onedrive-aarch64:latest -``` diff --git a/docs/USAGE.md b/docs/USAGE.md deleted file mode 100644 index 880de952..00000000 --- a/docs/USAGE.md +++ /dev/null @@ -1,943 +0,0 @@ -# Using the OneDrive Client for Linux -## Application Version -Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. - -## Table of Contents - -- [Important Notes](#important-notes) - - [Upgrading from the 'skilion' Client](#upgrading-from-the-sklion-client) - - [Guidelines for Naming Local Files and Folders in the Synchronisation Directory](#guidelines-for-naming-local-files-and-folders-in-the-synchronisation-directory) - - [Compatibility with curl](#compatibility-with-curl) -- [First Steps](#first-steps) - - [Authorise the Application with Your Microsoft OneDrive Account](#authorise-the-application-with-your-microsoft-onedrive-account) - - [Display Your Applicable Runtime Configuration](#display-your-applicable-runtime-configuration) - - [Understanding OneDrive Client for Linux Operational Modes](#understanding-onedrive-client-for-linux-operational-modes) - - [Standalone Synchronisation Operational Mode (Standalone Mode)](#standalone-synchronisation-operational-mode-standalone-mode) - - [Ongoing Synchronisation Operational Mode (Monitor Mode)](#ongoing-synchronisation-operational-mode-monitor-mode) - - [Increasing application logging level](#increasing-application-logging-level) - - [Using 'Client Side Filtering' rules to determine what should be synced with Microsoft OneDrive](#using-client-side-filtering-rules-to-determine-what-should-be-synced-with-microsoft-onedrive) - - [Testing your configuration](#testing-your-configuration) - - [Performing a sync with Microsoft OneDrive](#performing-a-sync-with-microsoft-onedrive) - - [Performing a single directory synchronisation with Microsoft OneDrive](#performing-a-single-directory-synchronisation-with-microsoft-onedrive) - - [Performing a 'one-way' download synchronisation with Microsoft OneDrive](#performing-a-one-way-download-synchronisation-with-microsoft-onedrive) - - [Performing a 'one-way' upload synchronisation with Microsoft OneDrive](#performing-a-one-way-upload-synchronisation-with-microsoft-onedrive) - - [Performing a selective synchronisation via 'sync_list' file](#performing-a-selective-synchronisation-via-sync_list-file) - - [Performing a --resync](#performing-a---resync) - - [Performing a --force-sync without a --resync or changing your configuration](#performing-a---force-sync-without-a---resync-or-changing-your-configuration) - - [Enabling the Client Activity Log](#enabling-the-client-activity-log) - - [Client Activity Log Example:](#client-activity-log-example) - - [Client Activity Log Differences](#client-activity-log-differences) - - [GUI Notifications](#gui-notifications) - - [Handling a Microsoft OneDrive Account Password Change](#handling-a-microsoft-onedrive-account-password-change) - - [Determining the synchronisation result](#determining-the-synchronisation-result) -- [Frequently Asked Configuration Questions](#frequently-asked-configuration-questions) - - [How to change the default configuration of the client?](#how-to-change-the-default-configuration-of-the-client) - - [How to change where my data from Microsoft OneDrive is stored?](#how-to-change-where-my-data-from-microsoft-onedrive-is-stored) - - [How to change what file and directory permissions are assigned to data that is downloaded from Microsoft OneDrive?](#how-to-change-what-file-and-directory-permissions-are-assigned-to-data-that-is-downloaded-from-microsoft-onedrive) - - [How are uploads and downloads managed?](#how-are-uploads-and-downloads-managed) - - [How to only sync a specific directory?](#how-to-only-sync-a-specific-directory) - - [How to 'skip' files from syncing?](#how-to-skip-files-from-syncing) - - [How to 'skip' directories from syncing?](#how-to-skip-directories-from-syncing) - - [How to 'skip' .files and .folders from syncing?](#how-to-skip-files-and-folders-from-syncing) - - [How to 'skip' files larger than a certain size from syncing?](#how-to-skip-files-larger-than-a-certain-size-from-syncing) - - [How to 'rate limit' the application to control bandwidth consumed for upload & download operations?](#how-to-rate-limit-the-application-to-control-bandwidth-consumed-for-upload--download-operations) - - [How can I prevent my local disk from filling up?](#how-can-i-prevent-my-local-disk-from-filling-up) - - [How does the client handle symbolic links?](#how-does-the-client-handle-symbolic-links) - - [How to synchronise shared folders (OneDrive Personal)?](#how-to-synchronise-shared-folders-onedrive-personal) - - [How to synchronise shared folders (OneDrive Business or Office 365)?](#how-to-synchronise-shared-folders-onedrive-business-or-office-365) - - [How to synchronise SharePoint / Office 365 Shared Libraries?](#how-to-synchronise-sharepoint--office-365-shared-libraries) - - [How to Create a Shareable Link?](#how-to-create-a-shareable-link) - - [How to Synchronise Both Personal and Business Accounts at once?](#how-to-synchronise-both-personal-and-business-accounts-at-once) - - [How to Synchronise Multiple SharePoint Libraries simultaneously?](#how-to-synchronise-multiple-sharepoint-libraries-simultaneously) - - [How to Receive Real-time Changes from Microsoft OneDrive Service, instead of waiting for the next sync period?](#how-to-receive-real-time-changes-from-microsoft-onedrive-service-instead-of-waiting-for-the-next-sync-period) - - [How to initiate the client as a background service?](#how-to-initiate-the-client-as-a-background-service) - - [OneDrive service running as root user via init.d](#onedrive-service-running-as-root-user-via-initd) - - [OneDrive service running as root user via systemd (Arch, Ubuntu, Debian, OpenSuSE, Fedora)](#onedrive-service-running-as-root-user-via-systemd-arch-ubuntu-debian-opensuse-fedora) - - [OneDrive service running as root user via systemd (Red Hat Enterprise Linux, CentOS Linux)](#onedrive-service-running-as-root-user-via-systemd-red-hat-enterprise-linux-centos-linux) - - [OneDrive service running as a non-root user via systemd (All Linux Distributions)](#onedrive-service-running-as-a-non-root-user-via-systemd-all-linux-distributions) - - [OneDrive service running as a non-root user via systemd (with notifications enabled) (Arch, Ubuntu, Debian, OpenSuSE, Fedora)](#onedrive-service-running-as-a-non-root-user-via-systemd-with-notifications-enabled-arch-ubuntu-debian-opensuse-fedora) - - [OneDrive service running as a non-root user via runit (antiX, Devuan, Artix, Void)](#onedrive-service-running-as-a-non-root-user-via-runit-antix-devuan-artix-void) - - [How to start a user systemd service at boot without user login?](#how-to-start-a-user-systemd-service-at-boot-without-user-login) - -## Important Notes -### Upgrading from the 'skilion' Client -The 'skilion' version has a significant number of issues in how it manages the local sync state. When upgrading from the 'skilion' client to this client, it's recommended to stop any service or OneDrive process that may be running. Once all OneDrive services are stopped, make sure to remove any old client binaries from your system. - -Furthermore, if you're using a 'config' file within your configuration directory (`~/.config/onedrive/`), please ensure that you update the `skip_file = ` option as shown below: - -**Invalid 'skilion' configuration:** -```text -skip_file = ".*|~*" -``` -**Minimum valid configuration:** -```text -skip_file = "~*" -``` -**Default valid configuration:** -```text -skip_file = "~*|.~*|*.tmp|*.swp|*.partial" -``` - -Avoid using a 'skip_file' entry of `.*` as it may prevent the correct detection of local changes to process. The configuration values for 'skip_file' will be checked for validity, and if there is an issue, the following error message will be displayed: -```text -ERROR: Invalid skip_file entry '.*' detected -``` - -### Guidelines for Naming Local Files and Folders in the Synchronisation Directory -When naming your files and folders in the synchronisation directory, it is important to follow the [Windows naming conventions](https://docs.microsoft.com/windows/win32/fileio/naming-a-file) for your files and folders. - -Moreover, Microsoft OneDrive does not adhere to POSIX standards. As a result, if you have two files with identical names differing only in capitalisation, the OneDrive Client for Linux will try to manage this. However, in cases of naming conflicts, the conflicting file or folder will not synchronise. This is a deliberate design choice and will not be modified. To avoid such issues, you should rename any conflicting local files or folders. - -### Compatibility with curl -If your system uses curl < 7.47.0, curl will default to HTTP/1.1 for HTTPS operations, and the client will follow suit, using HTTP/1.1. - -For systems running curl >= 7.47.0 and < 7.62.0, curl will prefer HTTP/2 for HTTPS, but it will still use HTTP/1.1 as the default for these operations. The client will employ HTTP/1.1 for HTTPS operations as well. - -However, if your system employs curl >= 7.62.0, curl will, by default, prioritise HTTP/2 over HTTP/1.1. In this case, the client will utilise HTTP/2 for most HTTPS operations and stick with HTTP/1.1 for others. Please note that this distinction is governed by the OneDrive platform, not our client. - -If you explicitly want to use HTTP/1.1, you can do so by using the `--force-http-11` flag or setting the configuration option `force_http_11 = "true"`. This will compel the application to exclusively use HTTP/1.1. Otherwise, all client operations will align with the curl default settings for your distribution. - -## First Steps -### Authorise the Application with Your Microsoft OneDrive Account -Once you've installed the application, you'll need to authorise it using your Microsoft OneDrive Account. This can be done by simply running the application without any additional command switches. - -Please be aware that some companies may require you to explicitly add this app to the [Microsoft MyApps portal](https://myapps.microsoft.com/). To add an approved app to your apps, click on the ellipsis in the top-right corner and select "Request new apps." On the next page, you can add this app. If it's not listed, you should make a request through your IT department. - -When you run the application for the first time, you'll be prompted to open a specific URL using your web browser, where you'll need to log in to your Microsoft Account and grant the application permission to access your files. After granting permission to the application, you'll be redirected to a blank page. Simply copy the URI from the blank page and paste it into the application. - -**Example:** -```text -[user@hostname ~]$ onedrive -Authorise this app by visiting: - -https://login.microsoftonline.com/common/oauth2/v2.0/authorise?client_id=22c49a0d-d21c-4792-aed1-8f163c982546&scope=Files.ReadWrite%20Files.ReadWrite.all%20Sites.ReadWrite.All%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient - -Enter the response URI from your browser: https://login.microsoftonline.com/common/oauth2/nativeclient?code= - -The application has been successfully authorised, but no additional command switches were provided. - -Please use 'onedrive --help' for further assistance on how to run this application. -``` - -**Please Note:** Without additional input or configuration, the OneDrive Client for Linux will automatically adhere to default application settings during synchronisation processes with Microsoft OneDrive. - - -### Display Your Applicable Runtime Configuration -To verify the configuration that the application will use, use the following command: -```text -onedrive --display-config -``` -This command will display all the relevant runtime interpretations of the options and configurations you are using. An example output is as follows: -```text -Reading configuration file: /home/user/.config/onedrive/config -Configuration file successfully loaded -onedrive version = vX.Y.Z-A-bcdefghi -Config path = /home/user/.config/onedrive -Config file found in config path = true -Config option 'drive_id' = -Config option 'sync_dir' = ~/OneDrive -... -Config option 'webhook_enabled' = false -``` - -**Important Reminder:** When using multiple OneDrive accounts, it's essential to always use the `--confdir` command followed by the appropriate configuration directory. This ensures that the specific configuration you intend to view is correctly displayed. - -### Understanding OneDrive Client for Linux Operational Modes -There are two modes of operation when using the client: -1. Standalone sync mode that performs a single sync action against Microsoft OneDrive. -2. Ongoing sync mode that continuously syncs your data with Microsoft OneDrive. - -**Important Information:** The default setting for the OneDrive Client on Linux will sync all data from your Microsoft OneDrive account to your local device. To avoid this and select specific items for synchronisation, you should explore setting up 'Client Side Filtering' rules. This will help you manage and specify what exactly gets synced with your Microsoft OneDrive account. - -#### Standalone Synchronisation Operational Mode (Standalone Mode) -This method of use can be employed by issuing the following option to the client: -```text -onedrive --sync -``` -For simplicity, this can be shortened to the following: -```text -onedrive -s -``` - -#### Ongoing Synchronisation Operational Mode (Monitor Mode) -This method of use can be utilised by issuing the following option to the client: -```text -onedrive --monitor -``` -For simplicity, this can be shortened to the following: -```text -onedrive -m -``` -**Note:** This method of use is typically employed when enabling a systemd service to run the application in the background. - -Two common errors can occur when using monitor mode: -* Initialisation failure -* Unable to add a new inotify watch - -Both of these errors are local environment issues, where the following system variables need to be increased as the current system values are potentially too low: -* `fs.file-max` -* `fs.inotify.max_user_watches` - -To determine what the existing values are on your system, use the following commands: -```text -sysctl fs.file-max -sysctl fs.inotify.max_user_watches -``` -Alternatively, when running the client with increased verbosity (see below), the client will display what the current configured system maximum values are: -```text -... -All application operations will be performed in: /home/user/OneDrive -OneDrive synchronisation interval (seconds): 300 -Maximum allowed open files: 393370 <-- This is the current operating system fs.file-max value -Maximum allowed inotify watches: 29374 <-- This is the current operating system fs.inotify.max_user_watches value -Initialising filesystem inotify monitoring ... -... -``` -To determine what value to change to, you need to count all the files and folders in your configured 'sync_dir': -```text -cd /path/to/your/sync/dir -ls -laR | wc -l -``` - -To make a change to these variables using your file and folder count, use the following process: -```text -sudo sysctl fs.file-max= -sudo sysctl fs.inotify.max_user_watches= -``` -Once these values are changed, you will need to restart your client so that the new values are detected and used. - -To make these changes permanent on your system, refer to your OS reference documentation. - -### Increasing application logging level -When running a sync (`--sync`) or using monitor mode (`--monitor`), it may be desirable to see additional information regarding the progress and operation of the client. For example, for a `--sync` command, this would be: -```text -onedrive --sync --verbose -``` -Furthermore, for simplicity, this can be simplified to the following: -``` -onedrive -s -v -``` -Adding `--verbose` twice will enable debug logging output. This is generally required when raising a bug report or needing to understand a problem. - -### Using 'Client Side Filtering' rules to determine what should be synced with Microsoft OneDrive -Client Side Filtering in the context of the OneDrive Client for Linux refers to user-configured rules that determine what files and directories the client should upload or download from Microsoft OneDrive. These rules are crucial for optimising synchronisation, especially when dealing with large numbers of files or specific file types. The OneDrive Client for Linux offers several configuration options to facilitate this: - -* **skip_dir:** This option allows the user to specify directories that should not be synchronised with OneDrive. It's particularly useful for omitting large or irrelevant directories from the sync process. - -* **skip_dotfiles:** Dotfiles, usually configuration files or scripts, can be excluded from the sync. This is useful for users who prefer to keep these files local. - -* **skip_file:** Specific files can be excluded from synchronisation using this option. It provides flexibility in selecting which files are essential for cloud storage. - -* **skip_symlinks:** Symlinks often point to files outside the OneDrive directory or to locations that are not relevant for cloud storage. This option prevents them from being included in the sync. - -Additionally, the OneDrive Client for Linux allows the implementation of Client Side Filtering rules through a 'sync_list' file. This file explicitly states which directories or files should be included in the synchronisation. By default, any item not listed in the 'sync_list' file is excluded. This method offers a more granular approach to synchronisation, ensuring that only the necessary data is transferred to and from Microsoft OneDrive. - -These configurable options and the 'sync_list' file provide users with the flexibility to tailor the synchronisation process to their specific needs, conserving bandwidth and storage space while ensuring that important files are always backed up and accessible. - -**Note:** After changing any Client Side Filtering rule, you must perform a full re-synchronisation. - -### Testing your configuration -You can test your configuration by utilising the `--dry-run` CLI option. No files will be downloaded, uploaded, or removed; however, the application will display what 'would' have occurred. For example: -```text -onedrive --sync --verbose --dry-run -Reading configuration file: /home/user/.config/onedrive/config -Configuration file successfully loaded -Using 'user' Config Dir: /home/user/.config/onedrive -DRY-RUN Configured. Output below shows what 'would' have occurred. -DRY-RUN: Copying items.sqlite3 to items-dryrun.sqlite3 to use for dry run operations -DRY RUN: Not creating backup config file as --dry-run has been used -DRY RUN: Not updating hash files as --dry-run has been used -Checking Application Version ... -Attempting to initialise the OneDrive API ... -Configuring Global Azure AD Endpoints -The OneDrive API was initialised successfully -Opening the item database ... -Sync Engine Initialised with new Onedrive API instance -Application version: vX.Y.Z-A-bcdefghi -Account Type: -Default Drive ID: -Default Root ID: -Remaining Free Space: 1058488129 KB -All application operations will be performed in: /home/user/OneDrive -Fetching items from the OneDrive API for Drive ID: .. -... -Performing a database consistency and integrity check on locally stored data ... -Processing DB entries for this Drive ID: -Processing ~/OneDrive -The directory has not changed -... -Scanning local filesystem '~/OneDrive' for new data to upload ... -... -Performing a final true-up scan of online data from Microsoft OneDrive -Fetching items from the OneDrive API for Drive ID: .. - -Sync with Microsoft OneDrive is complete -``` - -### Performing a sync with Microsoft OneDrive -By default, all files are downloaded in `~/OneDrive`. This download location is controlled by the 'sync_dir' config option. - -After authorising the application, a sync of your data can be performed by running: -```text -onedrive --sync -``` -This will synchronise files from your Microsoft OneDrive account to your `~/OneDrive` local directory or to your specified 'sync_dir' location. - -If you prefer to use your local files as stored in `~/OneDrive` as your 'source of truth,' use the following sync command: -```text -onedrive --sync --local-first -``` - -### Performing a single directory synchronisation with Microsoft OneDrive -In some cases, it may be desirable to synchronise a single directory under ~/OneDrive without having to change your client configuration. To do this, use the following command: -```text -onedrive --sync --single-directory '' -``` - -**Example:** If the full path is `~/OneDrive/mydir`, the command would be `onedrive --sync --single-directory 'mydir'` - -### Performing a 'one-way' download synchronisation with Microsoft OneDrive -In some cases, it may be desirable to 'download only' from Microsoft OneDrive. To do this, use the following command: -```text -onedrive --sync --download-only -``` -This will download all the content from Microsoft OneDrive to your `~/OneDrive` location. Any files that are deleted online remain locally and will not be removed. - -However, in some circumstances, it may be desirable to clean up local files that have been removed online. To do this, use the following command: - -```text -onedrive --sync --download-only --cleanup-local-files -``` - -### Performing a 'one-way' upload synchronisation with Microsoft OneDrive -In certain scenarios, you might need to perform an 'upload only' operation to Microsoft OneDrive. This means that you'll be uploading data to OneDrive, but not synchronising any changes or additions made elsewhere. Use this command to initiate an upload-only synchronisation: - -```text -onedrive --sync --upload-only -``` - -**Important Points:** -- The 'upload only' mode operates independently of OneDrive's online content. It doesn't check or sync with what's already stored on OneDrive. It only uploads data from the local client. -- If a local file or folder that was previously synchronised with Microsoft OneDrive is now missing locally, it will be deleted from OneDrive during this operation. - -To ensure that all data on Microsoft OneDrive remains intact (e.g., preventing deletion of items on OneDrive if they're deleted locally), use this command instead: - -```text -onedrive --sync --upload-only --no-remote-delete -``` - -**Understanding both Commands:** -- `--upload-only`: This command will only upload local changes to OneDrive. These changes can include additions, modifications, moves, and deletions of files and folders. -- `--no-remote-delete`: Adding this command prevents the deletion of any items on OneDrive, even if they're deleted locally. This creates a one-way archive on OneDrive where files are only added and never removed. - -### Performing a selective synchronisation via 'sync_list' file -Selective synchronisation allows you to sync only specific files and directories. -To enable selective synchronisation, create a file named `sync_list` in your application configuration directory (default is `~/.config/onedrive`). - -Important points to understand before using 'sync_list'. -* 'sync_list' excludes _everything_ by default on OneDrive. -* 'sync_list' follows an _"exclude overrides include"_ rule, and requires **explicit inclusion**. -* Order exclusions before inclusions, so that anything _specifically included_ is included. -* How and where you place your `/` matters for excludes and includes in subdirectories. - -Each line of the file represents a relative path from your `sync_dir`. All files and directories not matching any line of the file will be skipped during all operations. - -Additionally, the use of `/` is critically important to determine how a rule is interpreted. It is very similar to `**` wildcards, for those that are familiar with globbing patterns. -Here is an example of `sync_list`: -```text -# sync_list supports comments -# -# The ordering of entries is highly recommended - exclusions before inclusions -# -# Exclude temp folder(s) or file(s) under Documents folder(s), anywhere in OneDrive -!Documents/temp* -# -# Exclude secret data folder in root directory only -!/Secret_data/* -# -# Include everything else in root directory -/* -# -# Include my Backup folder(s) or file(s) anywhere on OneDrive -Backup -# -# Include my Backup folder in root -/Backup/ -# -# Include Documents folder(s) anywhere in OneDrive -Documents/ -# -# Include all PDF files in Documents folder(s), anywhere in OneDrive -Documents/*.pdf -# -# Include this single document in Documents folder(s), anywhere in OneDrive -Documents/latest_report.docx -# -# Include all Work/Project directories or files, inside 'Work' folder(s), anywhere in OneDrive -Work/Project* -# -# Include all "notes.txt" files, anywhere in OneDrive -notes.txt -# -# Include /Blender in the ~OneDrive root but not if elsewhere in OneDrive -/Blender -# -# Include these directories(or files) in 'Pictures' folder(s), that have a space in their name -Pictures/Camera Roll -Pictures/Saved Pictures -# -# Include these names if they match any file or folder -Cinema Soc -Codes -Textbooks -Year 2 -``` -The following are supported for pattern matching and exclusion rules: -* Use the `*` to wildcard select any characters to match for the item to be included -* Use either `!` or `-` characters at the start of the line to exclude an otherwise included item - -**Note:** When enabling the use of 'sync_list,' utilise the `--display-config` option to validate that your configuration will be used by the application, and test your configuration by adding `--dry-run` to ensure the client will operate as per your requirement. - -**Note:** After changing the sync_list, you must perform a full re-synchronisation by adding `--resync` to your existing command line - for example: `onedrive --sync --resync` - -**Note:** In some circumstances, it may be required to sync all the individual files within the 'sync_dir', but due to frequent name change / addition / deletion of these files, it is not desirable to constantly change the 'sync_list' file to include / exclude these files and force a resync. To assist with this, enable the following in your configuration file: -```text -sync_root_files = "true" -``` -This will tell the application to sync any file that it finds in your 'sync_dir' root by default, negating the need to constantly update your 'sync_list' file. - -### Performing a --resync -If you alter any of the subsequent configuration items, you will be required to execute a `--resync` to make sure your client is syncing your data with the updated configuration: -* drive_id -* sync_dir -* skip_file -* skip_dir -* skip_dotfiles -* skip_symlinks -* sync_business_shared_items -* Creating, Modifying or Deleting the 'sync_list' file - -Additionally, you might opt for a `--resync` if you think it's necessary to ensure your data remains in sync. If you're using this switch simply because you're unsure of the sync status, you can check the actual sync status using `--display-sync-status`. - -When you use `--resync`, you'll encounter the following warning and advice: -```text -Using --resync will delete your local 'onedrive' client state, so there won't be a record of your current 'sync status.' -This may potentially overwrite local versions of files with older versions downloaded from OneDrive, leading to local data loss. -If in doubt, back up your local data before using --resync. - -Are you sure you want to proceed with --resync? [Y/N] -``` - -To proceed with `--resync`, you must type 'y' or 'Y' to allow the application to continue. - -**Note:** It's highly recommended to use `--resync` only if the application prompts you to do so. Don't blindly set the application to start with `--resync` as the default option. - -**Note:** In certain automated environments (assuming you know what you're doing due to automation), to avoid the 'proceed with acknowledgement' requirement, add `--resync-auth` to automatically acknowledge the prompt. - -### Performing a --force-sync without a --resync or changing your configuration -In some cases and situations, you may have configured the application to skip certain files and folders using 'skip_file' and 'skip_dir' configuration. You then may have a requirement to actually sync one of these items, but do not wish to modify your configuration, nor perform an entire `--resync` twice. - -The `--force-sync` option allows you to sync a specific directory, ignoring your 'skip_file' and 'skip_dir' configuration and negating the requirement to perform a `--resync`. - -To use this option, you must run the application manually in the following manner: -```text -onedrive --sync --single-directory '' --force-sync -``` - -When using `--force-sync`, you'll encounter the following warning and advice: -```text -WARNING: Overriding application configuration to use application defaults for skip_dir and skip_file due to --sync --single-directory --force-sync being used - -Using --force-sync will reconfigure the application to use defaults. This may have unknown future impacts. -By proceeding with this option, you accept any impacts, including potential data loss resulting from using --force-sync. - -Are you sure you want to proceed with --force-sync [Y/N] -``` - -To proceed with `--force-sync`, you must type 'y' or 'Y' to allow the application to continue. - -### Enabling the Client Activity Log -When running onedrive, all actions can be logged to a separate log file. This can be enabled by using the `--enable-logging` flag. By default, log files will be written to `/var/log/onedrive/` and will be in the format of `%username%.onedrive.log`, where `%username%` represents the user who ran the client to allow easy sorting of user to client activity log. - -**Note:** You will need to ensure the existence of this directory and that your user has the applicable permissions to write to this directory; otherwise, the following error message will be printed: -```text -ERROR: Unable to access /var/log/onedrive -ERROR: Please manually create '/var/log/onedrive' and set appropriate permissions to allow write access -ERROR: The requested client activity log will instead be located in your user's home directory -``` - -On many systems, this can be achieved by performing the following: -```text -sudo mkdir /var/log/onedrive -sudo chown root:users /var/log/onedrive -sudo chmod 0775 /var/log/onedrive -``` - -Additionally, you need to ensure that your user account is part of the 'users' group: -``` -cat /etc/group | grep users -``` - -If your user is not part of this group, then you need to add your user to this group: -``` -sudo usermod -a -G users -``` - -If you need to make a group modification, you will need to 'logout' of all sessions / SSH sessions to log in again to have the new group access applied. - -If the client is unable to write the client activity log, the following error message will be printed: -```text -ERROR: Unable to write the activity log to /var/log/onedrive/%username%.onedrive.log -ERROR: Please set appropriate permissions to allow write access to the logging directory for your user account -ERROR: The requested client activity log will instead be located in your user's home directory -``` - -If you receive this error message, you will need to diagnose why your system cannot write to the specified file location. - -#### Client Activity Log Example: -An example of a client activity log for the command `onedrive --sync --enable-logging` is below: -```text -2023-Sep-27 08:16:00.1128806 Configuring Global Azure AD Endpoints -2023-Sep-27 08:16:00.1160620 Sync Engine Initialised with new Onedrive API instance -2023-Sep-27 08:16:00.5227122 All application operations will be performed in: /home/user/OneDrive -2023-Sep-27 08:16:00.5227977 Fetching items from the OneDrive API for Drive ID: -2023-Sep-27 08:16:00.7780979 Processing changes and items received from Microsoft OneDrive ... -2023-Sep-27 08:16:00.7781548 Performing a database consistency and integrity check on locally stored data ... -2023-Sep-27 08:16:00.7785889 Scanning the local file system '~/OneDrive' for new data to upload ... -2023-Sep-27 08:16:00.7813710 Performing a final true-up scan of online data from Microsoft OneDrive -2023-Sep-27 08:16:00.7814668 Fetching items from the OneDrive API for Drive ID: -2023-Sep-27 08:16:01.0141776 Processing changes and items received from Microsoft OneDrive ... -2023-Sep-27 08:16:01.0142454 Sync with Microsoft OneDrive is complete -``` -An example of a client activity log for the command `onedrive --sync --verbose --enable-logging` is below: -```text -2023-Sep-27 08:20:05.4600464 Checking Application Version ... -2023-Sep-27 08:20:05.5235017 Attempting to initialise the OneDrive API ... -2023-Sep-27 08:20:05.5237207 Configuring Global Azure AD Endpoints -2023-Sep-27 08:20:05.5238087 The OneDrive API was initialised successfully -2023-Sep-27 08:20:05.5238536 Opening the item database ... -2023-Sep-27 08:20:05.5270612 Sync Engine Initialised with new Onedrive API instance -2023-Sep-27 08:20:05.9226535 Application version: vX.Y.Z-A-bcdefghi -2023-Sep-27 08:20:05.9227079 Account Type: -2023-Sep-27 08:20:05.9227360 Default Drive ID: -2023-Sep-27 08:20:05.9227550 Default Root ID: -2023-Sep-27 08:20:05.9227862 Remaining Free Space: -2023-Sep-27 08:20:05.9228296 All application operations will be performed in: /home/user/OneDrive -2023-Sep-27 08:20:05.9228989 Fetching items from the OneDrive API for Drive ID: -2023-Sep-27 08:20:06.2076569 Performing a database consistency and integrity check on locally stored data ... -2023-Sep-27 08:20:06.2077121 Processing DB entries for this Drive ID: -2023-Sep-27 08:20:06.2078408 Processing ~/OneDrive -2023-Sep-27 08:20:06.2078739 The directory has not changed -2023-Sep-27 08:20:06.2079783 Processing Attachments -2023-Sep-27 08:20:06.2080071 The directory has not changed -2023-Sep-27 08:20:06.2081585 Processing Attachments/file.docx -2023-Sep-27 08:20:06.2082079 The file has not changed -2023-Sep-27 08:20:06.2082760 Processing Documents -2023-Sep-27 08:20:06.2083225 The directory has not changed -2023-Sep-27 08:20:06.2084284 Processing Documents/file.log -2023-Sep-27 08:20:06.2084886 The file has not changed -2023-Sep-27 08:20:06.2085150 Scanning the local file system '~/OneDrive' for new data to upload ... -2023-Sep-27 08:20:06.2087133 Skipping item - excluded by sync_list config: ./random_25k_files -2023-Sep-27 08:20:06.2116235 Performing a final true-up scan of online data from Microsoft OneDrive -2023-Sep-27 08:20:06.2117190 Fetching items from the OneDrive API for Drive ID: -2023-Sep-27 08:20:06.5049743 Sync with Microsoft OneDrive is complete -``` - -#### Client Activity Log Differences -Despite application logging being enabled as early as possible, the following log entries will be missing from the client activity log when compared to console output: - -**No user configuration file:** -```text -No user or system config file found, using application defaults -Using 'user' configuration path for application state data: /home/user/.config/onedrive -Using the following path to store the runtime application log: /var/log/onedrive -``` -**User configuration file:** -```text -Reading configuration file: /home/user/.config/onedrive/config -Configuration file successfully loaded -Using 'user' configuration path for application state data: /home/user/.config/onedrive -Using the following path to store the runtime application log: /var/log/onedrive -``` - -### GUI Notifications -If notification support has been compiled in (refer to GUI Notification Support in install.md .. ADD LINK LATER), the following events will trigger a GUI notification within the display manager session: -* Aborting a sync if .nosync file is found -* Skipping a particular item due to an invalid name -* Skipping a particular item due to an invalid symbolic link -* Skipping a particular item due to an invalid UTF sequence -* Skipping a particular item due to an invalid character encoding sequence -* Cannot create remote directory -* Cannot upload file changes (free space issue, breaches maximum allowed size, breaches maximum OneDrive Account path length) -* Cannot delete remote file / folder -* Cannot move remote file / folder -* When a re-authentication is required -* When a new client version is available -* Files that fail to upload -* Files that fail to download - -### Handling a Microsoft OneDrive Account Password Change -If you change your Microsoft OneDrive Account Password, the client will no longer be authorised to sync, and will generate the following error upon next application run: -```text -AADSTS50173: The provided grant has expired due to it being revoked, a fresh auth token is needed. The user might have changed or reset their password. The grant was issued on '' and the TokensValidFrom date (before which tokens are not valid) for this user is ''. - -ERROR: You will need to issue a --reauth and re-authorise this client to obtain a fresh auth token. -``` - -To re-authorise the client, follow the steps below: -1. If running the client as a system service (init.d or systemd), stop the applicable system service -2. Run the command `onedrive --reauth`. This will clean up the previous authorisation, and will prompt you to re-authorise the client as per initial configuration. Please note, if you are using `--confdir` as part of your application runtime configuration, you must include this when telling the client to re-authenticate. -3. Restart the client if running as a system service or perform the standalone sync operation again - -The application will now sync with OneDrive with the new credentials. - -### Determining the synchronisation result -When the client has finished syncing without errors, the following will be displayed: -``` -Sync with Microsoft OneDrive is complete -``` - -If any items failed to sync, the following will be displayed: -``` -Sync with Microsoft OneDrive has completed, however there are items that failed to sync. -``` -A file list of failed upload or download items will also be listed to allow you to determine your next steps. - -In order to fix the upload or download failures, you may need to: -* Review the application output to determine what happened -* Re-try your command utilising a resync to ensure your system is correctly synced with your Microsoft OneDrive Account - -## Frequently Asked Configuration Questions - -### How to change the default configuration of the client? -Configuration is determined by three layers, and applied in the following order: -* Application default values -* Values that are set in the configuration file -* Values that are passed in via the command line at application runtime. These values will override any configuration file set value. - -The default application values provide a reasonable operational default, and additional configuration is entirely optional. - -If you want to change the application defaults, you can download a copy of the config file into your application configuration directory. Valid default directories for the config file are: -* `~/.config/onedrive` -* `/etc/onedrive` - -**Example:** To download a copy of the config file, use the following: -```text -mkdir -p ~/.config/onedrive -wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/onedrive/config -``` - -For full configuration options and CLI switches, please refer to application-config-options.md - -### How to change where my data from Microsoft OneDrive is stored? -By default, the location where your Microsoft OneDrive data is stored, is within your Home Directory under a directory called 'OneDrive'. This replicates as close as possible where the Microsoft Windows OneDrive client stores data. - -To change this location, the application configuration option 'sync_dir' is used to specify a new local directory where your Microsoft OneDrive data should be stored. - -**Important Note:** If your `sync_dir` is pointing to a network mount point (a network share via NFS, Windows Network Share, Samba Network Share) these types of network mount points do not support 'inotify', thus tracking real-time changes via inotify of local files is not possible when using 'Monitor Mode'. Local filesystem changes will be replicated between the local filesystem and Microsoft OneDrive based on the `monitor_interval` value. This is not something (inotify support for NFS, Samba) that this client can fix. - -### How to change what file and directory permissions are assigned to data that is downloaded from Microsoft OneDrive? -The following are the application default permissions for any new directory or file that is created locally when downloaded from Microsoft OneDrive: -* Directories: 700 - This provides the following permissions: `drwx------` -* Files: 600 - This provides the following permissions: `-rw-------` - -These default permissions align to the security principal of 'least privilege' so that only you should have access to your data that you download from Microsoft OneDrive. - -To alter these default permissions, you can adjust the values of two configuration options as follows. You can also use the [Unix Permissions Calculator](https://chmod-calculator.com/) to help you determine the necessary new permissions. -```text -sync_dir_permissions = "700" -sync_file_permissions = "600" -``` - -**Important:** Please note that special permission bits such as setuid, setgid, and the sticky bit are not supported. Valid permission values range from `000` to `777` only. - -### How are uploads and downloads managed? -The system manages downloads and uploads using a multi-threaded approach. Specifically, the application utilises 16 threads for these processes. This thread count is preset and cannot be modified by users. This design ensures efficient handling of data transfers but does not allow for customisation of thread allocation. - -### How to only sync a specific directory? -There are two methods to achieve this: -* Employ the '--single-directory' option to only sync this specific path -* Employ 'sync_list' as part of your 'config' file to configure what files and directories to sync, and what should be excluded - -### How to 'skip' files from syncing? -There are two methods to achieve this: -* Employ 'skip_file' as part of your 'config' file to configure what files to skip -* Employ 'sync_list' to configure what files and directories to sync, and what should be excluded - -### How to 'skip' directories from syncing? -There are three methods available to 'skip' a directory from the sync process: -* Employ 'skip_dir' as part of your 'config' file to configure what directories to skip -* Employ 'sync_list' to configure what files and directories to sync, and what should be excluded -* Employ 'check_nosync' as part of your 'config' file and a '.nosync' empty file within the directory to exclude to skip that directory - -### How to 'skip' .files and .folders from syncing? -There are three methods to achieve this: -* Employ 'skip_file' or 'skip_dir' to configure what files or folders to skip -* Employ 'sync_list' to configure what files and directories to sync, and what should be excluded -* Employ 'skip_dotfiles' as part of your 'config' file to skip any dot file (for example: `.Trash-1000` or `.xdg-volume-info`) from syncing to OneDrive - -### How to 'skip' files larger than a certain size from syncing? -Use `skip_size = "value"` as part of your 'config' file where files larger than this size (in MB) will be skipped. - -### How to 'rate limit' the application to control bandwidth consumed for upload & download operations? -To optimise Internet bandwidth usage during upload and download processes, include the 'rate_limit' setting in your configuration file. This setting controls the bandwidth allocated to each thread. - -By default, 'rate_limit' is set to '0', indicating that the application will utilise the maximum available bandwidth across all threads. - -To check the current 'rate_limit' value, use the `--display-config` command. - -**Note:** Since downloads and uploads are processed through multiple threads, the 'rate_limit' value applies to each thread separately. For instance, setting 'rate_limit' to 1048576 (1MB) means that during data transfers, the total bandwidth consumption might reach around 16MB, not just the 1MB configured due to the number of threads being used. - -### How can I prevent my local disk from filling up? -By default, the application will reserve 50MB of disk space to prevent your filesystem from running out of disk space. - -This default value can be modified by adding the 'space_reservation' configuration option and the applicable value as part of your 'config' file. - -You can review the value being used when using `--display-config`. - -### How does the client handle symbolic links? -Microsoft OneDrive has no concept or understanding of symbolic links, and attempting to upload a symbolic link to Microsoft OneDrive generates a platform API error. All data (files and folders) that are uploaded to OneDrive must be whole files or actual directories. - -As such, there are only two methods to support symbolic links with this client: -1. Follow the Linux symbolic link and upload whatever the local symbolic link is pointing to to Microsoft OneDrive. This is the default behaviour. -2. Skip symbolic links by configuring the application to do so. When skipping, no data, no link, no reference is uploaded to OneDrive. - -Use 'skip_symlinks' as part of your 'config' file to configure the skipping of all symbolic links while syncing. - -### How to synchronise shared folders (OneDrive Personal)? -Folders shared with you can be synchronised by adding them to your OneDrive online. To do that, open your OneDrive account online, go to the Shared files list, right-click on the folder you want to synchronise, and then click on "Add to my OneDrive". - -### How to synchronise shared folders (OneDrive Business or Office 365)? -Folders shared with you can be synchronised by adding them to your OneDrive online. To do that, open your OneDrive account online, go to the Shared files list, right-click on the folder you want to synchronise, and then click on "Add to my OneDrive". - -Refer to [./business-shared-folders.md](business-shared-folders.md) for further details. - -### How to synchronise SharePoint / Office 365 Shared Libraries? -There are two methods to achieve this: -* SharePoint library can be directly added to your OneDrive online. To do that, open your OneDrive account online, go to the Shared files list, right-click on the SharePoint Library you want to synchronise, and then click on "Add to my OneDrive". -* Configure a separate application instance to only synchronise that specific SharePoint Library. Refer to [./sharepoint-libraries.md](sharepoint-libraries.md) for configuration assistance. - -### How to Create a Shareable Link? -In certain situations, you might want to generate a shareable file link and provide this link to other users for accessing a specific file. - -To accomplish this, employ the following command: -```text -onedrive --create-share-link -``` -**Note:** By default, this access permissions for the file link will be read-only. - -To make it a read-write link, execute the following command: -```text -onedrive --create-share-link --with-editing-perms -``` -**Note:** The order of the file path and option flag is crucial. - -### How to Synchronise Both Personal and Business Accounts at once? -You need to set up separate instances of the application configuration for each account. - -Refer to [./advanced-usage.md](advanced-usage.md) for guidance on configuration. - -### How to Synchronise Multiple SharePoint Libraries simultaneously? -For each SharePoint Library, configure a separate instance of the application configuration. - -Refer to [./advanced-usage.md](advanced-usage.md) for configuration instructions. - -### How to Receive Real-time Changes from Microsoft OneDrive Service, instead of waiting for the next sync period? -When operating in 'Monitor Mode,' it may be advantageous to receive real-time updates to online data. A 'webhook' is the method to achieve this, so that when in 'Monitor Mode,' the client subscribes to remote updates. - -Remote changes can then be promptly synchronised to your local file system, without waiting for the next synchronisation cycle. - -This is accomplished by: -* Using 'webhook_enabled' as part of your 'config' file to enable this feature -* Using 'webhook_public_url' as part of your 'config' file to configure the URL the webhook will use for subscription updates - -### How to initiate the client as a background service? -There are a few ways to employ onedrive as a service: -* via init.d -* via systemd -* via runit - -#### OneDrive service running as root user via init.d -```text -chkconfig onedrive on -service onedrive start -``` -To view the logs, execute: -```text -tail -f /var/log/onedrive/.onedrive.log -``` -To alter the 'user' under which the client operates (typically root by default), manually modify the init.d service file and adjust `daemon --user root onedrive_service.sh` to match the correct user. - -#### OneDrive service running as root user via systemd (Arch, Ubuntu, Debian, OpenSuSE, Fedora) -Initially, switch to the root user with `su - root`, then activate the systemd service: -```text -systemctl --user enable onedrive -systemctl --user start onedrive -``` -**Note:** The `systemctl --user` command is not applicable to Red Hat Enterprise Linux (RHEL) or CentOS Linux platforms - see below. - -**Note:** This will execute the 'onedrive' process with a UID/GID of '0', which means any files or folders created will be owned by 'root'. - -To monitor the service's status, use the following: -```text -systemctl --user status onedrive.service -``` - -To observe the systemd application logs, use: -```text -journalctl --user-unit=onedrive -f -``` - -**Note:** For systemd to function correctly, it requires the presence of XDG environment variables. If you encounter the following error while enabling the systemd service: -```text -Failed to connect to bus: No such file or directory -``` -The most likely cause is missing XDG environment variables. To resolve this, add the following lines to `.bashrc` or another file executed upon user login: -```text -export XDG_RUNTIME_DIR="/run/user/$UID" -export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" -``` - -To apply this change, you must log out of all user accounts where it has been made. - -**Note:** On certain systems (e.g., Raspbian / Ubuntu / Debian on Raspberry Pi), the XDG fix above may not persist after system reboots. An alternative to starting the client via systemd as root is as follows: -1. Create a symbolic link from `/home/root/.config/onedrive` to `/root/.config/onedrive/`. -2. Establish a systemd service using the '@' service file: `systemctl enable onedrive@root.service`. -3. Start the root@service: `systemctl start onedrive@root.service`. - -This ensures that the service correctly restarts upon system reboot. - -To examine the systemd application logs, run: -```text -journalctl --unit=onedrive@ -f -``` - -#### OneDrive service running as root user via systemd (Red Hat Enterprise Linux, CentOS Linux) -```text -systemctl enable onedrive -systemctl start onedrive -``` -**Note:** This will execute the 'onedrive' process with a UID/GID of '0', meaning any files or folders created will be owned by 'root'. - -To view the systemd application logs, execute: -```text -journalctl --unit=onedrive -f -``` - -#### OneDrive service running as a non-root user via systemd (All Linux Distributions) -In some instances, it is preferable to run the OneDrive client as a service without the 'root' user. Follow the instructions below to configure the service for your regular user login. - -1. As the user who will run the service, launch the application in standalone mode, authorize it for use, and verify that synchronization is functioning as expected: -```text -onedrive --sync --verbose -``` -2. After validating the application for your user, switch to the 'root' user, where is your username from step 1 above. -```text -systemctl enable onedrive@.service -systemctl start onedrive@.service -``` -3. To check the service's status for the user, use the following: -```text -systemctl status onedrive@.service -``` - -To observe the systemd application logs, use: -```text -journalctl --unit=onedrive@ -f -``` - -#### OneDrive service running as a non-root user via systemd (with notifications enabled) (Arch, Ubuntu, Debian, OpenSuSE, Fedora) -In some scenarios, you may want to receive GUI notifications when using the client as a non-root user. In this case, follow these steps: - -1. Log in via the graphical UI as the user you want to enable the service for. -2. Disable any `onedrive@` service files for your username, e.g.: -```text -sudo systemctl stop onedrive@alex.service -sudo systemctl disable onedrive@alex.service -``` -3. Enable the service as follows: -```text -systemctl --user enable onedrive -systemctl --user start onedrive -``` - -To check the service's status for the user, use the following: -```text -systemctl --user status onedrive.service -``` - -To view the systemd application logs, execute: -```text -journalctl --user-unit=onedrive -f -``` - -**Note:** The `systemctl --user` command is not applicable to Red Hat Enterprise Linux (RHEL) or CentOS Linux platforms. - -#### OneDrive service running as a non-root user via runit (antiX, Devuan, Artix, Void) - -1. Create the following folder if it doesn't already exist: `/etc/sv/runsvdir-` - - - where `` is the `USER` targeted for the service - - e.g., `# mkdir /etc/sv/runsvdir-nolan` - -2. Create a file called `run` under the previously created folder with executable permissions - - - `# touch /etc/sv/runsvdir-/run` - - `# chmod 0755 /etc/sv/runsvdir-/run` - -3. Edit the `run` file with the following contents (permissions needed): - - ```sh - #!/bin/sh - export USER="" - export HOME="/home/" - - groups="$(id -Gn "${USER}" | tr ' ' ':')" - svdir="${HOME}/service" - - exec chpst -u "${USER}:${groups}" runsvdir "${svdir}" - ``` - - - Ensure you replace `` with the `USER` set in step #1. - -4. Enable the previously created folder as a service - - - `# ln -fs /etc/sv/runsvdir- /var/service/` - -5. Create a subfolder in the `USER`'s `HOME` directory to store the services (or symlinks) - - - `$ mkdir ~/service` - -6. Create a subfolder specifically for OneDrive - - - `$ mkdir ~/service/onedrive/` - -7. Create a file called `run` under the previously created folder with executable permissions - - - `$ touch ~/service/onedrive/run` - - `$ chmod 0755 ~/service/onedrive/run` - -8. Append the following contents to the `run` file - - ```sh - #!/usr/bin/env sh - exec /usr/bin/onedrive --monitor - ``` - - - In some scenarios, the path to the `onedrive` binary may vary. You can obtain it by running `$ command -v onedrive`. - -9. Reboot to apply the changes - -10. Check the status of user-defined services - - - `$ sv status ~/service/*` - -For additional details, you can refer to Void's documentation on [Per-User Services](https://docs.voidlinux.org/config/services/user-services.html). - -### How to start a user systemd service at boot without user login? -In some situations, it may be necessary for the systemd service to start without requiring your 'user' to log in. - -To address this issue, you need to reconfigure your 'user' account so that the systemd services you've created launch without the need for you to log in to your system: -```text -loginctl enable-linger -``` \ No newline at end of file diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md deleted file mode 100644 index 2701909d..00000000 --- a/docs/advanced-usage.md +++ /dev/null @@ -1,302 +0,0 @@ -# Advanced Configuration of the OneDrive Free Client -This document covers the following scenarios: -* [Configuring the client to use multiple OneDrive accounts / configurations](#configuring-the-client-to-use-multiple-onedrive-accounts--configurations) -* [Configuring the client to use multiple OneDrive accounts / configurations using Docker](#configuring-the-client-to-use-multiple-onedrive-accounts--configurations-using-docker) -* [Configuring the client for use in dual-boot (Windows / Linux) situations](#configuring-the-client-for-use-in-dual-boot-windows--linux-situations) -* [Configuring the client for use when 'sync_dir' is a mounted directory](#configuring-the-client-for-use-when-sync_dir-is-a-mounted-directory) -* [Upload data from the local ~/OneDrive folder to a specific location on OneDrive](#upload-data-from-the-local-onedrive-folder-to-a-specific-location-on-onedrive) - -## Configuring the client to use multiple OneDrive accounts / configurations -Essentially, each OneDrive account or SharePoint Shared Library which you require to be synced needs to have its own and unique configuration, local sync directory and service files. To do this, the following steps are needed: -1. Create a unique configuration folder for each onedrive client configuration that you need -2. Copy to this folder a copy of the default configuration file -3. Update the default configuration file as required, changing the required minimum config options and any additional options as needed to support your multi-account configuration -4. Authenticate the client using the new configuration directory -5. Test the configuration using '--display-config' and '--dry-run' -6. Sync the OneDrive account data as required using `--synchronize` or `--monitor` -7. Configure a unique systemd service file for this account configuration - -### 1. Create a unique configuration folder for each onedrive client configuration that you need -Make the configuration folder as required for this new configuration, for example: -```text -mkdir ~/.config/my-new-config -``` - -### 2. Copy to this folder a copy of the default configuration file -Copy to this folder a copy of the default configuration file by downloading this file from GitHub and saving this file in the directory created above: -```text -wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/my-new-config/config -``` - -### 3. Update the default configuration file -The following config options *must* be updated to ensure that individual account data is not cross populated with other OneDrive accounts or other configurations: -* sync_dir - -Other options that may require to be updated, depending on the OneDrive account that is being configured: -* drive_id -* application_id -* sync_business_shared_folders -* skip_dir -* skip_file -* Creation of a 'sync_list' file if required -* Creation of a 'business_shared_folders' file if required - -### 4. Authenticate the client -Authenticate the client using the specific configuration file: -```text -onedrive --confdir="~/.config/my-new-config" -``` -You will be asked to open a specific URL by using your web browser where you will have to login into your Microsoft Account and give the application the permission to access your files. After giving permission to the application, you will be redirected to a blank page. Copy the URI of the blank page into the application. -```text -[user@hostname ~]$ onedrive --confdir="~/.config/my-new-config" -Configuration file successfully loaded -Configuring Global Azure AD Endpoints -Authorize this app visiting: - -https://..... - -Enter the response uri: - -``` - -### 5. Display and Test the configuration -Test the configuration using '--display-config' and '--dry-run'. By doing so, this allows you to test any configuration that you have currently made, enabling you to fix this configuration before using the configuration. - -#### Display the configuration -```text -onedrive --confdir="~/.config/my-new-config" --display-config -``` - -#### Test the configuration by performing a dry-run -```text -onedrive --confdir="~/.config/my-new-config" --synchronize --verbose --dry-run -``` - -If both of these operate as per your expectation, the configuration of this client setup is complete and validated. If not, amend your configuration as required. - -### 6. Sync the OneDrive account data as required -Sync the data for the new account configuration as required: -```text -onedrive --confdir="~/.config/my-new-config" --synchronize --verbose -``` -or -```text -onedrive --confdir="~/.config/my-new-config" --monitor --verbose -``` - -* `--synchronize` does a one-time sync -* `--monitor` keeps the application running and monitoring for changes both local and remote - -### 7. Automatic syncing of new OneDrive configuration -In order to automatically start syncing your OneDrive accounts, you will need to create a service file for each account. From the applicable 'systemd folder' where the applicable systemd service file exists: -* RHEL / CentOS: `/usr/lib/systemd/system` -* Others: `/usr/lib/systemd/user` and `/lib/systemd/system` - -### Step1: Create a new systemd service file -#### Red Hat Enterprise Linux, CentOS Linux -Copy the required service file to a new name: -```text -sudo cp /usr/lib/systemd/system/onedrive.service /usr/lib/systemd/system/onedrive-my-new-config -``` -or -```text -sudo cp /usr/lib/systemd/system/onedrive@.service /usr/lib/systemd/system/onedrive-my-new-config@.service -``` - -#### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora -Copy the required service file to a new name: -```text -sudo cp /usr/lib/systemd/user/onedrive.service /usr/lib/systemd/user/onedrive-my-new-config.service -``` -or -```text -sudo cp /lib/systemd/system/onedrive@.service /lib/systemd/system/onedrive-my-new-config@.service -``` - -### Step 2: Edit new systemd service file -Edit the new systemd file, updating the line beginning with `ExecStart` so that the confdir mirrors the one you used above: -```text -ExecStart=/usr/local/bin/onedrive --monitor --confdir="/full/path/to/config/dir" -``` - -Example: -```text -ExecStart=/usr/local/bin/onedrive --monitor --confdir="/home/myusername/.config/my-new-config" -``` - -**Note:** When running the client manually, `--confdir="~/.config/......` is acceptable. In a systemd configuration file, the full path must be used. The `~` must be expanded. - -### Step 3: Enable the new systemd service -Once the file is correctly editied, you can enable the new systemd service using the following commands. - -#### Red Hat Enterprise Linux, CentOS Linux -```text -systemctl enable onedrive-my-new-config -systemctl start onedrive-my-new-config -``` - -#### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora -```text -systemctl --user enable onedrive-my-new-config -systemctl --user start onedrive-my-new-config -``` -or -```text -systemctl --user enable onedrive-my-new-config@myusername.service -systemctl --user start onedrive-my-new-config@myusername.service -``` - -### Step 4: Viewing systemd status and logs for the custom service -#### Viewing systemd service status - Red Hat Enterprise Linux, CentOS Linux -```text -systemctl status onedrive-my-new-config -``` - -#### Viewing systemd service status - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora -```text -systemctl --user status onedrive-my-new-config -``` - -#### Viewing journalctl systemd logs - Red Hat Enterprise Linux, CentOS Linux -```text -journalctl --unit=onedrive-my-new-config -f -``` - -#### Viewing journalctl systemd logs - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora -```text -journalctl --user --unit=onedrive-my-new-config -f -``` - -### Step 5: (Optional) Run custom systemd service at boot without user login -In some cases it may be desirable for the systemd service to start without having to login as your 'user' - -All the systemd steps above that utilise the `--user` option, will run the systemd service as your particular user. As such, the systemd service will not start unless you actually login to your system. - -To avoid this issue, you need to reconfigure your 'user' account so that the systemd services you have created will startup without you having to login to your system: -```text -loginctl enable-linger -``` - -Example: -```text -alex@ubuntu-headless:~$ loginctl enable-linger alex -``` - -Repeat these steps for each OneDrive new account that you wish to use. - -## Configuring the client to use multiple OneDrive accounts / configurations using Docker -In some situations it may be desirable to run multiple Docker containers at the same time, each with their own configuration. - -To run the Docker container successfully, it needs two unique Docker volumes to operate: -* Your configuration Docker volumes -* Your data Docker volume - -When running multiple Docker containers, this is no different - each Docker container must have it's own configuration and data volume. - -### High level steps: -1. Create the required unique Docker volumes for the configuration volume -2. Create the required unique local path used for the Docker data volume -3. Start the multiple Docker containers with the required configuration for each container - -#### Create the required unique Docker volumes for the configuration volume -Create the required unique Docker volumes for the configuration volume(s): -```text -docker volume create onedrive_conf_sharepoint_site1 -docker volume create onedrive_conf_sharepoint_site2 -docker volume create onedrive_conf_sharepoint_site3 -... -docker volume create onedrive_conf_sharepoint_site50 -``` - -#### Create the required unique local path used for the Docker data volume -Create the required unique local path used for the Docker data volume -```text -mkdir -p /use/full/local/path/no/tilda/SharePointSite1 -mkdir -p /use/full/local/path/no/tilda/SharePointSite2 -mkdir -p /use/full/local/path/no/tilda/SharePointSite3 -... -mkdir -p /use/full/local/path/no/tilda/SharePointSite50 -``` - -#### Start the Docker container with the required configuration (example) -```text -docker run -it --name onedrive -v onedrive_conf_sharepoint_site1:/onedrive/conf -v "/use/full/local/path/no/tilda/SharePointSite1:/onedrive/data" driveone/onedrive:latest -docker run -it --name onedrive -v onedrive_conf_sharepoint_site2:/onedrive/conf -v "/use/full/local/path/no/tilda/SharePointSite2:/onedrive/data" driveone/onedrive:latest -docker run -it --name onedrive -v onedrive_conf_sharepoint_site3:/onedrive/conf -v "/use/full/local/path/no/tilda/SharePointSite3:/onedrive/data" driveone/onedrive:latest -... -docker run -it --name onedrive -v onedrive_conf_sharepoint_site50:/onedrive/conf -v "/use/full/local/path/no/tilda/SharePointSite50:/onedrive/data" driveone/onedrive:latest -``` - -#### TIP -To avoid 're-authenticating' and 'authorising' each individual Docker container, if all the Docker containers are using the 'same' OneDrive credentials, you can re-use the 'refresh_token' from one Docker container to another by copying this file to the configuration Docker volume of each Docker container. - -If the account credentials are different .. you will need to re-authenticate each Docker container individually. - -## Configuring the client for use in dual-boot (Windows / Linux) situations -When dual booting Windows and Linux, depending on the Windows OneDrive account configuration, the 'Files On-Demand' option may be enabled when running OneDrive within your Windows environment. - -When this option is enabled in Windows, if you are sharing this location between your Windows and Linux systems, all files will be a 0 byte link, and cannot be used under Linux. - -To fix the problem of windows turning all files (that should be kept offline) into links, you have to uncheck a specific option in the onedrive settings window. The option in question is `Save space and download files as you use them`. - -To find this setting, open the onedrive pop-up window from the taskbar, click "Help & Settings" > "Settings". This opens a new window. Go to the tab "Settings" and look for the section "Files On-Demand". - -After unchecking the option and clicking "OK", the Windows OneDrive client should restart itself and start actually downloading your files so they will truely be available on your disk when offline. These files will then be fully accessible under Linux and the Linux OneDrive client. - -| OneDrive Personal | Onedrive Business
SharePoint | -|---|---| -| ![Uncheck-Personal](./images/personal-files-on-demand.png) | ![Uncheck-Business](./images/business-files-on-demand.png) | - -## Configuring the client for use when 'sync_dir' is a mounted directory -In some environments, your setup might be that your configured 'sync_dir' is pointing to another mounted file system - a NFS|CIFS location, an external drive (USB stuc, eSATA etc). As such, you configure your 'sync_dir' as follows: -```text -sync_dir = "/path/to/mountpoint/OneDrive" -``` - -The issue here is - how does the client react if the mount point gets removed - network loss, device removal? - -The client has zero knowledge of any event that causes a mountpoint to become unavailable, thus, the client (if you are running as a service) will assume that you deleted the files, thus, will go ahead and delete all your files on OneDrive. This is most certainly an undesirable action. - -There are a few options here which you can configure in your 'config' file to assist you to prevent this sort of item from occuring: -1. classify_as_big_delete -2. check_nomount -3. check_nosync - -**Note:** Before making any change to your configuration, stop any sync process & stop any onedrive systemd service from running. - -### classify_as_big_delete -By default, this uses a value of 1000 files|folders. An undesirable unmount if you have more than 1000 files, this default level will prevent the client from executing the online delete. Modify this value up or down as desired - -### check_nomount & check_nosync -These two options are really the right safe guards to use. - -In your 'mount point', *before* you mount your external folder|device, create empty `.nosync` file, so that this is the *only* file present in the mount location before you mount your data to your mount point. When you mount your data, this '.nosync' file will not be visible, but, if the device you are mounting goes away - this '.nosync' file is the only file visible. - -Next, in your 'config' file, configure the following options: `check_nomount = "true"` and `check_nosync = "true"` - -What this will do is tell the client, if at *any* point you see this file - stop syncing - thus, protecting your online data from being deleted by the mounted device being suddenly unavailable. - -After making this sort of change - test with `--dry-run` so you can see the impacts of your mount point being unavailable, and how the client is now reacting. Once you are happy with how the system will react, restart your sync processes. - - -## Upload data from the local ~/OneDrive folder to a specific location on OneDrive -In some environments, you may not want your local ~/OneDrive folder to be uploaded directly to the root of your OneDrive account online. - -Unfortunatly, the OneDrive API lacks any facility to perform a re-direction of data during upload. - -The workaround for this is to structure your local filesystem and reconfigure your client to achieve the desired goal. - -### High level steps: -1. Create a new folder, for example `/opt/OneDrive` -2. Configure your application config 'sync_dir' to look at this folder -3. Inside `/opt/OneDrive` create the folder you wish to sync the data online to, for example: `/opt/OneDrive/RemoteOnlineDestination` -4. Configure the application to only sync `/opt/OneDrive/RemoteDestination` via 'sync_list' -5. Symbolically link `~/OneDrive` -> `/opt/OneDrive/RemoteOnlineDestination` - -### Outcome: -* Your `~/OneDrive` will look / feel as per normal -* The data will be stored online under `/RemoteOnlineDestination` - -### Testing: -* Validate your configuration with `onedrive --display-config` -* Test your configuration with `onedrive --dry-run` diff --git a/docs/application-config-options.md b/docs/application-config-options.md deleted file mode 100644 index 31b50614..00000000 --- a/docs/application-config-options.md +++ /dev/null @@ -1,1075 +0,0 @@ -# Application Configuration Options for the OneDrive Client for Linux -## Application Version -Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. - -## Table of Contents - -- [Configuration File Options](#configuration-file-options) - - [application_id](#application_id) - - [azure_ad_endpoint](#azure_ad_endpoint) - - [azure_tenant_id](#azure_tenant_id) - - [bypass_data_preservation](#bypass_data_preservation) - - [check_nomount](#check_nomount) - - [check_nosync](#check_nosync) - - [classify_as_big_delete](#classify_as_big_delete) - - [cleanup_local_files](#cleanup_local_files) - - [connect_timeout](#connect_timeout) - - [data_timeout](#data_timeout) - - [debug_https](#debug_https) - - [disable_download_validation](#disable_download_validation) - - [disable_notifications](#disable_notifications) - - [disable_upload_validation](#disable_upload_validation) - - [display_running_config](#display_running_config) - - [dns_timeout](#dns_timeout) - - [download_only](#download_only) - - [drive_id](#drive_id) - - [dry_run](#dry_run) - - [enable_logging](#enable_logging) - - [force_http_11](#force_http_11) - - [ip_protocol_version](#ip_protocol_version) - - [local_first](#local_first) - - [log_dir](#log_dir) - - [monitor_fullscan_frequency](#monitor_fullscan_frequency) - - [monitor_interval](#monitor_interval) - - [monitor_log_frequency](#monitor_log_frequency) - - [no_remote_delete](#no_remote_delete) - - [operation_timeout](#operation_timeout) - - [rate_limit](#rate_limit) - - [read_only_auth_scope](#read_only_auth_scope) - - [remove_source_files](#remove_source_files) - - [resync](#resync) - - [resync_auth](#resync_auth) - - [skip_dir](#skip_dir) - - [skip_dir_strict_match](#skip_dir_strict_match) - - [skip_dotfiles](#skip_dotfiles) - - [skip_file](#skip_file) - - [skip_size](#skip_size) - - [skip_symlinks](#skip_symlinks) - - [space_reservation](#space_reservation) - - [sync_business_shared_items](#sync_business_shared_items) - - [sync_dir](#sync_dir) - - [sync_dir_permissions](#sync_dir_permissions) - - [sync_file_permissions](#sync_file_permissions) - - [sync_root_files](#sync_root_files) - - [upload_only](#upload_only) - - [user_agent](#user_agent) - - [webhook_enabled](#webhook_enabled) - - [webhook_expiration_interval](#webhook_expiration_interval) - - [webhook_listening_host](#webhook_listening_host) - - [webhook_listening_port](#webhook_listening_port) - - [webhook_public_url](#webhook_public_url) - - [webhook_renewal_interval](#webhook_renewal_interval) -- [Command Line Interface (CLI) Only Options](#command-line-interface-cli-only-options) - - [CLI Option: --auth-files](#cli-option---auth-files) - - [CLI Option: --auth-response](#cli-option---auth-response) - - [CLI Option: --confdir](#cli-option---confdir) - - [CLI Option: --create-directory](#cli-option---create-directory) - - [CLI Option: --create-share-link](#cli-option---create-share-link) - - [CLI Option: --destination-directory](#cli-option---destination-directory) - - [CLI Option: --display-config](#cli-option---display-config) - - [CLI Option: --display-sync-status](#cli-option---display-sync-status) - - [CLI Option: --display-quota](#cli-option---display-quota) - - [CLI Option: --force](#cli-option---force) - - [CLI Option: --force-sync](#cli-option---force-sync) - - [CLI Option: --get-file-link](#cli-option---get-file-link) - - [CLI Option: --get-sharepoint-drive-id](#cli-option---get-sharepoint-drive-id) - - [CLI Option: --logout](#cli-option---logout) - - [CLI Option: --modified-by](#cli-option---modified-by) - - [CLI Option: --monitor | -m](#cli-option---monitor--m) - - [CLI Option: --print-access-token](#cli-option---print-access-token) - - [CLI Option: --reauth](#cli-option---reauth) - - [CLI Option: --remove-directory](#cli-option---remove-directory) - - [CLI Option: --single-directory](#cli-option---single-directory) - - [CLI Option: --source-directory](#cli-option---source-directory) - - [CLI Option: --sync | -s](#cli-option---sync--s) - - [CLI Option: --verbose | -v+](#cli-option---verbose--v) - - [CLI Option: --with-editing-perms](#cli-option---with-editing-perms) -- [Depreciated Configuration File and CLI Options](#depreciated-configuration-file-and-cli-options) - - [min_notify_changes](#min_notify_changes) - - [CLI Option: --synchronize](#cli-option---synchronize) - - -## Configuration File Options - -### application_id -_**Description:**_ This is the config option for application id that used used to identify itself to Microsoft OneDrive. In some circumstances, it may be desirable to use your own application id. To do this, you must register a new application with Microsoft Azure via https://portal.azure.com/, then use your new application id with this config option. - -_**Value Type:**_ String - -_**Default Value:**_ d50ca740-c83f-4d1b-b616-12c519384f0c - -_**Config Example:**_ `application_id = "d50ca740-c83f-4d1b-b616-12c519384f0c"` - -### azure_ad_endpoint -_**Description:**_ This is the config option to change the Microsoft Azure Authentication Endpoint that the client uses to conform with data and security requirements that requires data to reside within the geographic borders of that country. - -_**Value Type:**_ String - -_**Default Value:**_ *Empty* - not required for normal operation - -_**Valid Values:**_ USL4, USL5, DE, CN - -_**Config Example:**_ `azure_ad_endpoint = "DE"` - -### azure_tenant_id -_**Description:**_ This config option allows the locking of the client to a specific single tenant and will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common". The tenant id may be the GUID Directory ID or the fully qualified tenant name. - -_**Value Type:**_ String - -_**Default Value:**_ *Empty* - not required for normal operation - -_**Config Example:**_ `azure_tenant_id = "example.onmicrosoft.us"` or `azure_tenant_id = "0c4be462-a1ab-499b-99e0-da08ce52a2cc"` - -_**Additional Usage Requirement:**_ Must be configured if 'azure_ad_endpoint' is configured. - -### bypass_data_preservation -_**Description:**_ This config option allows the disabling of preserving local data by renaming the local file in the event of data conflict. If this is enabled, you will experience data loss on your local data as the local file will be over-written with data from OneDrive online. Use with care and caution. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `bypass_data_preservation = "false"` or `bypass_data_preservation = "true"` - -### check_nomount -_**Description:**_ This config option is useful to prevent application startup & ongoing use in 'Monitor Mode' if the configured 'sync_dir' is a separate disk that is being mounted by your system. This option will check for the presence of a `.nosync` file in your mount point, and if present, abort any sync process to preserve data. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `check_nomount = "false"` or `check_nomount = "true"` - -_**CLI Option:**_ `--check-for-nomount` - -_**Additional Usage Requirement:**_ Create a `.nosync` file in your mount point *before* you mount your disk so that this is visible, in your mount point if your disk is unmounted. - -### check_nosync -_**Description:**_ This config option is useful to prevent the sync of a *local* directory to Microsoft OneDrive. It will *not* check for this file online to prevent the download of directories to your local system. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `check_nosync = "false"` or `check_nosync = "true"` - -_**CLI Option Use:**_ `--check-for-nosync` - -_**Additional Usage Requirement:**_ Create a `.nosync` file in any *local* directory that you wish to not sync to Microsoft OneDrive when you enable this option. - -### classify_as_big_delete -_**Description:**_ This config option defines the number of children in a path that is locally removed which will be classified as a 'big data delete' to safeguard large data removals - which are typically accidental local delete events. - -_**Value Type:**_ Integer - -_**Default Value:**_ 1000 - -_**Config Example:**_ `classify_as_big_delete = "2000"` - -_**CLI Option Use:**_ `--classify-as-big-delete 2000` - -_**Additional Usage Requirement:**_ If this option is triggered, you will need to add `--force` to force a sync to occur. - -### cleanup_local_files -_**Description:**_ This config option provides the capability to cleanup local files and folders if they are removed online. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `cleanup_local_files = "false"` or `cleanup_local_files = "true"` - -_**CLI Option Use:**_ `--cleanup-local-files` - -_**Additional Usage Requirement:**_ This configuration option can only be used with 'download_only'. It cannot be used with any other application option. - -### connect_timeout -_**Description:**_ This configuration setting manages the TCP connection timeout duration in seconds for HTTPS connections to Microsoft OneDrive when using the curl library. - -_**Value Type:**_ Integer - -_**Default Value:**_ 30 - -_**Config Example:**_ `connect_timeout = "20"` - -### data_timeout -_**Description:**_ This setting controls the timeout duration, in seconds, for when data is not received on an active connection to Microsoft OneDrive over HTTPS when using the curl library, before that connection is timeout out. - -_**Value Type:**_ Integer - -_**Default Value:**_ 240 - -_**Config Example:**_ `data_timeout = "300"` - -### debug_https -_**Description:**_ This setting controls whether the curl library is configured to output additional data to assist with diagnosing HTTPS issues and problems. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `debug_https = "false"` or `debug_https = "true"` - -_**CLI Option Use:**_ `--debug-https` - -_**Additional Usage Notes:**_ Whilst this option can be used at any time, it is advisable that you only use this option when advised as this will output your `Authorization: bearer` - which is your authentication token to Microsoft OneDrive. - -### disable_download_validation -_**Description:**_ This option determines whether the client will conduct integrity validation on files downloaded from Microsoft OneDrive. Sometimes, when downloading files, particularly from SharePoint, there is a discrepancy between the file size reported by the OneDrive API and the byte count received from the SharePoint HTTP Server for the same file. Enable this option to disable the integrity checks performed by this client. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `disable_download_validation = "false"` or `disable_download_validation = "true"` - -_**CLI Option Use:**_ `--disable-download-validation` - -_**Additional Usage Notes:**_ If you're downloading data from SharePoint or OneDrive Business Shared Folders, you might find it necessary to activate this option. It's important to note that any issues encountered aren't due to a problem with this client; instead, they should be regarded as issues with the Microsoft OneDrive technology stack. - -### disable_notifications -_**Description:**_ This setting controls whether GUI notifications are sent from the client to your display manager session. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `disable_notifications = "false"` or `disable_notifications = "true"` - -_**CLI Option Use:**_ `--disable-notifications` - -### disable_upload_validation -_**Description:**_ This option determines whether the client will conduct integrity validation on files uploaded to Microsoft OneDrive. Sometimes, when uploading files, particularly to SharePoint, SharePoint will modify your file post upload by adding new data to your file which breaks the integrity checking of the upload performed by this client. Enable this option to disable the integrity checks performed by this client. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `disable_upload_validation = "false"` or `disable_upload_validation = "true"` - -_**CLI Option Use:**_ `--disable-upload-validation` - -_**Additional Usage Notes:**_ If you're uploading data to SharePoint or OneDrive Business Shared Folders, you might find it necessary to activate this option. It's important to note that any issues encountered aren't due to a problem with this client; instead, they should be regarded as issues with the Microsoft OneDrive technology stack. - -### display_running_config -_**Description:**_ This option will include the running config of the application at application startup. This may be desirable to enable when running in containerised environments so that any application logging that is occuring, will have the application configuration being consumed at startup, written out to any applicable log file. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `display_running_config = "false"` or `display_running_config = "true"` - -_**CLI Option Use:**_ `--display-running-config` - -### dns_timeout -_**Description:**_ This setting controls the libcurl DNS cache value. By default, libcurl caches this info for 60 seconds. This libcurl DNS cache timeout is entirely speculative that a name resolves to the same address for a small amount of time into the future as libcurl does not use DNS TTL properties. We recommend users not to tamper with this option unless strictly necessary. - -_**Value Type:**_ Integer - -_**Default Value:**_ 60 - -_**Config Example:**_ `dns_timeout = "90"` - -### download_only -_**Description:**_ This setting forces the client to only download data from Microsoft OneDrive and replicate that data locally. No changes made locally will be uploaded to Microsoft OneDrive when using this option. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `download_only = "false"` or `download_only = "true"` - -_**CLI Option Use:**_ `--download-only` - -### drive_id -_**Description:**_ This setting controls the specific drive identifier the client will use when syncing with Microsoft OneDrive. - -_**Value Type:**_ String - -_**Default Value:**_ *None* - -_**Config Example:**_ `drive_id = "b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB"` - -_**Additional Usage Notes:**_ This option is typically only used when configuring the client to sync a specific SharePoint Library. If this configuration option is specified in your config file, a value must be specified otherwise the application will exit citing a fatal error has occured. - -### dry_run -_**Description:**_ This setting controls the application capability to test your application configuration without actually performing any actual activity (download, upload, move, delete, folder creation). - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `dry_run = "false"` or `dry_run = "true"` - -_**CLI Option Use:**_ `--dry-run` - -### enable_logging -_**Description:**_ This setting controls the application logging all actions to a separate file. By default, all log files will be written to `/var/log/onedrive`, however this can changed by using the 'log_dir' config option - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `enable_logging = "false"` or `enable_logging = "true"` - -_**CLI Option Use:**_ `--enable-logging` - -_**Additional Usage Notes:**_ Additional configuration is potentially required to configure the default log directory. Refer to usage.md for details (ADD LINK) - -### force_http_11 -_**Description:**_ This setting controls the application HTTP protocol version. By default, the application will use libcurl defaults for which HTTP prodocol version will be used to interact with Microsoft OneDrive. Use this setting to downgrade libcurl to only use HTTP/1.1. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `force_http_11 = "false"` or `force_http_11 = "true"` - -_**CLI Option Use:**_ `--force-http-11` - -### ip_protocol_version -_**Description:**_ This setting controls the application IP protocol that should be used when communicating with Microsoft OneDrive. The default is to use IPv4 and IPv6 networks for communicating to Microsoft OneDrive. - -_**Value Type:**_ Integer - -_**Default Value:**_ 0 - -_**Valid Values:**_ 0 = IPv4 + IPv6, 1 = IPv4 Only, 2 = IPv6 Only - -_**Config Example:**_ `ip_protocol_version = "0"` or `ip_protocol_version = "1"` or `ip_protocol_version = "2"` - -_**Additional Usage Notes:**_ In some environments where IPv4 and IPv6 are configured at the same time, this causes resolution and routing issues to Microsoft OneDrive. If this is the case, it is advisable to change 'ip_protocol_version' to match your environment. - -### local_first -_**Description:**_ This setting controls what the application considers the 'source of truth' for your data. By default, what is stored online will be considered as the 'source of truth' when syncing to your local machine. When using this option, your local data will be considered the 'source of truth'. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `local_first = "false"` or `local_first = "true"` - -_**CLI Option Use:**_ `--local-first` - -### log_dir -_**Description:**_ This setting controls the custom application log path when 'enable_logging' has been enabled. By default, all log files will be written to `/var/log/onedrive`. - -_**Value Type:**_ String - -_**Default Value:**_ *None* - -_**Config Example:**_ `log_dir = "~/logs/"` - -_**CLI Option Use:**_ `--log-dir "~/logs/"` - -### monitor_fullscan_frequency -_**Description:**_ This configuration option controls the number of 'monitor_interval' iterations between when a full scan of your data is performed to ensure data integrity and consistency. - -_**Value Type:**_ Integer - -_**Default Value:**_ 12 - -_**Config Example:**_ `monitor_fullscan_frequency = "24"` - -_**CLI Option Use:**_ `--monitor-fullscan-frequency '24'` - -_**Additional Usage Notes:**_ By default without configuration, 'monitor_fullscan_frequency' is set to 12. In this default state, this means that a full scan is performed every 'monitor_interval' x 'monitor_fullscan_frequency' = 3600 seconds. This setting is only applicable when running in `--monitor` mode. Setting this configuration option to '0' will *disable* the full scan of your data online. - -### monitor_interval -_**Description:**_ This configuration setting determines how often the synchronisation loops run in --monitor mode, measured in seconds. When this time period elapses, the client will check for online changes in Microsoft OneDrive, conduct integrity checks on local data and scan the local 'sync_dir' to identify any new content that hasn't been uploaded yet. - -_**Value Type:**_ Integer - -_**Default Value:**_ 300 - -_**Config Example:**_ `monitor_interval = "600"` - -_**CLI Option Use:**_ `--monitor-interval '600'` - -_**Additional Usage Notes:**_ A minimum value of 300 is enforced for this configuration setting. - -### monitor_log_frequency -_**Description:**_ This configuration option controls the suppression of frequently printed log items to the system console when using `--monitor` mode. The aim of this configuration item is to reduce the log output when near zero sync activity is occuring. - -_**Value Type:**_ Integer - -_**Default Value:**_ 12 - -_**Config Example:**_ `monitor_log_frequency = "24"` - -_**CLI Option Use:**_ `--monitor-log-frequency '24'` - -_**Additional Usage Notes:**_ - -By default, at application start-up when using `--monitor` mode, the following will be logged to indicate that the application has correctly started and has performed all the initial processing steps: -```text -Reading configuration file: /home/user/.config/onedrive/config -Configuration file successfully loaded -Configuring Global Azure AD Endpoints -Sync Engine Initialised with new Onedrive API instance -All application operations will be performed in: /home/user/OneDrive -OneDrive synchronisation interval (seconds): 300 -Initialising filesystem inotify monitoring ... -Performing initial syncronisation to ensure consistent local state ... -Starting a sync with Microsoft OneDrive -Fetching items from the OneDrive API for Drive ID: b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB .. -Processing changes and items received from Microsoft OneDrive ... -Performing a database consistency and integrity check on locally stored data ... -Scanning the local file system '~/OneDrive' for new data to upload ... -Performing a final true-up scan of online data from Microsoft OneDrive -Fetching items from the OneDrive API for Drive ID: b!bO8V6s9SSk9R7mWhpIjUrotN73WlW3tEv3OxP_QfIdQimEdOHR-1So6CqeG1MfDB .. -Processing changes and items received from Microsoft OneDrive ... -Sync with Microsoft OneDrive is complete -``` -Then, based on 'monitor_log_frequency', the following output will be logged until the suppression loop value is reached: -```text -Starting a sync with Microsoft OneDrive -Syncing changes from Microsoft OneDrive ... -Sync with Microsoft OneDrive is complete -``` -**Note:** The additional log output `Performing a database consistency and integrity check on locally stored data ...` will only be displayed when this activity is occuring which is triggered by 'monitor_fullscan_frequency'. - -**Note:** If verbose application output is being used (`--verbose`), then this configuration setting has zero effect, as application verbose output takes priority over application output surpression. - -### no_remote_delete -_**Description:**_ This configuration option controls whether local file and folder deletes are actioned on Microsoft OneDrive. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `local_first = "false"` or `local_first = "true"` - -_**CLI Option Use:**_ `--no-remote-delete` - -_**Additional Usage Notes:**_ This configuration option can *only* be used in conjunction with `--upload-only` - -### operation_timeout -_**Description:**_ This configuration option controls the maximum amount of time (seconds) a file operation is allowed to take. This includes DNS resolution, connecting, data transfer, etc. We recommend users not to tamper with this option unless strictly necessary. - -_**Value Type:**_ Integer - -_**Default Value:**_ 3600 - -_**Config Example:**_ `operation_timeout = "3600"` - -### rate_limit -_**Description:**_ This configuration option controls the bandwidth used by the application, per thread, when interacting with Microsoft OneDrive. - -_**Value Type:**_ Integer - -_**Default Value:**_ 0 (unlimited, use available bandwidth per thread) - -_**Valid Values:**_ Valid tested values for this configuration option are as follows: - -* 131072 = 128 KB/s - absolute minimum for basic application operations to prevent timeouts -* 262144 = 256 KB/s -* 524288 = 512 KB/s -* 1048576 = 1 MB/s -* 10485760 = 10 MB/s -* 104857600 = 100 MB/s - -_**Config Example:**_ `rate_limit = "131072"` - -### read_only_auth_scope -_**Description:**_ This configuration option controls whether the OneDrive Client for Linux operates in a totally in read-only operation. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `read_only_auth_scope = "false"` or `read_only_auth_scope = "true"` - -_**Additional Usage Notes:**_ When using 'read_only_auth_scope' you also will need to remove your existing application access consent otherwise old authentication consent will be valid and will be used. This will mean the application will technically have the consent to upload data until you revoke this consent. - -### remove_source_files -_**Description:**_ This configuration option controls whether the OneDrive Client for Linux removes the local file post successful transfer to Microsoft OneDrive. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `remove_source_files = "false"` or `remove_source_files = "true"` - -_**CLI Option Use:**_ `--remove-source-files` - -_**Additional Usage Notes:**_ This configuration option can *only* be used in conjunction with `--upload-only` - -### resync -_**Description:**_ This configuration option controls whether the known local sync state with Microsoft OneDrive is removed at application startup. When this option is used, a full scan of your data online is performed to ensure that the local sync state is correctly built back up. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `resync = "false"` or `resync = "true"` - -_**CLI Option Use:**_ `--resync` - -_**Additional Usage Notes:**_ It's highly recommended to use this option only if the application prompts you to do so. Don't blindly use this option as a default option. If you alter any of the subsequent configuration items, you will be required to execute a `--resync` to make sure your client is syncing your data with the updated configuration: -* drive_id -* sync_dir -* skip_file -* skip_dir -* skip_dotfiles -* skip_symlinks -* sync_business_shared_items -* Creating, Modifying or Deleting the 'sync_list' file - -### resync_auth -_**Description:**_ This configuration option controls the approval of performing a 'resync' which can be beneficial in automated environments. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `resync_auth = "false"` or `resync_auth = "true"` - -_**CLI Option Use:**_ `--resync-auth` - -_**Additional Usage Notes:**_ In certain automated environments (assuming you know what you're doing due to automation), to avoid the 'proceed with acknowledgement' resync requirement, this option allows you to automatically acknowledge the resync prompt. - -### skip_dir -_**Description:**_ This configuration option controls whether the application skips certain directories from being synced. Directories can be specified in 2 ways: - -* As a single entry. This will search the respective path for this entry and skip all instances where this directory is present, where ever it may exist. -* As a full path entry. This will skip the explicit path as set. - -**Important:** Entries for 'skip_dir' are *relative* to your 'sync_dir' path. - -_**Value Type:**_ String - -_**Default Value:**_ *Empty* - not required for normal operation - -_**Config Example:**_ - -Patterns are case insensitive. `*` and `?` [wildcards characters](https://technet.microsoft.com/en-us/library/bb490639.aspx) are supported. Use `|` to separate multiple patterns. - -```text -skip_dir = "Desktop|Documents/IISExpress|Documents/SQL Server Management Studio|Documents/Visual Studio*|Documents/WindowsPowerShell|.Rproj-user" -``` - -The 'skip_dir' option can also be specified multiple times within your config file, for example: -```text -skip_dir = "SkipThisDirectoryAnywhere" -skip_dir = ".SkipThisOtherDirectoryAnywhere" -skip_dir = "/Explicit/Path/To/A/Directory" -skip_dir = "/Another/Explicit/Path/To/Different/Directory" -``` - -This will be interpreted the same as: -```text -skip_dir = "SkipThisDirectoryAnywhere|.SkipThisOtherDirectoryAnywhere|/Explicit/Path/To/A/Directory|/Another/Explicit/Path/To/Different/Directory" -``` - -_**CLI Option Use:**_ `--skip-dir 'SkipThisDirectoryAnywhere|.SkipThisOtherDirectoryAnywhere|/Explicit/Path/To/A/Directory|/Another/Explicit/Path/To/Different/Directory'` - -_**Additional Usage Notes:**_ This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. If using the config file and CLI option is used, the CLI option will *replace* the config file entries. After changing or modifying this option, you will be required to perform a resync. - -### skip_dir_strict_match -_**Description:**_ This configuration option controls whether the application performs strict directory matching when checking 'skip_dir' items. When enabled, the 'skip_dir' item must be a full path match to the path to be skipped. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `skip_dir_strict_match = "false"` or `skip_dir_strict_match = "true"` - -_**CLI Option Use:**_ `--skip-dir-strict-match` - -### skip_dotfiles -_**Description:**_ This configuration option controls whether the application will skip all .files and .folders when performing sync operations. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `skip_dotfiles = "false"` or `skip_dotfiles = "true"` - -_**CLI Option Use:**_ `--skip-dot-files` - -_**Additional Usage Notes:**_ This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. - -### skip_file -_**Description:**_ This configuration option controls whether the application skips certain files from being synced. - -_**Value Type:**_ String - -_**Default Value:**_ `~*|.~*|*.tmp|*.swp|*.partial` - -_**Config Example:**_ - -Patterns are case insensitive. `*` and `?` [wildcards characters](https://technet.microsoft.com/en-us/library/bb490639.aspx) are supported. Use `|` to separate multiple patterns. - -By default, the following files will be skipped: -* Files that start with ~ -* Files that start with .~ (like .~lock.* files generated by LibreOffice) -* Files that end in .tmp, .swp and .partial - -Files can be skipped in the following fashion: -* Specify a wildcard, eg: '*.txt' (skip all txt files) -* Explicitly specify the filename and it's full path relative to your sync_dir, eg: '/path/to/file/filename.ext' -* Explicitly specify the filename only and skip every instance of this filename, eg: 'filename.ext' - -```text -# When changing a config option below, remove the '#' from the start of the line -# For explanations of all config options below see docs/USAGE.md or the man page. -# -# sync_dir = "~/OneDrive" -skip_file = "~*|/Documents/OneNote*|/Documents/config.xlaunch|myfile.ext|/Documents/keepass.kdbx" -# monitor_interval = "300" -# skip_dir = "" -# log_dir = "/var/log/onedrive/" -``` -The 'skip_file' option can be specified multiple times within your config file, for example: -```text -skip_file = "~*|.~*|*.tmp|*.swp" -skip_file = "*.blah" -skip_file = "never_sync.file" -skip_file = "/Documents/keepass.kdbx" -``` -This will be interpreted the same as: -```text -skip_file = "~*|.~*|*.tmp|*.swp|*.blah|never_sync.file|/Documents/keepass.kdbx" -``` - -_**CLI Option Use:**_ `--skip-file '~*|.~*|*.tmp|*.swp|*.blah|never_sync.file|/Documents/keepass.kdbx'` - -_**Additional Usage Notes:**_ This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. If using the config file and CLI option is used, the CLI option will *replace* the config file entries. After changing or modifying this option, you will be required to perform a resync. - -### skip_size -_**Description:**_ This configuration option controls whether the application skips syncing certain files larger than the specified size. The value specified is in MB. - -_**Value Type:**_ Integer - -_**Default Value:**_ 0 (all files, regardless of size, are synced) - -_**Config Example:**_ `skip_size = "50"` - -_**CLI Option Use:**_ `--skip-size '50'` - -### skip_symlinks -_**Description:**_ This configuration option controls whether the application will skip all symbolic links when performing sync operations. Microsoft OneDrive has no concept or understanding of symbolic links, and attempting to upload a symbolic link to Microsoft OneDrive generates a platform API error. All data (files and folders) that are uploaded to OneDrive must be whole files or actual directories. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `skip_symlinks = "false"` or `skip_symlinks = "true"` - -_**CLI Option Use:**_ `--skip-symlinks` - -_**Additional Usage Notes:**_ This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. - -### space_reservation -_**Description:**_ This configuration option controls how much local disk space should be reserved, to prevent the application from filling up your entire disk due to misconfiguration - -_**Value Type:**_ Integer - -_**Default Value:**_ 50 MB (expressesed as Bytes when using `--display-config`) - -_**Config Example:**_ `space_reservation = "100"` - -_**CLI Option Use:**_ `--space-reservation '100'` - -### sync_business_shared_items -_**Description:**_ This configuration option controls whether OneDrive Business | Office 365 Shared Folders, when added as a 'shortcut' to your 'My Files' will be synced to your local system. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `sync_business_shared_items = "false"` or `sync_business_shared_items = "true"` - -_**CLI Option Use:**_ *none* - this is a config file option only - -_**Additional Usage Notes:**_ This option is considered a 'Client Side Filtering Rule' and if configured, is utilised for all sync operations. After changing this option, you will be required to perform a resync. - -### sync_dir -_**Description:**_ This configuration option determines the location on your local filesystem where your data from Microsoft OneDrive will be saved. - -_**Value Type:**_ String - -_**Default Value:**_ `~/OneDrive` - -_**Config Example:**_ `sync_dir = "~/MyDirToSync"` - -_**CLI Option Use:**_ `--syncdir '~/MyDirToSync'` - -_**Additional Usage Notes:**_ After changing this option, you will be required to perform a resync. - -### sync_dir_permissions -_**Description:**_ This configuration option defines the directory permissions applied when a new directory is created locally during the process of syncing your data from Microsoft OneDrive. - -_**Value Type:**_ Integer - -_**Default Value:**_ `700` - This provides the following permissions: `drwx------` - -_**Config Example:**_ `sync_dir_permissions = "700"` - -_**Additional Usage Notes:**_ Use the [Unix Permissions Calculator](https://chmod-calculator.com/) to help you determine the necessary new permissions. You will need to manually update all existing directory permissions if you modify this value. - -### sync_file_permissions -_**Description:**_ This configuration option defines the file permissions applied when a new file is created locally during the process of syncing your data from Microsoft OneDrive. - -_**Value Type:**_ Integer - -_**Default Value:**_ `600` - This provides the following permissions: `-rw-------` - -_**Config Example:**_ `sync_file_permissions = "600"` - -_**Additional Usage Notes:**_ Use the [Unix Permissions Calculator](https://chmod-calculator.com/) to help you determine the necessary new permissions. You will need to manually update all existing directory permissions if you modify this value. - -### sync_root_files -_**Description:**_ This configuration option manages the synchronisation of files located in the 'sync_dir' root when using a 'sync_list.' It enables you to sync all these files by default, eliminating the need to repeatedly modify your 'sync_list' and initiate resynchronisation. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `sync_root_files = "false"` or `sync_root_files = "true"` - -_**CLI Option Use:**_ `--sync-root-files` - -_**Additional Usage Notes:**_ Although it's not mandatory, it's recommended that after enabling this option, you perform a `--resync`. This ensures that any previously excluded content is now included in your sync process. - -### upload_only -_**Description:**_ This setting forces the client to only upload data to Microsoft OneDrive and replicate the locate state online. By default, this will also remove content online, that has been removed locally. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ `upload_only = "false"` or `upload_only = "true"` - -_**CLI Option Use:**_ `--upload-only` - -_**Additional Usage Notes:**_ To ensure that data deleted locally remains accessible online, you can use the 'no_remote_delete' option. If you want to delete the data from your local storage after a successful upload to Microsoft OneDrive, you can use the 'remove_source_files' option. - -### user_agent -_**Description:**_ This configuration option controls the 'User-Agent' request header that is presented to Microsoft Graph API when accessing the Microsoft OneDrive service. This string lets servers and network peers identify the application, operating system, vendor, and/or version of the application making the request. We recommend users not to tamper with this option unless strictly necessary. - -_**Value Type:**_ String - -_**Default Value:**_ `ISV|abraunegg|OneDrive Client for Linux/vX.Y.Z-A-bcdefghi` - -_**Config Example:**_ `user_agent = "ISV|CompanyName|AppName/Version"` - -_**Additional Usage Notes:**_ The current value conforms the the Microsoft Graph API documentation for presenting an appropriate 'User-Agent' header and aligns to the registered 'application_id' that this application uses. - -### webhook_enabled -_**Description:**_ This configuration option controls the application feature 'webhooks' to allow you to subscribe to remote updates as published by Microsoft OneDrive. This option only operates when the client is using 'Monitor Mode'. - -_**Value Type:**_ Boolean - -_**Default Value:**_ False - -_**Config Example:**_ The following is the minimum working example that needs to be added to your 'config' file to enable 'webhooks' successfully: -```text -webhook_enabled = "true" -webhook_public_url = "http://:8888/" -``` - -_**Additional Usage Notes:**_ - -etting `webhook_enabled = "true"` enables the webhook feature in 'monitor' mode. The onedrive process will listen for incoming updates at a configurable endpoint, which defaults to `0.0.0.0:8888`. The `webhook_public_url` must be set to an public-facing url for Microsoft to send updates to your webhook. - -If your host is directly exposed to the Internet, the `webhook_public_url` can be set to `http://:8888/` to match the default endpoint. In this case, it is also advisable to configure a reverse proxy like `nginx` to proxy the traffic to the client. For example, below is a nginx config snippet to proxy traffic into the webhook: -```text -server { - listen 80; - location /webhooks/onedrive { - proxy_http_version 1.1; - proxy_pass http://127.0.0.1:8888; - } -} -``` - -With nginx running, you can configure 'webhook_public_url' to `https:///webhooks/onedrive` - -**Note:** A valid HTTPS certificate is required for your public-facing URL if using nginx. - -If you receive this application error: `Subscription validation request failed. Response must exactly match validationToken query parameter.` the most likely cause for this error will be your nginx configuration. - -To resolve this configuration issue, potentially investigate the following configuration for nginx: -```text -server { - listen 80; - location /webhooks/onedrive { - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Original-Request-URI $request_uri; - proxy_read_timeout 300s; - proxy_connect_timeout 75s; - proxy_buffering off; - proxy_http_version 1.1; - proxy_pass http://127.0.0.1:8888; - } -} -``` -For any further nginx configuration assistance, please refer to: https://docs.nginx.com/ - -### webhook_expiration_interval -_**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription expires. The value is expressed in the number of seconds before expiry. - -_**Value Type:**_ Integer - -_**Default Value:**_ 600 - -_**Config Example:**_ `webhook_expiration_interval = "1200"` - -### webhook_listening_host -_**Description:**_ This configuration option controls the host address that this client binds to, when the webhook feature is enabled. - -_**Value Type:**_ String - -_**Default Value:**_ 0.0.0.0 - -_**Config Example:**_ `webhook_listening_host = ""` - this will use the default value. `webhook_listening_host = "192.168.3.4"` - this will bind the client to use the IP address 192.168.3.4. - -_**Additional Usage Notes:**_ Use in conjunction with 'webhook_listening_port' to change the webhook listening endpoint. - -### webhook_listening_port -_**Description:**_ This configuration option controls the TCP port that this client listens on, when the webhook feature is enabled. - -_**Value Type:**_ Integer - -_**Default Value:**_ 8888 - -_**Config Example:**_ `webhook_listening_port = "9999"` - -_**Additional Usage Notes:**_ Use in conjunction with 'webhook_listening_host' to change the webhook listening endpoint. - -### webhook_public_url -_**Description:**_ This configuration option controls the URL that Microsoft will send subscription notifications to. This must be a valid Internet accessible URL. - -_**Value Type:**_ String - -_**Default Value:**_ *empty* - -_**Config Example:**_ - -* If your host is directly connected to the Internet: `webhook_public_url = "http://:8888/"` -* If you are using nginx to reverse proxy traffic from the Internet: `webhook_public_url = "https:///webhooks/onedrive"` - -### webhook_renewal_interval -_**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription is renewed. The value is expressed in the number of seconds before renewal. - -_**Value Type:**_ Integer - -_**Default Value:**_ 300 - -_**Config Example:**_ `webhook_renewal_interval = "600"` - -### webhook_retry_interval -_**Description:**_ This configuration option controls the frequency at which an existing Microsoft OneDrive webhook subscription is retried when creating or renewing a subscription failed. The value is expressed in the number of seconds before retry. - -_**Value Type:**_ Integer - -_**Default Value:**_ 60 - -_**Config Example:**_ `webhook_retry_interval = "120"` - -## Command Line Interface (CLI) Only Options - -### CLI Option: --auth-files -_**Description:**_ This CLI option allows the user to perform application authentication not via an interactive dialog but via specific files that the application uses to read the authentication data from. - -_**Usage Example:**_ `onedrive --auth-files authUrl:responseUrl` - -_**Additional Usage Notes:**_ The authorisation URL is written to the specified 'authUrl' file, then onedrive waits for the file 'responseUrl' to be present, and reads the authentication response from that file. Example: - -```text -onedrive --auth-files '~/onedrive-auth-url:~/onedrive-response-url' -Reading configuration file: /home/alex/.config/onedrive/config -Configuration file successfully loaded -Configuring Global Azure AD Endpoints -Client requires authentication before proceeding. Waiting for --auth-files elements to be available. -``` -At this point, the client has written the file `~/onedrive-auth-url` which contains the authentication URL that needs to be visited to perform the authentication process. The client will now wait and watch for the presence of the file `~/onedrive-response-url`. - -Visit the authentication URL, and then create a new file called `~/onedrive-response-url` with the response URI. Once this has been done, the application will acknowledge the presence of this file, read the contents, and authenticate the application. -```text -Sync Engine Initialised with new Onedrive API instance - - --sync or --monitor switches missing from your command line input. Please add one (not both) of these switches to your command line or use 'onedrive --help' for further assistance. - -No OneDrive sync will be performed without one of these two arguments being present. -``` - -### CLI Option: --auth-response -_**Description:**_ This CLI option allows the user to perform application authentication not via an interactive dialog but via providing the authentication response URI directly. - -_**Usage Example:**_ `onedrive --auth-response https://login.microsoftonline.com/common/oauth2/nativeclient?code=` - -_**Additional Usage Notes:**_ Typically, unless the application client identifier, authentication scopes are being modified or a specific Azure Tenant is being specified, the authentication URL will mostlikely be as follows: -```text -https://login.microsoftonline.com/common/oauth2/v2.0/authorise?client_id=22c49a0d-d21c-4792-aed1-8f163c982546&scope=Files.ReadWrite%20Files.ReadWrite.all%20Sites.ReadWrite.All%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient -``` -With this URL being known, it is possible ahead of time to request an authentication token by visiting this URL, and performing the authenticaton access request. - -### CLI Option: --confdir -_**Description:**_ This CLI option allows the user to specify where all the application configuration and relevant components are stored. - -_**Usage Example:**_ `onedrive --confdir '~/.config/onedrive-business/'` - -_**Additional Usage Notes:**_ If using this option, it must be specified each and every time the application is used. If this is ommited, the application default configuration directory will be used. - -### CLI Option: --create-directory -_**Description:**_ This CLI option allows the user to create the specified directory path on Microsoft OneDrive without performing a sync. - -_**Usage Example:**_ `onedrive --create-directory 'path/of/new/folder/structure/to/create/'` - -_**Additional Usage Notes:**_ The specified path to create is relative to your configured 'sync_dir'. - -### CLI Option: --create-share-link -_**Description:**_ This CLI option enables the creation of a shareable file link that can be provided to users to access the file that is stored on Microsoft OneDrive. By default, the permissions for the file will be 'read-only'. - -_**Usage Example:**_ `onedrive --create-share-link 'relative/path/to/your/file.txt'` - -_**Additional Usage Notes:**_ If writable access to the file is required, you must add `--with-editing-perms` to your command. See below for details. - -### CLI Option: --destination-directory -_**Description:**_ This CLI option specifies the 'destination' portion of moving a file or folder online, without performing a sync operation. - -_**Usage Example:**_ `onedrive --source-directory 'path/as/source/' --destination-directory 'path/as/destination'` - -_**Additional Usage Notes:**_ All specified paths are relative to your configured 'sync_dir'. - -### CLI Option: --display-config -_**Description:**_ This CLI option will display the effective application configuration - -_**Usage Example:**_ `onedrive --display-config` - -### CLI Option: --display-sync-status -_**Description:**_ This CLI option will display the sync status of the configured 'sync_dir' - -_**Usage Example:**_ `onedrive --display-sync-status` - -_**Additional Usage Notes:**_ This option can also use the `--single-directory` option to determine the sync status of a specific directory within the configured 'sync_dir' - -### CLI Option: ---display-quota -_**Description:**_ This CLI option will display the quota status of the account drive id or the configured 'drive_id' value - -_**Usage Example:**_ `onedrive --display-quota` - -### CLI Option: --force -_**Description:**_ This CLI option enables the force the deletion of data when a 'big delete' is detected. - -_**Usage Example:**_ `onedrive --sync --verbose --force` - -_**Additional Usage Notes:**_ This option should only be used exclusively in cases where you've initiated a 'big delete' and genuinely intend to remove all the data that is set to be deleted online. - -### CLI Option: --force-sync -_**Description:**_ This CLI option enables the syncing of a specific directory, using the Client Side Filtering application defaults, overriding any user application configuration. - -_**Usage Example:**_ `onedrive --sync --verbose --force-sync --single-directory 'Data' - -_**Additional Usage Notes:**_ When this option is used, you will be presented with the following warning and risk acceptance: -```text -WARNING: Overriding application configuration to use application defaults for skip_dir and skip_file due to --synch --single-directory --force-sync being used - -The use of --force-sync will reconfigure the application to use defaults. This may have untold and unknown future impacts. -By proceeding in using this option you accept any impacts including any data loss that may occur as a result of using --force-sync. - -Are you sure you wish to proceed with --force-sync [Y/N] -``` -To procceed with this sync task, you must risk accept the actions you are taking. If you have any concerns, first use `--dry-run` and evaluate the outcome before proceeding with the actual action. - -### CLI Option: --get-file-link -_**Description:**_ This CLI option queries the OneDrive API and return's the WebURL for the given local file. - -_**Usage Example:**_ `onedrive --get-file-link 'relative/path/to/your/file.txt'` - -_**Additional Usage Notes:**_ The path that you should use must be relative to your 'sync_dir' - -### CLI Option: --get-sharepoint-drive-id -_**Description:**_ This CLI option queries the OneDrive API and return's the Office 365 Drive ID for a given Office 365 SharePoint Shared Library that can then be used with 'drive_id' to sync a specific SharePoint Library. - -_**Usage Example:**_ `onedrive --get-sharepoint-drive-id '*'` or `onedrive --get-sharepoint-drive-id 'PointPublishing Hub Site'` - -### CLI Option: --logout -_**Description:**_ This CLI option removes this clients authentictaion status with Microsoft OneDrive. Any further application use will requrie the application to be re-authenticated with Microsoft OneDrive. - -_**Usage Example:**_ `onedrive --logout` - -### CLI Option: --modified-by -_**Description:**_ This CLI option queries the OneDrive API and return's the last modified details for the given local file. - -_**Usage Example:**_ `onedrive --modified-by 'relative/path/to/your/file.txt'` - -_**Additional Usage Notes:**_ The path that you should use must be relative to your 'sync_dir' - -### CLI Option: --monitor | -m -_**Description:**_ This CLI option controls the 'Monitor Mode' operational aspect of the client. When this option is used, the client will perform on-going syncs of data between Microsoft OneDrive and your local system. Local changes will be uploaded in near-realtime, whilst online changes will be downloaded on the next sync process. The frequency of these checks is governed by the 'monitor_interval' value. - -_**Usage Example:**_ `onedrive --monitor` or `onedrive -m` - -### CLI Option: --print-access-token -_**Description:**_ Print the current access token being used to access Microsoft OneDrive. - -_**Usage Example:**_ `onedrive --verbose --verbose --debug-https --print-access-token` - -_**Additional Usage Notes:**_ Do not use this option if you do not know why you are wanting to use it. Be highly cautious of exposing this object. Change your password if you feel that you have inadvertantly exposed this token. - -### CLI Option: --reauth -_**Description:**_ This CLI option controls the ability to re-authenticate your client with Microsoft OneDrive. - -_**Usage Example:**_ `onedrive --reauth` - -### CLI Option: --remove-directory -_**Description:**_ This CLI option allows the user to remove the specified directory path on Microsoft OneDrive without performing a sync. - -_**Usage Example:**_ `onedrive --remove-directory 'path/of/new/folder/structure/to/remove/'` - -_**Additional Usage Notes:**_ The specified path to remove is relative to your configured 'sync_dir'. - -### CLI Option: --single-directory -_**Description:**_ This CLI option controls the applications ability to sync a specific single directory. - -_**Usage Example:**_ `onedrive --sync --single-directory 'Data'` - -_**Additional Usage Notes:**_ The path specified is relative to your configured 'sync_dir' path. If the physical local path 'Folder' to sync is `~/OneDrive/Data/Folder` then the command would be `--single-directory 'Data/Folder'`. - -### CLI Option: --source-directory -_**Description:**_ This CLI option specifies the 'source' portion of moving a file or folder online, without performing a sync operation. - -_**Usage Example:**_ `onedrive --source-directory 'path/as/source/' --destination-directory 'path/as/destination'` - -_**Additional Usage Notes:**_ All specified paths are relative to your configured 'sync_dir'. - -### CLI Option: --sync | -s -_**Description:**_ This CLI option controls the 'Standalone Mode' operational aspect of the client. When this option is used, the client will perform a one-time sync of data between Microsoft OneDrive and your local system. - -_**Usage Example:**_ `onedrive --sync` or `onedrive -s` - -### CLI Option: --verbose | -v+ -_**Description:**_ This CLI option controls the verbosity of the application output. Use the option once, to have normal verbose output, use twice to have debug level application output. - -_**Usage Example:**_ `onedrive --sync --verbose` or `onedrive --monitor --verbose` - -### CLI Option: --with-editing-perms -_**Description:**_ This CLI option enables the creation of a writable shareable file link that can be provided to users to access the file that is stored on Microsoft OneDrive. This option can only be used in conjunction with `--create-share-link` - -_**Usage Example:**_ `onedrive --create-share-link 'relative/path/to/your/file.txt' --with-editing-perms` - -_**Additional Usage Notes:**_ Placement of `--with-editing-perms` is critical. It *must* be placed after the file path as per the example above. - -## Depreciated Configuration File and CLI Options -The following configuration options are no longer supported - -### min_notify_changes -_**Description:**_ Minimum number of pending incoming changes necessary to trigger a GUI desktop notification. - -_**Depreciated Config Example:**_ `min_notify_changes = "50"` - -_**Depreciated CLI Option:**_ `--min-notify-changes '50'` - -_**Reason for depreciation:**_ Application has been totally re-written. When this item was introduced, it was done so to reduce spamming of all events to the GUI desktop. - -### CLI Option: --synchronize -_**Description:**_ Perform a synchronisation with Microsoft OneDrive - -_**Depreciated CLI Option:**_ `--synchronize` - -_**Reason for depreciation:**_ `--synchronize` has been depreciated in favour of `--sync` or `-s` diff --git a/docs/application-security.md b/docs/application-security.md deleted file mode 100644 index 7c22c4f1..00000000 --- a/docs/application-security.md +++ /dev/null @@ -1,97 +0,0 @@ -# OneDrive Client for Linux Application Security -This document details the following information: - -* Why is this application an 'unverified publisher'? -* Application Security and Permission Scopes -* How to change Permission Scopes -* How to review your existing application access consent - -## Why is this application an 'unverified publisher'? -Publisher Verification, as per the Microsoft [process](https://learn.microsoft.com/en-us/azure/active-directory/develop/publisher-verification-overview) has actually been configured, and, actually has been verified! - -### Verified Publisher Configuration Evidence -As per the image below, the Azure portal shows that the 'Publisher Domain' has actually been verified: -![confirmed_verified_publisher](./images/confirmed_verified_publisher.jpg) - -* The 'Publisher Domain' is: https://abraunegg.github.io/ -* The required 'Microsoft Identity Association' is: https://abraunegg.github.io/.well-known/microsoft-identity-association.json - -## Application Security and Permission Scopes -There are 2 main components regarding security for this application: -* Azure Application Permissions -* User Authentication Permissions - -Keeping this in mind, security options should follow the security principal of 'least privilege': -> The principle that a security architecture should be designed so that each entity -> is granted the minimum system resources and authorizations that the entity needs -> to perform its function. - -Reference: [https://csrc.nist.gov/glossary/term/least_privilege](https://csrc.nist.gov/glossary/term/least_privilege) - -As such, the following API permissions are used by default: - -### Default Azure Application Permissions - -| API / Permissions name | Type | Description | Admin consent required | -|---|---|---|---| -| Files.Read | Delegated | Have read-only access to user files | No | -| Files.Read.All | Delegated | Have read-only access to all files user can access | No | -| Sites.Read.All | Delegated | Have read-only access to all items in all site collections | No | -| offline_access | Delegated | Maintain access to data you have given it access to | No | - -![default_authentication_scopes](./images/default_authentication_scopes.jpg) - -### Default User Authentication Permissions - -When a user authenticates with Microsoft OneDrive, additional account permissions are provided by service to give the user specific access to their data. These are delegated permissions provided by the platform: - -| API / Permissions name | Type | Description | Admin consent required | -|---|---|---|---| -| Files.ReadWrite | Delegated | Have full access to user files | No | -| Files.ReadWrite.All | Delegated | Have full access to all files user can access | No | -| Sites.ReadWrite.All | Delegated | Have full access to all items in all site collections | No | -| offline_access | Delegated | Maintain access to data you have given it access to | No | - -When these delegated API permissions are combined, these provide the effective authentication scope for the OneDrive Client for Linux to access your data. The resulting effective 'default' permissions will be: - -| API / Permissions name | Type | Description | Admin consent required | -|---|---|---|---| -| Files.ReadWrite | Delegated | Have full access to user files | No | -| Files.ReadWrite.All | Delegated | Have full access to all files user can access | No | -| Sites.ReadWrite.All | Delegated | Have full access to all items in all site collections | No | -| offline_access | Delegated | Maintain access to data you have given it access to | No | - -These 'default' permissions will allow the OneDrive Client for Linux to read, write and delete data associated with your OneDrive Account. - -## Configuring read-only access to your OneDrive data -In some situations, it may be desirable to configure the OneDrive Client for Linux totally in read-only operation. - -To change the application to 'read-only' access, add the following to your configuration file: -```text -read_only_auth_scope = "true" -``` -This will change the user authentication scope request to use read-only access. - -**Note:** When changing this value, you *must* re-authenticate the client using the `--reauth` option to utilise the change in authentication scopes. - -When using read-only authentication scopes, the uploading of any data or local change to OneDrive will fail with the following error: -``` -2022-Aug-06 13:16:45.3349625 ERROR: Microsoft OneDrive API returned an error with the following message: -2022-Aug-06 13:16:45.3351661 Error Message: HTTP request returned status code 403 (Forbidden) -2022-Aug-06 13:16:45.3352467 Error Reason: Access denied -2022-Aug-06 13:16:45.3352838 Error Timestamp: 2022-06-12T13:16:45 -2022-Aug-06 13:16:45.3353171 API Request ID: -``` - -As such, it is also advisable for you to add the following to your configuration file so that 'uploads' are prevented: -```text -download_only = "true" -``` - -**Important:** Additionally when using 'read_only_auth_scope' you also will need to remove your existing application access consent otherwise old authentication consent will be valid and will be used. This will mean the application will technically have the consent to upload data. See below on how to remove your prior application consent. - -## Reviewing your existing application access consent - -To review your existing application access consent, you need to access the following URL: https://account.live.com/consent/Manage - -From here, you are able to review what applications have been given what access to your data, and remove application access as required. diff --git a/docs/build-rpm-howto.md b/docs/build-rpm-howto.md deleted file mode 100644 index 5439c366..00000000 --- a/docs/build-rpm-howto.md +++ /dev/null @@ -1,379 +0,0 @@ -# RPM Package Build Process -The instuctions below have been tested on the following systems: -* CentOS 7 x86_64 -* CentOS 8 x86_64 - -These instructions should also be applicable for RedHat & Fedora platforms, or any other RedHat RPM based distribution. - -## Prepare Package Development Environment (CentOS 7, 8) -Install the following dependencies on your build system: -```text -sudo yum groupinstall -y 'Development Tools' -sudo yum install -y libcurl-devel -sudo yum install -y sqlite-devel -sudo yum install -y libnotify-devel -sudo yum install -y wget -sudo yum install -y http://downloads.dlang.org/releases/2.x/2.088.0/dmd-2.088.0-0.fedora.x86_64.rpm -mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} -``` - -## Build RPM from spec file -Build the RPM from the provided spec file: -```text -wget https://github.com/abraunegg/onedrive/archive/refs/tags/v2.4.22.tar.gz -O ~/rpmbuild/SOURCES/v2.4.22.tar.gz -wget https://raw.githubusercontent.com/abraunegg/onedrive/master/contrib/spec/onedrive.spec.in -O ~/rpmbuild/SPECS/onedrive.spec -rpmbuild -ba ~/rpmbuild/SPECS/onedrive.spec -``` - -## RPM Build Example Results -Below are example output results of building, installing and running the RPM package on the respective platforms: - -### CentOS 7 -```text -[alex@localhost ~]$ rpmbuild -ba ~/rpmbuild/SPECS/onedrive.spec -Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.wi6Tdz -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ cd /home/alex/rpmbuild/BUILD -+ rm -rf onedrive-2.4.15 -+ /usr/bin/tar -xf - -+ /usr/bin/gzip -dc /home/alex/rpmbuild/SOURCES/v2.4.15.tar.gz -+ STATUS=0 -+ '[' 0 -ne 0 ']' -+ cd onedrive-2.4.15 -+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . -+ exit 0 -Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.dyeEuM -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ cd onedrive-2.4.15 -+ CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' -+ export CFLAGS -+ CXXFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' -+ export CXXFLAGS -+ FFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -I/usr/lib64/gfortran/modules' -+ export FFLAGS -+ FCFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -I/usr/lib64/gfortran/modules' -+ export FCFLAGS -+ LDFLAGS='-Wl,-z,relro ' -+ export LDFLAGS -+ '[' 1 == 1 ']' -+ '[' x86_64 == ppc64le ']' -++ find . -name config.guess -o -name config.sub -+ ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info -configure: WARNING: unrecognized options: --disable-dependency-tracking -checking for a BSD-compatible install... /usr/bin/install -c -checking for x86_64-redhat-linux-gnu-pkg-config... no -checking for pkg-config... /usr/bin/pkg-config -checking pkg-config is at least version 0.9.0... yes -checking for dmd... dmd -checking version of D compiler... 2.087.0 -checking for curl... yes -checking for sqlite... yes -configure: creating ./config.status -config.status: creating Makefile -config.status: creating contrib/pacman/PKGBUILD -config.status: creating contrib/spec/onedrive.spec -config.status: creating onedrive.1 -config.status: creating contrib/systemd/onedrive.service -config.status: creating contrib/systemd/onedrive@.service -configure: WARNING: unrecognized options: --disable-dependency-tracking -+ make -if [ -f .git/HEAD ] ; then \ - git describe --tags > version ; \ -else \ - echo v2.4.15 > version ; \ -fi -dmd -w -g -O -J. -L-lcurl -L-lsqlite3 -L-ldl src/config.d src/itemdb.d src/log.d src/main.d src/monitor.d src/onedrive.d src/qxor.d src/selective.d src/sqlite.d src/sync.d src/upload.d src/util.d src/progress.d src/arsd/cgi.d -ofonedrive -+ exit 0 -Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.L3JbHy -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ '[' /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64 '!=' / ']' -+ rm -rf /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64 -++ dirname /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64 -+ mkdir -p /home/alex/rpmbuild/BUILDROOT -+ mkdir /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64 -+ cd onedrive-2.4.15 -+ /usr/bin/make install DESTDIR=/home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64 PREFIX=/home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64 -/usr/bin/install -c -D onedrive /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/bin/onedrive -/usr/bin/install -c -D onedrive.1 /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/share/man/man1/onedrive.1 -/usr/bin/install -c -D -m 644 contrib/logrotate/onedrive.logrotate /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/etc/logrotate.d/onedrive -mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/share/doc/onedrive -/usr/bin/install -c -D -m 644 README.md config LICENSE CHANGELOG.md docs/Docker.md docs/INSTALL.md docs/SharePoint-Shared-Libraries.md docs/USAGE.md docs/BusinessSharedFolders.md docs/advanced-usage.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/share/doc/onedrive -/usr/bin/install -c -d -m 0755 /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/lib/systemd/user /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/lib/systemd/system -/usr/bin/install -c -m 0644 contrib/systemd/onedrive@.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/lib/systemd/system -/usr/bin/install -c -m 0644 contrib/systemd/onedrive.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/lib/systemd/system -+ /usr/lib/rpm/check-buildroot -+ /usr/lib/rpm/redhat/brp-compress -+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip -+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump -+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip -+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1 -+ /usr/lib/rpm/redhat/brp-python-hardlink -+ /usr/lib/rpm/redhat/brp-java-repack-jars -Processing files: onedrive-2.4.15-1.el7.x86_64 -Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.cpSXho -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ cd onedrive-2.4.15 -+ DOCDIR=/home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/share/doc/onedrive-2.4.15 -+ export DOCDIR -+ /usr/bin/mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/share/doc/onedrive-2.4.15 -+ cp -pr README.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/share/doc/onedrive-2.4.15 -+ cp -pr LICENSE /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/share/doc/onedrive-2.4.15 -+ cp -pr CHANGELOG.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64/usr/share/doc/onedrive-2.4.15 -+ exit 0 -Provides: config(onedrive) = 2.4.15-1.el7 onedrive = 2.4.15-1.el7 onedrive(x86-64) = 2.4.15-1.el7 -Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 -Requires(post): systemd -Requires(preun): systemd -Requires(postun): systemd -Requires: ld-linux-x86-64.so.2()(64bit) ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.6)(64bit) libc.so.6(GLIBC_2.8)(64bit) libc.so.6(GLIBC_2.9)(64bit) libcurl.so.4()(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_4.2.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libpthread.so.0(GLIBC_2.3.2)(64bit) libpthread.so.0(GLIBC_2.3.4)(64bit) librt.so.1()(64bit) librt.so.1(GLIBC_2.2.5)(64bit) libsqlite3.so.0()(64bit) rtld(GNU_HASH) -Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el7.x86_64 -Wrote: /home/alex/rpmbuild/SRPMS/onedrive-2.4.15-1.el7.src.rpm -Wrote: /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.4.15-1.el7.x86_64.rpm -Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.nWoW33 -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ cd onedrive-2.4.15 -+ exit 0 -[alex@localhost ~]$ sudo yum -y install /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.4.15-1.el7.x86_64.rpm -Loaded plugins: fastestmirror -Examining /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.4.15-1.el7.x86_64.rpm: onedrive-2.4.15-1.el7.x86_64 -Marking /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.4.15-1.el7.x86_64.rpm to be installed -Resolving Dependencies ---> Running transaction check ----> Package onedrive.x86_64 0:2.4.15-1.el7 will be installed ---> Finished Dependency Resolution - -Dependencies Resolved - -============================================================================================================================================================================================== - Package Arch Version Repository Size -============================================================================================================================================================================================== -Installing: - onedrive x86_64 2.4.15-1.el7 /onedrive-2.4.15-1.el7.x86_64 7.2 M - -Transaction Summary -============================================================================================================================================================================================== -Install 1 Package - -Total size: 7.2 M -Installed size: 7.2 M -Downloading packages: -Running transaction check -Running transaction test -Transaction test succeeded -Running transaction - Installing : onedrive-2.4.15-1.el7.x86_64 1/1 - Verifying : onedrive-2.4.15-1.el7.x86_64 1/1 - -Installed: - onedrive.x86_64 0:2.4.15-1.el7 - -Complete! -[alex@localhost ~]$ which onedrive -/usr/bin/onedrive -[alex@localhost ~]$ onedrive --version -onedrive v2.4.15 -[alex@localhost ~]$ onedrive --display-config -onedrive version = v2.4.15 -Config path = /home/alex/.config/onedrive -Config file found in config path = false -Config option 'check_nosync' = false -Config option 'sync_dir' = /home/alex/OneDrive -Config option 'skip_dir' = -Config option 'skip_file' = ~*|.~*|*.tmp -Config option 'skip_dotfiles' = false -Config option 'skip_symlinks' = false -Config option 'monitor_interval' = 300 -Config option 'min_notify_changes' = 5 -Config option 'log_dir' = /var/log/onedrive/ -Config option 'classify_as_big_delete' = 1000 -Config option 'upload_only' = false -Config option 'no_remote_delete' = false -Config option 'remove_source_files' = false -Config option 'sync_root_files' = false -Selective sync 'sync_list' configured = false -Business Shared Folders configured = false -[alex@localhost ~]$ -``` - -### CentOS 8 -```text -[alex@localhost ~]$ rpmbuild -ba ~/rpmbuild/SPECS/onedrive.spec -Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.UINFyE -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ cd /home/alex/rpmbuild/BUILD -+ rm -rf onedrive-2.4.15 -+ /usr/bin/gzip -dc /home/alex/rpmbuild/SOURCES/v2.4.15.tar.gz -+ /usr/bin/tar -xof - -+ STATUS=0 -+ '[' 0 -ne 0 ']' -+ cd onedrive-2.4.15 -+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . -+ exit 0 -Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.cX1WQa -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ cd onedrive-2.4.15 -+ CFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' -+ export CFLAGS -+ CXXFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' -+ export CXXFLAGS -+ FFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I/usr/lib64/gfortran/modules' -+ export FFLAGS -+ FCFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -I/usr/lib64/gfortran/modules' -+ export FCFLAGS -+ LDFLAGS='-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' -+ export LDFLAGS -+ '[' 1 = 1 ']' -+++ dirname ./configure -++ find . -name config.guess -o -name config.sub -+ '[' 1 = 1 ']' -+ '[' x '!=' 'x-Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' ']' -++ find . -name ltmain.sh -+ ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info -configure: WARNING: unrecognized options: --disable-dependency-tracking -checking for a BSD-compatible install... /usr/bin/install -c -checking for x86_64-redhat-linux-gnu-pkg-config... /usr/bin/x86_64-redhat-linux-gnu-pkg-config -checking pkg-config is at least version 0.9.0... yes -checking for dmd... dmd -checking version of D compiler... 2.087.0 -checking for curl... yes -checking for sqlite... yes -configure: creating ./config.status -config.status: creating Makefile -config.status: creating contrib/pacman/PKGBUILD -config.status: creating contrib/spec/onedrive.spec -config.status: creating onedrive.1 -config.status: creating contrib/systemd/onedrive.service -config.status: creating contrib/systemd/onedrive@.service -configure: WARNING: unrecognized options: --disable-dependency-tracking -+ make -if [ -f .git/HEAD ] ; then \ - git describe --tags > version ; \ -else \ - echo v2.4.15 > version ; \ -fi -dmd -w -g -O -J. -L-lcurl -L-lsqlite3 -L-ldl src/config.d src/itemdb.d src/log.d src/main.d src/monitor.d src/onedrive.d src/qxor.d src/selective.d src/sqlite.d src/sync.d src/upload.d src/util.d src/progress.d src/arsd/cgi.d -ofonedrive -+ exit 0 -Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.dNFPdx -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ '[' /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64 '!=' / ']' -+ rm -rf /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64 -++ dirname /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64 -+ mkdir -p /home/alex/rpmbuild/BUILDROOT -+ mkdir /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64 -+ cd onedrive-2.4.15 -+ /usr/bin/make install DESTDIR=/home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64 'INSTALL=/usr/bin/install -p' PREFIX=/home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64 -/usr/bin/install -p -D onedrive /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/bin/onedrive -/usr/bin/install -p -D onedrive.1 /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/share/man/man1/onedrive.1 -/usr/bin/install -p -D -m 644 contrib/logrotate/onedrive.logrotate /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/etc/logrotate.d/onedrive -mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/share/doc/onedrive -/usr/bin/install -p -D -m 644 README.md config LICENSE CHANGELOG.md docs/Docker.md docs/INSTALL.md docs/SharePoint-Shared-Libraries.md docs/USAGE.md docs/BusinessSharedFolders.md docs/advanced-usage.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/share/doc/onedrive -/usr/bin/install -p -d -m 0755 /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/lib/systemd/user /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/lib/systemd/system -/usr/bin/install -p -m 0644 contrib/systemd/onedrive@.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/lib/systemd/system -/usr/bin/install -p -m 0644 contrib/systemd/onedrive.service /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/lib/systemd/system -+ /usr/lib/rpm/check-buildroot -+ /usr/lib/rpm/redhat/brp-ldconfig -/sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/etc/ld.so.conf: No such file or directory -+ /usr/lib/rpm/brp-compress -+ /usr/lib/rpm/brp-strip /usr/bin/strip -+ /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump -+ /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip -+ /usr/lib/rpm/brp-python-bytecompile 1 -+ /usr/lib/rpm/brp-python-hardlink -+ PYTHON3=/usr/libexec/platform-python -+ /usr/lib/rpm/redhat/brp-mangle-shebangs -Processing files: onedrive-2.4.15-1.el8.x86_64 -Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.TnFKbZ -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ cd onedrive-2.4.15 -+ DOCDIR=/home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/share/doc/onedrive -+ export LC_ALL=C -+ LC_ALL=C -+ export DOCDIR -+ /usr/bin/mkdir -p /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/share/doc/onedrive -+ cp -pr README.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/share/doc/onedrive -+ cp -pr LICENSE /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/share/doc/onedrive -+ cp -pr CHANGELOG.md /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64/usr/share/doc/onedrive -+ exit 0 -warning: File listed twice: /usr/share/doc/onedrive -warning: File listed twice: /usr/share/doc/onedrive/CHANGELOG.md -warning: File listed twice: /usr/share/doc/onedrive/LICENSE -warning: File listed twice: /usr/share/doc/onedrive/README.md -Provides: config(onedrive) = 2.4.15-1.el8 onedrive = 2.4.15-1.el8 onedrive(x86-64) = 2.4.15-1.el8 -Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 -Requires(post): systemd -Requires(preun): systemd -Requires(postun): systemd -Requires: ld-linux-x86-64.so.2()(64bit) ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.6)(64bit) libc.so.6(GLIBC_2.8)(64bit) libc.so.6(GLIBC_2.9)(64bit) libcurl.so.4()(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_4.2.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libpthread.so.0(GLIBC_2.3.2)(64bit) libpthread.so.0(GLIBC_2.3.4)(64bit) librt.so.1()(64bit) librt.so.1(GLIBC_2.2.5)(64bit) libsqlite3.so.0()(64bit) rtld(GNU_HASH) -Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/alex/rpmbuild/BUILDROOT/onedrive-2.4.15-1.el8.x86_64 -Wrote: /home/alex/rpmbuild/SRPMS/onedrive-2.4.15-1.el8.src.rpm -Wrote: /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.4.15-1.el8.x86_64.rpm -Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.FAMTFz -+ umask 022 -+ cd /home/alex/rpmbuild/BUILD -+ cd onedrive-2.4.15 -+ exit 0 -[alex@localhost ~]$ sudo yum -y install /home/alex/rpmbuild/RPMS/x86_64/onedrive-2.4.15-1.el8.x86_64.rpm -Last metadata expiration check: 0:04:07 ago on Fri 14 Jan 2022 14:22:13 EST. -Dependencies resolved. -============================================================================================================================================================================================== - Package Architecture Version Repository Size -============================================================================================================================================================================================== -Installing: - onedrive x86_64 2.4.15-1.el8 @commandline 1.5 M - -Transaction Summary -============================================================================================================================================================================================== -Install 1 Package - -Total size: 1.5 M -Installed size: 7.1 M -Downloading Packages: -Running transaction check -Transaction check succeeded. -Running transaction test -Transaction test succeeded. -Running transaction - Preparing : 1/1 - Installing : onedrive-2.4.15-1.el8.x86_64 1/1 - Running scriptlet: onedrive-2.4.15-1.el8.x86_64 1/1 - Verifying : onedrive-2.4.15-1.el8.x86_64 1/1 - -Installed: - onedrive-2.4.15-1.el8.x86_64 - -Complete! -[alex@localhost ~]$ which onedrive -/usr/bin/onedrive -[alex@localhost ~]$ onedrive --version -onedrive v2.4.15 -[alex@localhost ~]$ onedrive --display-config -onedrive version = v2.4.15 -Config path = /home/alex/.config/onedrive -Config file found in config path = false -Config option 'check_nosync' = false -Config option 'sync_dir' = /home/alex/OneDrive -Config option 'skip_dir' = -Config option 'skip_file' = ~*|.~*|*.tmp -Config option 'skip_dotfiles' = false -Config option 'skip_symlinks' = false -Config option 'monitor_interval' = 300 -Config option 'min_notify_changes' = 5 -Config option 'log_dir' = /var/log/onedrive/ -Config option 'classify_as_big_delete' = 1000 -Config option 'upload_only' = false -Config option 'no_remote_delete' = false -Config option 'remove_source_files' = false -Config option 'sync_root_files' = false -Selective sync 'sync_list' configured = false -Business Shared Folders configured = false -[alex@localhost ~]$ -``` diff --git a/docs/business-shared-folders.md b/docs/business-shared-folders.md deleted file mode 100644 index 4282f4ac..00000000 --- a/docs/business-shared-folders.md +++ /dev/null @@ -1,40 +0,0 @@ -# How to configure OneDrive Business Shared Folder Sync -## Application Version -Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. - -## Important Note -This feature has been 100% re-written from v2.5.0 onwards. A pre-requesite before using this capability in v2.5.0 and above is for you to revert any Shared Business Folder configuration you may be currently using, including, but not limited to: -* Removing `sync_business_shared_folders = "true|false"` from your 'config' file -* Removing the 'business_shared_folders' file -* Removing any local data | shared folder data from your configured 'sync_dir' to ensure that there are no conflicts or issues. - -## Process Overview -Syncing OneDrive Business Shared Folders requires additional configuration for your 'onedrive' client: -1. From the OneDrive web interface, review the 'Shared' objects that have been shared with you. -2. Select the applicable folder, and click the 'Add shortcut to My files', which will then add this to your 'My files' folder -3. Update your OneDrive Client for Linux 'config' file to enable the feature by adding `sync_business_shared_items = "true"`. Adding this option will trigger a `--resync` requirement. -4. Test the configuration using '--dry-run' -5. Remove the use of '--dry-run' and sync the OneDrive Business Shared folders as required - - -**NOTE:** This documentation will be updated as this feature progresses. - - -### Enable syncing of OneDrive Business Shared Folders via config file -```text -sync_business_shared_items = "true" -``` - -### Disable syncing of OneDrive Business Shared Folders via config file -```text -sync_business_shared_items = "false" -``` - -## Known Issues -Shared folders, shared with you from people outside of your 'organisation' are unable to be synced. This is due to the Microsoft Graph API not presenting these folders. - -Shared folders that match this scenario, when you view 'Shared' via OneDrive online, will have a 'world' symbol as per below: - -![shared_with_me](./images/shared_with_me.JPG) - -This issue is being tracked by: [#966](https://github.com/abraunegg/onedrive/issues/966) diff --git a/docs/known-issues.md b/docs/known-issues.md deleted file mode 100644 index d6ac302a..00000000 --- a/docs/known-issues.md +++ /dev/null @@ -1,60 +0,0 @@ -# List of Identified Known Issues -The following points detail known issues associated with this client: - -## Renaming or Moving Files in Standalone Mode causes online deletion and re-upload to occur -**Issue Tracker:** [#876](https://github.com/abraunegg/onedrive/issues/876), [#2579](https://github.com/abraunegg/onedrive/issues/2579) - -**Summary:** - -Renaming or moving files and/or folders while using the standalone sync option `--sync` this results in unnecessary data deletion online and subsequent re-upload. - -**Detailed Description:** - -In standalone mode (`--sync`), the renaming or moving folders locally that have already been synchronized leads to the data being deleted online and then re-uploaded in the next synchronization process. - -**Technical Explanation:** - -This behavior is expected from the client under these specific conditions. Renaming or moving files is interpreted as deleting them from their original location and creating them in a new location. In standalone sync mode, the client lacks the capability to track file system changes (including renames and moves) that occur when it is not running. This limitation is the root cause of the observed 'deletion and re-upload' cycle. - -**Recommended Workaround:** - -For effective tracking of file and folder renames or moves to new local directories, it is recommended to run the client in service mode (`--monitor`) rather than in standalone mode. This approach allows the client to immediately process these changes, enabling the data to be updated (renamed or moved) in the new location on OneDrive without undergoing deletion and re-upload. - -## Application 'stops' running without any visible reason -**Issue Tracker:** [#494](https://github.com/abraunegg/onedrive/issues/494), [#753](https://github.com/abraunegg/onedrive/issues/753), [#792](https://github.com/abraunegg/onedrive/issues/792), [#884](https://github.com/abraunegg/onedrive/issues/884), [#1162](https://github.com/abraunegg/onedrive/issues/1162), [#1408](https://github.com/abraunegg/onedrive/issues/1408), [#1520](https://github.com/abraunegg/onedrive/issues/1520), [#1526](https://github.com/abraunegg/onedrive/issues/1526) - -**Summary:** - -Users experience sudden shutdowns in a client application during file transfers with Microsoft's Europe Data Centers, likely due to unstable internet or HTTPS inspection issues. This problem, often signaled by an error code of 141, is related to the application's reliance on Curl and OpenSSL. Resolution steps include system updates, seeking support from OS vendors, ISPs, OpenSSL/Curl teams, and providing detailed debug logs to Microsoft for analysis. - -**Detailed Description:** - -The application unexpectedly stops functioning during upload or download operations when using the client. This issue occurs without any apparent reason. Running `echo $?` after the unexpected exit may return an error code of 141. - -This problem predominantly arises when the client interacts with Microsoft's Europe Data Centers. - -**Technical Explanation:** - -The client heavily relies on Curl and OpenSSL for operations with the Microsoft OneDrive service. A common observation during this error is an entry in the HTTPS Debug Log stating: -``` -OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 -``` -To confirm this as the root cause, a detailed HTTPS debug log can be generated with these commands: -``` ---verbose --verbose --debug-https -``` - -This error typically suggests one of the following issues: -* An unstable internet connection between the user and the OneDrive service. -* An issue with HTTPS transparent inspection services that monitor the traffic en route to the OneDrive service. - -**Recommended Resolution:** - -Recommended steps to address this issue include: -* Updating your operating system to the latest version. -* Seeking assistance from your OS vendor. -* Contacting your Internet Service Provider (ISP) or your IT Help Desk. -* Reporting the issue to the OpenSSL and/or Curl teams for improved handling of such connection failures. -* Creating a HTTPS Debug Log during the issue and submitting a support request to Microsoft with the log for their analysis. - -For more in-depth SSL troubleshooting, please read: https://maulwuff.de/research/ssl-debugging.html \ No newline at end of file diff --git a/docs/national-cloud-deployments.md b/docs/national-cloud-deployments.md deleted file mode 100644 index 6b348388..00000000 --- a/docs/national-cloud-deployments.md +++ /dev/null @@ -1,145 +0,0 @@ -# How to configure access to specific Microsoft Azure deployments -## Application Version -Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. - -## Process Overview -In some cases it is a requirement to utilise specific Microsoft Azure cloud deployments to conform with data and security reuqirements that requires data to reside within the geographic borders of that country. -Current national clouds that are supported are: -* Microsoft Cloud for US Government -* Microsoft Cloud Germany -* Azure and Office365 operated by 21Vianet in China - -In order to successfully use these specific Microsoft Azure deployments, the following steps are required: -1. Register an application with the Microsoft identity platform using the Azure portal -2. Configure the new application with the appropriate authentication scopes -3. Validate that the authentication / redirect URI is correct for your application registration -4. Configure the onedrive client to use the new application id as provided during application registration -5. Configure the onedrive client to use the right Microsoft Azure deployment region that your application was registered with -6. Authenticate the client - -## Step 1: Register a new application with Microsoft Azure -1. Log into your applicable Microsoft Azure Portal with your applicable Office365 identity: - -| National Cloud Environment | Microsoft Azure Portal | -|---|---| -| Microsoft Cloud for US Government | https://portal.azure.com/ | -| Microsoft Cloud Germany | https://portal.azure.com/ | -| Azure and Office365 operated by 21Vianet | https://portal.azure.cn/ | - -2. Select 'Azure Active Directory' as the service you wish to configure -3. Under 'Manage', select 'App registrations' to register a new application -4. Click 'New registration' -5. Type in the appropriate details required as per below: - -![application_registration](./images/application_registration.jpg) - -6. To save the application registration, click 'Register' and something similar to the following will be displayed: - -![application_registration_done](./images/application_registration_done.jpg) - -**Note:** The Application (client) ID UUID as displayed after client registration, is what is required as the 'application_id' for Step 4 below. - -## Step 2: Configure application authentication scopes -Configure the API permissions as per the following: - -| API / Permissions name | Type | Description | Admin consent required | -|---|---|---|---| -| Files.ReadWrite | Delegated | Have full access to user files | No | -| Files.ReadWrite.All | Delegated | Have full access to all files user can access | No | -| Sites.ReadWrite.All | Delegated | Have full access to all items in all site collections | No | -| offline_access | Delegated | Maintain access to data you have given it access to | No | - -![authentication_scopes](./images/authentication_scopes.jpg) - -## Step 3: Validate that the authentication / redirect URI is correct -Add the appropriate redirect URI for your Azure deployment: - -![authentication_response_uri](./images/authentication_response_uri.jpg) - -A valid entry for the response URI should be one of: -* https://login.microsoftonline.us/common/oauth2/nativeclient (Microsoft Cloud for US Government) -* https://login.microsoftonline.de/common/oauth2/nativeclient (Microsoft Cloud Germany) -* https://login.chinacloudapi.cn/common/oauth2/nativeclient (Azure and Office365 operated by 21Vianet in China) - -For a single-tenant application, it may be necessary to use your specific tenant id instead of "common": -* https://login.microsoftonline.us/example.onmicrosoft.us/oauth2/nativeclient (Microsoft Cloud for US Government) -* https://login.microsoftonline.de/example.onmicrosoft.de/oauth2/nativeclient (Microsoft Cloud Germany) -* https://login.chinacloudapi.cn/example.onmicrosoft.cn/oauth2/nativeclient (Azure and Office365 operated by 21Vianet in China) - -## Step 4: Configure the onedrive client to use new application registration -Update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following: -```text -application_id = "insert valid entry here" -``` - -This will reconfigure the client to use the new application registration you have created. - -**Example:** -```text -application_id = "22c49a0d-d21c-4792-aed1-8f163c982546" -``` - -## Step 5: Configure the onedrive client to use the specific Microsoft Azure deployment -Update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following: -```text -azure_ad_endpoint = "insert valid entry here" -``` - -Valid entries are: -* USL4 (Microsoft Cloud for US Government) -* USL5 (Microsoft Cloud for US Government - DOD) -* DE (Microsoft Cloud Germany) -* CN (Azure and Office365 operated by 21Vianet in China) - -This will configure your client to use the correct Azure AD and Graph endpoints as per [https://docs.microsoft.com/en-us/graph/deployments](https://docs.microsoft.com/en-us/graph/deployments) - -**Example:** -```text -azure_ad_endpoint = "USL4" -``` - -If the Microsoft Azure deployment does not support multi-tenant applications, update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following: -```text -azure_tenant_id = "insert valid entry here" -``` - -This will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common". -The tenant id may be the GUID Directory ID (formatted "00000000-0000-0000-0000-000000000000"), or the fully qualified tenant name (e.g. "example.onmicrosoft.us"). -The GUID Directory ID may be located in the Azure administation page as per [https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id](https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id). Note that you may need to go to your national-deployment-specific administration page, rather than following the links within that document. -The tenant name may be obtained by following the PowerShell instructions on [https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id](https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id); it is shown as the "TenantDomain" upon completion of the "Connect-AzureAD" command. - -**Example:** -```text -azure_tenant_id = "example.onmicrosoft.us" -# or -azure_tenant_id = "0c4be462-a1ab-499b-99e0-da08ce52a2cc" -``` - -## Step 6: Authenticate the client -Run the application without any additional command switches. - -You will be asked to open a specific URL by using your web browser where you will have to login into your Microsoft Account and give the application the permission to access your files. After giving permission to the application, you will be redirected to a blank page. Copy the URI of the blank page into the application. -```text -[user@hostname ~]$ onedrive - -Authorize this app visiting: - -https://..... - -Enter the response uri: - -``` - -**Example:** -``` -[user@hostname ~]$ onedrive -Authorize this app visiting: - -https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=22c49a0d-d21c-4792-aed1-8f163c982546&scope=Files.ReadWrite%20Files.ReadWrite.all%20Sites.ReadWrite.All%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient - -Enter the response uri: https://login.microsoftonline.com/common/oauth2/nativeclient?code= - -Application has been successfully authorised, however no additional command switches were provided. - -Please use --help for further assistance in regards to running this application. -``` diff --git a/docs/privacy-policy.md b/docs/privacy-policy.md deleted file mode 100644 index 64fe1dd3..00000000 --- a/docs/privacy-policy.md +++ /dev/null @@ -1,65 +0,0 @@ -# Privacy Policy -Effective Date: May 16 2018 - -## Introduction - -This Privacy Policy outlines how OneDrive Client for Linux ("we," "our," or "us") collects, uses, and protects information when you use our software ("OneDrive Client for Linux"). We respect your privacy and are committed to ensuring the confidentiality and security of any information you provide while using the Software. - -## Information We Do Not Collect - -We want to be transparent about the fact that we do not collect any personal data, usage data, or tracking data through the Software. This means: - -1. **No Personal Data**: We do not collect any information that can be used to personally identify you, such as your name, email address, phone number, or physical address. - -2. **No Usage Data**: We do not collect data about how you use the Software, such as the features you use, the duration of your sessions, or any interactions within the Software. - -3. **No Tracking Data**: We do not use cookies or similar tracking technologies to monitor your online behavior or track your activities across websites or apps. - -## How We Use Your Information - -Since we do not collect any personal, usage, or tracking data, there is no information for us to use for any purpose. - -## Third-Party Services - -The Software may include links to third-party websites or services, but we do not have control over the privacy practices or content of these third-party services. We encourage you to review the privacy policies of any third-party services you access through the Software. - -## Children's Privacy - -Since we do not collect any personal, usage, or tracking data, there is no restriction on the use of this application by anyone under the age of 18. - -## Information You Choose to Share - -While we do not collect personal data, usage data, or tracking data through the Software, there may be instances where you voluntarily choose to share information with us, particularly when submitting bug reports. These bug reports may contain sensitive information such as account details, file names, and directory names. It's important to note that these details are included in the logs and debug logs solely for the purpose of diagnosing and resolving technical issues with the Software. - -We want to emphasize that, even in these cases, we do not have access to your actual data. The logs and debug logs provided in bug reports are used exclusively for technical troubleshooting and debugging purposes. We take measures to treat this information with the utmost care, and it is only accessible to our technical support and development teams. We do not use this information for any other purpose, and we have strict security measures in place to protect it. - -## Protecting Your Sensitive Data - -We are committed to safeguarding your sensitive data and maintaining its confidentiality. To ensure its protection: - -1. **Limited Access**: Only authorized personnel within our technical support and development teams have access to the logs and debug logs containing sensitive data, and they are trained in handling this information securely. - -2. **Data Encryption**: We use industry-standard encryption protocols to protect the transmission and storage of sensitive data. - -3. **Data Retention**: We retain bug report data for a limited time necessary for resolving the reported issue. Once the issue is resolved, we promptly delete or anonymize the data. - -4. **Security Measures**: We employ robust security measures to prevent unauthorized access, disclosure, or alteration of sensitive data. - -By submitting a bug report, you acknowledge and consent to the inclusion of sensitive information in logs and debug logs for the sole purpose of addressing technical issues with the Software. - -## Your Responsibilities - -While we take measures to protect your sensitive data, it is essential for you to exercise caution when submitting bug reports. Please refrain from including any sensitive or personally identifiable information that is not directly related to the technical issue you are reporting. You have the option to redact or obfuscate sensitive details in bug reports to further protect your data. - -## Changes to this Privacy Policy - -We may update this Privacy Policy from time to time to reflect changes in our practices or for other operational, legal, or regulatory reasons. We will notify you of any material changes by posting the updated Privacy Policy on our website or through the Software. We encourage you to review this Privacy Policy periodically. - -## Contact Us - -If you have any questions or concerns about this Privacy Policy or our privacy practices, please contact us at support@mynas.com.au or via GitHub (https://github.com/abraunegg/onedrive) - -## Conclusion - -By using the Software, you agree to the terms outlined in this Privacy Policy. If you do not agree with any part of this policy, please discontinue the use of the Software. - diff --git a/docs/sharepoint-libraries.md b/docs/sharepoint-libraries.md deleted file mode 100644 index d1714d4e..00000000 --- a/docs/sharepoint-libraries.md +++ /dev/null @@ -1,228 +0,0 @@ -# How to configure OneDrive SharePoint Shared Library sync -**WARNING:** Several users have reported files being overwritten causing data loss as a result of using this client with SharePoint Libraries when running as a systemd service. - -When this has been investigated, the following has been noted as potential root causes: -* File indexing application such as Baloo File Indexer or Tracker3 constantly indexing your OneDrive data -* The use of WPS Office and how it 'saves' files by deleting the existing item and replaces it with the saved data - -Additionally there could be a yet unknown bug with the client, however all debugging and data provided previously shows that an 'external' process to the 'onedrive' application modifies the files triggering the undesirable upload to occur. - -**Possible Preventative Actions:** -* Disable all File Indexing for your SharePoint Library data. It is out of scope to detail on how you should do this. -* Disable using a systemd service for syncing your SharePoint Library data. -* Do not use WPS Office to edit your documents. Use OpenOffice or LibreOffice as these do not exhibit the same 'delete to save' action that WPS Office has. - -Additionally, please use caution when using this client with SharePoint. - -## Application Version -Before reading this document, please ensure you are running application version [![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com/abraunegg/onedrive/releases) or greater. Use `onedrive --version` to determine what application version you are using and upgrade your client if required. - -## Process Overview -Syncing a OneDrive SharePoint library requires additional configuration for your 'onedrive' client: -1. Login to OneDrive and under 'Shared Libraries' obtain the shared library name -2. Query that shared library name using the client to obtain the required configuration details -3. Create a unique local folder which will be the SharePoint Library 'root' -4. Configure the client's config file with the required 'drive_id' -5. Test the configuration using '--dry-run' -6. Sync the SharePoint Library as required - -**Note:** The `--get-O365-drive-id` process below requires a fully configured 'onedrive' configuration so that the applicable Drive ID for the given Office 365 SharePoint Shared Library can be determined. It is highly recommended that you do not use the application 'default' configuration directory for any SharePoint Site, and configure separate items for each site you wish to use. - -## 1. Listing available OneDrive SharePoint Libraries -Login to the OneDrive web interface and determine which shared library you wish to configure the client for: -![shared_libraries](./images/SharedLibraries.jpg) - -## 2. Query OneDrive API to obtain required configuration details -Run the following command using the 'onedrive' client to query the OneDrive API to obtain the required 'drive_id' of the SharePoint Library that you wish to sync: -```text -onedrive --get-O365-drive-id '' -``` -This will return something similar to the following: -```text -Configuration file successfully loaded -Configuring Global Azure AD Endpoints -Initializing the Synchronization Engine ... -Office 365 Library Name Query: ------------------------------------------------ -Site Name: -Library Name: -drive_id: b!6H_y8B...xU5 -Library URL: ------------------------------------------------ -``` -If there are no matches to the site you are attempting to search, the following will be displayed: -```text -Configuration file successfully loaded -Configuring Global Azure AD Endpoints -Initializing the Synchronization Engine ... -Office 365 Library Name Query: blah - -ERROR: The requested SharePoint site could not be found. Please check it's name and your permissions to access the site. - -The following SharePoint site names were returned: - * - * - ... - * -``` -This list of site names can be used as a basis to search for the correct site for which you are searching - -## 3. Create a new configuration directory and sync location for this SharePoint Library -Create a new configuration directory for this SharePoint Library in the following manner: -```text -mkdir ~/.config/SharePoint_My_Library_Name -``` - -Create a new local folder to store the SharePoint Library data in: -```text -mkdir ~/SharePoint_My_Library_Name -``` - -**Note:** Do not use spaces in the directory name, use '_' as a replacement - -## 4. Configure SharePoint Library config file with the required 'drive_id' & 'sync_dir' options -Download a copy of the default configuration file by downloading this file from GitHub and saving this file in the directory created above: -```text -wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/SharePoint_My_Library_Name/config -``` - -Update your 'onedrive' configuration file (`~/.config/SharePoint_My_Library_Name/config`) with the local folder where you will store your data: -```text -sync_dir = "~/SharePoint_My_Library_Name" -``` - -Update your 'onedrive' configuration file(`~/.config/SharePoint_My_Library_Name/config`) with the 'drive_id' value obtained in the steps above: -```text -drive_id = "insert the drive_id value from above here" -``` -The OneDrive client will now be configured to sync this SharePoint shared library to your local system and the location you have configured. - -**Note:** After changing `drive_id`, you must perform a full re-synchronization by adding `--resync` to your existing command line. - -## 5. Validate and Test the configuration -Validate your new configuration using the `--display-config` option to validate you have configured the application correctly: -```text -onedrive --confdir="~/.config/SharePoint_My_Library_Name" --display-config -``` - -Test your new configuration using the `--dry-run` option to validate the application configuration: -```text -onedrive --confdir="~/.config/SharePoint_My_Library_Name" --synchronize --verbose --dry-run -``` - -**Note:** As this is a *new* configuration, the application will be required to be re-authorised the first time this command is run with the new configuration. - -## 6. Sync the SharePoint Library as required -Sync the SharePoint Library to your system with either `--synchronize` or `--monitor` operations: -```text -onedrive --confdir="~/.config/SharePoint_My_Library_Name" --synchronize --verbose -``` - -```text -onedrive --confdir="~/.config/SharePoint_My_Library_Name" --monitor --verbose -``` - -**Note:** As this is a *new* configuration, the application will be required to be re-authorised the first time this command is run with the new configuration. - -## 7. Enable custom systemd service for SharePoint Library -Systemd can be used to automatically run this configuration in the background, however, a unique systemd service will need to be setup for this SharePoint Library instance - -In order to automatically start syncing each SharePoint Library, you will need to create a service file for each SharePoint Library. From the applicable 'systemd folder' where the applicable systemd service file exists: -* RHEL / CentOS: `/usr/lib/systemd/system` -* Others: `/usr/lib/systemd/user` and `/lib/systemd/system` - -### Step1: Create a new systemd service file -#### Red Hat Enterprise Linux, CentOS Linux -Copy the required service file to a new name: -```text -sudo cp /usr/lib/systemd/system/onedrive.service /usr/lib/systemd/system/onedrive-SharePoint_My_Library_Name.service -``` -or -```text -sudo cp /usr/lib/systemd/system/onedrive@.service /usr/lib/systemd/system/onedrive-SharePoint_My_Library_Name@.service -``` - -#### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora -Copy the required service file to a new name: -```text -sudo cp /usr/lib/systemd/user/onedrive.service /usr/lib/systemd/user/onedrive-SharePoint_My_Library_Name.service -``` -or -```text -sudo cp /lib/systemd/system/onedrive@.service /lib/systemd/system/onedrive-SharePoint_My_Library_Name@.service -``` - -### Step 2: Edit new systemd service file -Edit the new systemd file, updating the line beginning with `ExecStart` so that the confdir mirrors the one you used above: -```text -ExecStart=/usr/local/bin/onedrive --monitor --confdir="/full/path/to/config/dir" -``` - -Example: -```text -ExecStart=/usr/local/bin/onedrive --monitor --confdir="/home/myusername/.config/SharePoint_My_Library_Name" -``` - -**Note:** When running the client manually, `--confdir="~/.config/......` is acceptable. In a systemd configuration file, the full path must be used. The `~` must be expanded. - -### Step 3: Enable the new systemd service -Once the file is correctly editied, you can enable the new systemd service using the following commands. - -#### Red Hat Enterprise Linux, CentOS Linux -```text -systemctl enable onedrive-SharePoint_My_Library_Name -systemctl start onedrive-SharePoint_My_Library_Name -``` - -#### Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora -```text -systemctl --user enable onedrive-SharePoint_My_Library_Name -systemctl --user start onedrive-SharePoint_My_Library_Name -``` -or -```text -systemctl --user enable onedrive-SharePoint_My_Library_Name@myusername.service -systemctl --user start onedrive-SharePoint_My_Library_Name@myusername.service -``` - -### Step 4: Viewing systemd status and logs for the custom service -#### Viewing systemd service status - Red Hat Enterprise Linux, CentOS Linux -```text -systemctl status onedrive-SharePoint_My_Library_Name -``` - -#### Viewing systemd service status - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora -```text -systemctl --user status onedrive-SharePoint_My_Library_Name -``` - -#### Viewing journalctl systemd logs - Red Hat Enterprise Linux, CentOS Linux -```text -journalctl --unit=onedrive-SharePoint_My_Library_Name -f -``` - -#### Viewing journalctl systemd logs - Others such as Arch, Ubuntu, Debian, OpenSuSE, Fedora -```text -journalctl --user --unit=onedrive-SharePoint_My_Library_Name -f -``` - -### Step 5: (Optional) Run custom systemd service at boot without user login -In some cases it may be desirable for the systemd service to start without having to login as your 'user' - -All the systemd steps above that utilise the `--user` option, will run the systemd service as your particular user. As such, the systemd service will not start unless you actually login to your system. - -To avoid this issue, you need to reconfigure your 'user' account so that the systemd services you have created will startup without you having to login to your system: -```text -loginctl enable-linger -``` - -Example: -```text -alex@ubuntu-headless:~$ loginctl enable-linger alex -``` - -## 8. Configuration for a SharePoint Library is complete -The 'onedrive' client configuration for this particular SharePoint Library is now complete. - -# How to configure multiple OneDrive SharePoint Shared Library sync -Create a new configuration as per the process above. Repeat these steps for each SharePoint Library that you wish to use. diff --git a/docs/terms-of-service.md b/docs/terms-of-service.md deleted file mode 100644 index cdf7c432..00000000 --- a/docs/terms-of-service.md +++ /dev/null @@ -1,54 +0,0 @@ -# OneDrive Client for Linux - Software Service Terms of Service - -## 1. Introduction - -These Terms of Service ("Terms") govern your use of the OneDrive Client for Linux ("Application") software and related Microsoft OneDrive services ("Service") provided by Microsoft. By accessing or using the Service, you agree to comply with and be bound by these Terms. If you do not agree to these Terms, please do not use the Service. - -## 2. License Compliance - -The OneDrive Client for Linux software is licensed under the GNU General Public License, version 3.0 (the "GPLv3"). Your use of the software must comply with the terms and conditions of the GPLv3. A copy of the GPLv3 can be found here: https://www.gnu.org/licenses/gpl-3.0.en.html - -## 3. Use of the Service - -### 3.1. Access and Accounts - -You may need to create an account or provide personal information to access certain features of the Service. You are responsible for maintaining the confidentiality of your account information and are solely responsible for all activities that occur under your account. - -### 3.2. Prohibited Activities - -You agree not to: - -- Use the Service in any way that violates applicable laws or regulations. -- Use the Service to engage in any unlawful, harmful, or fraudulent activity. -- Use the Service in any manner that disrupts, damages, or impairs the Service. - -## 4. Intellectual Property - -The OneDrive Client for Linux software is subject to the GPLv3, and you must respect all copyrights, trademarks, and other intellectual property rights associated with the software. Any contributions you make to the software must also comply with the GPLv3. - -## 5. Disclaimer of Warranties - -The OneDrive Client for Linux software is provided "as is" without any warranties, either expressed or implied. We do not guarantee that the use of the Application will be error-free or uninterrupted. - -Microsoft is not responsible for OneDrive Client for Linux. Any issues or problems with OneDrive Client for Linux should be raised on GitHub at https://github.com/abraunegg/onedrive or email support@mynas.com.au - -OneDrive Client for Linux is not responsible for the Microsoft OneDrive Service or the Microsoft Graph API Service that this Application utilizes. Any issue with either Microsoft OneDrive or Microsoft Graph API should be raised with Microsoft via their support channel in your country. - -## 6. Limitation of Liability - -To the fullest extent permitted by law, we shall not be liable for any direct, indirect, incidental, special, consequential, or punitive damages, or any loss of profits or revenues, whether incurred directly or indirectly, or any loss of data, use, goodwill, or other intangible losses, resulting from (a) your use or inability to use the Service, or (b) any other matter relating to the Service. - -This limitiation of liability explicitly relates to the use of the OneDrive Client for Linux software and does not affect your rights under the GPLv3. - -## 7. Changes to Terms - -We reserve the right to update or modify these Terms at any time without prior notice. Any changes will be effective immediately upon posting on GitHub. Your continued use of the Service after the posting of changes constitutes your acceptance of such changes. Changes can be reviewed on GitHub. - -## 8. Governing Law - -These Terms shall be governed by and construed in accordance with the laws of Australia, without regard to its conflict of law principles. - -## 9. Contact Us - -If you have any questions or concerns about these Terms, please contact us at https://github.com/abraunegg/onedrive or email support@mynas.com.au - diff --git a/docs/ubuntu-package-install.md b/docs/ubuntu-package-install.md deleted file mode 100644 index df20db92..00000000 --- a/docs/ubuntu-package-install.md +++ /dev/null @@ -1,420 +0,0 @@ -# Installation of 'onedrive' package on Debian and Ubuntu - -This document covers the appropriate steps to install the 'onedrive' client using the provided packages for Debian and Ubuntu. - -#### Important information for all Ubuntu and Ubuntu based distribution users: -This information is specifically for the following platforms and distributions: - -* Lubuntu -* Linux Mint -* POP OS -* Peppermint OS -* Raspbian -* Ubuntu - -Whilst there are [onedrive](https://packages.ubuntu.com/search?keywords=onedrive&searchon=names&suite=all§ion=all) Universe packages available for Ubuntu, do not install 'onedrive' from these Universe packages. The default Ubuntu Universe packages are out-of-date and are not supported and should not be used. - -## Determine which instructions to use -Ubuntu and its clones are based on various different releases, thus, you must use the correct instructions below, otherwise you may run into package dependancy issues and will be unable to install the client. - -### Step 1: Remove any configured PPA and associated 'onedrive' package and systemd service files -Many Internet 'help' pages provide inconsistent details on how to install the OneDrive Client for Linux. A number of these websites continue to point users to install the client via the yann1ck PPA repository however this PPA no longer exists and should not be used. - -To remove the PPA repository and the older client, perform the following actions: -```text -sudo apt remove onedrive -sudo add-apt-repository --remove ppa:yann1ck/onedrive -``` - -Additionally, Ubuntu and its clones have a bad habit of creating a 'default' systemd service file when installing the 'onedrive' package so that the client will automatically run the client post being authenticated. This systemd entry is erroneous and needs to be removed. -``` -Created symlink /etc/systemd/user/default.target.wants/onedrive.service → /usr/lib/systemd/user/onedrive.service. -``` -To remove this symbolic link, run the following command: -``` -sudo rm /etc/systemd/user/default.target.wants/onedrive.service -``` - -### Step 2: Ensure your system is up-to-date -Use a script, similar to the following to ensure your system is updated correctly: -```text -#!/bin/bash -rm -rf /var/lib/dpkg/lock-frontend -rm -rf /var/lib/dpkg/lock -apt-get update -apt-get upgrade -y -apt-get dist-upgrade -y -apt-get autoremove -y -apt-get autoclean -y -``` - -Run this script as 'root' by using `su -` to elevate to 'root'. Example below: -```text -Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-48-generic x86_64) - - * Documentation: https://help.ubuntu.com - * Management: https://landscape.canonical.com - * Support: https://ubuntu.com/advantage - -425 updates can be installed immediately. -208 of these updates are security updates. -To see these additional updates run: apt list --upgradable - -Your Hardware Enablement Stack (HWE) is supported until April 2025. -Last login: Thu Jan 20 14:21:48 2022 from my.ip.address -alex@ubuntu-20-LTS:~$ su - -Password: -root@ubuntu-20-LTS:~# ls -la -total 28 -drwx------ 3 root root 4096 Oct 10 2020 . -drwxr-xr-x 20 root root 4096 Oct 10 2020 .. --rw------- 1 root root 175 Jan 20 14:23 .bash_history --rw-r--r-- 1 root root 3106 Dec 6 2019 .bashrc -drwx------ 2 root root 4096 Apr 23 2020 .cache --rw-r--r-- 1 root root 161 Dec 6 2019 .profile --rwxr-xr-x 1 root root 174 Oct 10 2020 update-os.sh -root@ubuntu-20-LTS:~# cat update-os.sh -#!/bin/bash -rm -rf /var/lib/dpkg/lock-frontend -rm -rf /var/lib/dpkg/lock -apt-get update -apt-get upgrade -y -apt-get dist-upgrade -y -apt-get autoremove -y -apt-get autoclean -y -root@ubuntu-20-LTS:~# ./update-os.sh -Hit:1 http://au.archive.ubuntu.com/ubuntu focal InRelease -Hit:2 http://au.archive.ubuntu.com/ubuntu focal-updates InRelease -Hit:3 http://au.archive.ubuntu.com/ubuntu focal-backports InRelease -Hit:4 http://security.ubuntu.com/ubuntu focal-security InRelease -Reading package lists... 96% -... -Sourcing file `/etc/default/grub' -Sourcing file `/etc/default/grub.d/init-select.cfg' -Generating grub configuration file ... -Found linux image: /boot/vmlinuz-5.13.0-27-generic -Found initrd image: /boot/initrd.img-5.13.0-27-generic -Found linux image: /boot/vmlinuz-5.4.0-48-generic -Found initrd image: /boot/initrd.img-5.4.0-48-generic -Found memtest86+ image: /boot/memtest86+.elf -Found memtest86+ image: /boot/memtest86+.bin -done -Removing linux-modules-5.4.0-26-generic (5.4.0-26.30) ... -Processing triggers for libc-bin (2.31-0ubuntu9.2) ... -Reading package lists... Done -Building dependency tree -Reading state information... Done -root@ubuntu-20-LTS:~# -``` - -Reboot your system after running this process before continuing with Step 3. -```text -reboot -``` - -### Step 3: Determine what your OS is based on -Determine what your OS is based on. To do this, run the following command: -```text -lsb_release -a -``` -**Example:** -```text -alex@ubuntu-system:~$ lsb_release -a -No LSB modules are available. -Distributor ID: Ubuntu -Description: Ubuntu 22.04 LTS -Release: 22.04 -Codename: jammy -``` - -### Step 4: Pick the correct instructions to use -If required, review the table below based on your 'lsb_release' information to pick the appropriate instructions to use: - -| Release & Codename | Instructions to use | -|--------------------|---------------------| -| Linux Mint 19.x | This platform is End-of-Life (EOL) and no longer supported. You must upgrade to Linux Mint 21.x | -| Linux Mint 20.x | Use [Ubuntu 20.04](#distribution-ubuntu-2004) instructions below | -| Linux Mint 21.x | Use [Ubuntu 22.04](#distribution-ubuntu-2204) instructions below | -| Linux Mint Debian Edition (LMDE) 5 / Elsie | Use [Debian 11](#distribution-debian-11) instructions below | -| Linux Mint Debian Edition (LMDE) 6 / Faye | Use [Debian 12](#distribution-debian-12) instructions below | -| Debian 9 | This platform is End-of-Life (EOL) and no longer supported. You must upgrade to Debian 12 | -| Debian 10 | You must build from source or upgrade your Operating System to Debian 12 | -| Debian 11 | Use [Debian 11](#distribution-debian-11) instructions below | -| Debian 12 | Use [Debian 12](#distribution-debian-12) instructions below | -| Debian Sid | Refer to https://packages.debian.org/sid/onedrive for assistance | -| Raspbian GNU/Linux 10 | You must build from source or upgrade your Operating System to Raspbian GNU/Linux 12 | -| Raspbian GNU/Linux 11 | Use [Debian 11](#distribution-debian-11) instructions below | -| Raspbian GNU/Linux 12 | Use [Debian 12](#distribution-debian-12) instructions below | -| Ubuntu 18.04 / Bionic | This platform is End-of-Life (EOL) and no longer supported. You must upgrade to Ubuntu 22.04 | -| Ubuntu 20.04 / Focal | Use [Ubuntu 20.04](#distribution-ubuntu-2004) instructions below | -| Ubuntu 21.04 / Hirsute | Use [Ubuntu 21.04](#distribution-ubuntu-2104) instructions below | -| Ubuntu 21.10 / Impish | Use [Ubuntu 21.10](#distribution-ubuntu-2110) instructions below | -| Ubuntu 22.04 / Jammy | Use [Ubuntu 22.04](#distribution-ubuntu-2204) instructions below | -| Ubuntu 22.10 / Kinetic | Use [Ubuntu 22.10](#distribution-ubuntu-2210) instructions below | -| Ubuntu 23.04 / Lunar | Use [Ubuntu 23.04](#distribution-ubuntu-2304) instructions below | -| Ubuntu 23.10 / Mantic | Use [Ubuntu 23.10](#distribution-ubuntu-2310) instructions below | - -**Note:** If your Linux distribution and release is not in the table above, you have 2 options: - -1. Compile the application from source. Refer to install.md (Compilation & Installation) for assistance. -2. Raise a support case with your Linux Distribution to provide you with an applicable package you can use. - -## Distribution Package Install Instructions - -### Distribution: Debian 11 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|✔|✔|✔|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_11/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_11/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - -### Distribution: Debian 12 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|✔|✔|✔|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_12/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/Debian_12/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - -### Distribution: Ubuntu 20.04 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|❌|✔|✔|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_20.04/Release.key | sudo apt-key add - -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo 'deb https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_20.04/ ./' | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - -### Distribution: Ubuntu 21.04 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|❌|✔|✔|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_21.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_21.04/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - -### Distribution: Ubuntu 21.10 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|❌|✔|✔|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_21.10/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_21.10/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - -### Distribution: Ubuntu 22.04 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|❌|✔|✔|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_22.04/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - -### Distribution: Ubuntu 22.10 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|❌|✔|✔|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_22.10/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_22.10/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - -### Distribution: Ubuntu 23.04 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|❌|✔|✔|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_23.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_23.04/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - -### Distribution: Ubuntu 23.10 -The packages support the following platform architectures: -|  i686  | x86_64 | ARMHF | AARCH64 | -|:----:|:------:|:-----:|:-------:| -|❌|✔|❌|✔| - -#### Step 1: Add the OpenSuSE Build Service repository release key -Add the OpenSuSE Build Service repository release key using the following command: -```text -wget -qO - https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_23.10/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/obs-onedrive.gpg > /dev/null -``` - -#### Step 2: Add the OpenSuSE Build Service repository -Add the OpenSuSE Build Service repository using the following command: -```text -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/obs-onedrive.gpg] https://download.opensuse.org/repositories/home:/npreining:/debian-ubuntu-onedrive/xUbuntu_23.10/ ./" | sudo tee /etc/apt/sources.list.d/onedrive.list -``` - -#### Step 3: Update your apt package cache -Run: `sudo apt-get update` - -#### Step 4: Install 'onedrive' -Run: `sudo apt install --no-install-recommends --no-install-suggests onedrive` - -#### Step 5: Read 'Known Issues' with these packages -Read and understand the [known issues](#known-issues-with-installing-from-the-above-packages) with these packages below, taking any action that is needed. - - -## Known Issues with Installing from the above packages - -### 1. The client may segfault | core-dump when exiting -When the client is run in `--monitor` mode manually, or when using the systemd service, the client may segfault on exit. - -This issue is caused by the way the 'onedrive' packages are built using the distribution LDC package & the default distribution compiler options which is the root cause for this issue. Refer to: https://bugs.launchpad.net/ubuntu/+source/ldc/+bug/1895969 - -**Additional references:** -* https://github.com/abraunegg/onedrive/issues/1053 -* https://github.com/abraunegg/onedrive/issues/1609 - -**Resolution Options:** -* Uninstall the package and build client from source