https://wiki.archlinux.org/api.php?action=feedcontributions&user=Sikmir&feedformat=atomArchWiki - User contributions [en]2024-03-29T07:14:09ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=Telegram&diff=582704Telegram2019-09-17T18:55:31Z<p>Sikmir: Add telega.el</p>
<hr />
<div>[[Category:Instant messaging]]<br />
[[fa:Telegram]]<br />
[[ja:Telegram]]<br />
[[pt:Telegram]]<br />
[[zh-hans:Telegram]]<br />
[[ru:Telegram]]<br />
[[wikipedia:Telegram (software)|Telegram]] is a cloud-based cross-platform instant messaging service with optional end-to-end encryption. Account creation requires a phone number.<br />
<br />
The official clients are open-source but the code for recent versions is not always immediately published. The server-side code is proprietary.<br />
<br />
== Installation ==<br />
<br />
You can use one of following methods in order to use Telegram in Arch:<br />
<br />
=== Chat client plugins ===<br />
<br />
* By using {{AUR|telegram-purple}} or {{AUR|telegram-purple-git}} packages, connection to Telegram through (graphical or command-line) messenger softwares based on {{Pkg|libpurple}} such as [[Pidgin]] is provided.<br />
* Messaging apps that are using [[wikipedia:Telepathy_(software)|Telepathy]] such as {{Pkg|empathy}} (the default messenger for [[GNOME]]) can make use of {{Pkg|telepathy-haze}} package, which provides possibility of using {{Pkg|libpurple}} and thus {{AUR|telegram-purple}} to connect Telegram.<br />
* In the [[KDE]] desktop environment using {{Pkg|telepathy-morse}} provides capability of connecting the default messenger to Telegram.<br />
<br />
=== Graphical clients ===<br />
<br />
The [https://desktop.telegram.org/ official app]:<br />
<br />
* {{Pkg|telegram-desktop}}, built by Arch Linux<br />
* {{AUR|telegram-desktop-bin}}, built by upstream<br />
* {{AUR|telegram-desktop-systemqt-notoemoji}} Experimental build of Telegram Desktop using system Qt and emojis replaced with those from [https://github.com/googlei18n/noto-emoji Noto Color Emoji].<br />
<br />
{{Tip|Telegram uses Open Sans as the default font, which is provided by the optional dependency {{Pkg|ttf-opensans}}.}}<br />
<br />
Third-party clients:<br />
<br />
* {{AUR|bettergram}}<br />
* {{AUR|kepka-git}}<br />
* {{AUR|cutegram-git}}<br />
* {{AUR|telegreat-git}}<br />
<br />
=== Command-line clients ===<br />
<br />
* {{AUR|telegram-cli-git}} provides command-line interface to connect and use Telegram. For more information about the program, visit the program page on [https://github.com/vysheng/tg Github].<br />
* {{AUR|nctelegram-git}} is a command-line interface for Telegram based on [[wikipedia:Ncurses|Ncurses]] and needs {{AUR|telegram-cli-git}} to run. For more information about the program, visit the program page on [https://github.com/Nanoseb/ncTelegram Github].<br />
* {{AUR|python-telegram-send}}, not a full client but a command-line tool to directly send messages or files via Telegram.<br />
* [https://github.com/zevlg/telega.el telega.el] - GNU Emacs telegram client.<br />
<br />
=== Web-based clients ===<br />
<br />
* The official [https://web.telegram.org Telegram Web].<br />
* {{AUR|franz}} is an [https://github.com/meetfranz/franz open-source] web-based application that can be used for web-based interface of various instant messaging software such as [[wikipedia:Telegram (software)|Telegram]], [[wikipedia:WhatsApp|WhatsApp]], [[wikipedia:Facebook|Facebook]], and more.<br />
* {{AUR|rambox-bin}} is an alternative to Franz, also open source. It offers all features of its counterpart.<br />
* Use [https://addons.mozilla.org/en-US/firefox/addon/telegram-desktop/ Telegram Desktop] addons for [[Firefox]], to connect to Telegram in your browser via web interface.<br />
* Use [https://telegram.org/dl/webogram/chromeapp Telegram Chrome app] for [[Chromium]], to connect to Telegram in your browser via web interface.<br />
<br />
== Tips and tricks ==<br />
<br />
=== Telegram resources about Arch Linux ===<br />
<br />
* [https://t.me/archlinuxgroup Arch Linux] - Unofficial group for discussing everything about Arch Linux.<br />
* [https://t.me/archewikibot ArchWikiBot] - Inline bot for searching through ArchWiki pages.<br />
* [https://t.me/planetarch Planet Arch Linux & News] - Channel with recent Planet Arch updates and Latest News in one place.<br />
* [https://t.me/archlinux_updates Arch Linux: Recent package updates] - Channel with recent package updates in Arch Linux repositories.<br />
* [https://t.me/archlinuxnews Arch Linux News] - Channel with latest news from Arch web site ''(not updated)''.<br />
* [https://t.me/archplanet Planet Arch] - Channel with latest posts from Planet Arch web site ''(not updated)''.<br />
* [https://t.me/archlinuxfr Archlinux.fr News] - Channel with latest posts from Archlinux.fr forums and other stuff about Arch Linux.<br />
* [https://t.me/archlinux_FR Archlinux.fr Chat] - Unofficial group for discussing everything about Arch Linux for french users.<br />
<br />
=== Unread messages counter for Telegram Desktop ===<br />
<br />
By default, only the icon in the system tray will show the number of unread messages.<br />
If you want to have the actual app icon to show the unread message counter as well, you can use the Unity badge integration, which can be handled by KDE and Gnome as well.<br />
To enable the Unity integration, you will have to install {{AUR|libunity}} and start Telegram Desktop with the {{ic|XDG_CURRENT_DESKTOP}} environment variable set to {{ic|Unity}}, e.g. copy the {{ic|.desktop}} file to {{ic|~/.local/share/applications/}} and change the {{ic|Exec}} line to start Telegram Desktop with the environment variable set instead.</div>Sikmirhttps://wiki.archlinux.org/index.php?title=Sway&diff=576675Sway2019-06-30T21:24:12Z<p>Sikmir: Fix url</p>
<hr />
<div>[[Category:Tiling WMs]]<br />
[[Category:Dynamic WMs]]<br />
[[ja:Sway]]<br />
''sway'' is a compositor for [[Wayland]] designed to be fully compatible with [[i3]]. According to [https://swaywm.org the official website]:<br />
:Sway is a tiling Wayland compositor and a drop-in replacement for the i3 window manager for X11. It works with your existing i3 configuration and supports most of i3's features, plus a few extras.<br />
<br />
== Installation ==<br />
<br />
''sway'' can be [[install]]ed with the {{Pkg|sway}} package. The development version can be installed using {{AUR|wlroots-git}} and {{AUR|sway-git}}. It's advisable to always update ''wlroots'' when you update ''sway'', due to tight dependencies.<br />
<br />
You may also install {{Pkg|swaylock}} and {{Pkg|swayidle}} to lock your screen and set up an idle manager.<br />
<br />
== Starting ==<br />
<br />
{{Tip|See [[Wayland#GUI libraries]] for appropriate environment variables to set for window decoration libraries.}}<br />
<br />
=== From a TTY ===<br />
<br />
To start Sway, simply type ''sway'' from a TTY.<br />
<br />
=== From a display manager ===<br />
<br />
{{Note|Sway does not support display managers officially.[https://github.com/swaywm/sway/pull/3634#issuecomment-462779163]}}<br />
<br />
The sway session is located at {{ic|/usr/share/wayland-sessions/sway.desktop}}. It is automatically recognized by modern display managers like [[GDM]] and [[SDDM]].<br />
<br />
Also you can use text-based session manager, see [[Display manager#Console]].<br />
<br />
== Configuration ==<br />
<br />
If you already use i3, then copy your i3 configuration to {{ic|~/.config/sway/config}} and it should work out of the box. Otherwise, copy the sample configuration file to {{ic|~/.config/sway/config}}. It is located at {{ic|/etc/sway/config}}, unless the {{ic|DFALLBACK_CONFIG_DIR}} flag has been set. See {{man|5|sway}} for information on the configuration.<br />
<br />
=== Keymap ===<br />
<br />
By default, sway starts with the US QWERTY keymap. To configure per-input:<br />
<br />
{{hc|~/.config/sway/config|<nowiki><br />
input * xkb_layout "us,de,ru"<br />
input * xkb_variant "colemak,,typewriter"<br />
input * xkb_options "grp:win_space_toggle"<br />
input "MANUFACTURER1 Keyboard" xkb_model "pc101"<br />
input "MANUFACTURER2 Keyboard" xkb_model "jp106"<br />
</nowiki>}}<br />
<br />
More details are available in {{man|7|xkeyboard-config}} and {{man|5|sway-input}}.<br />
<br />
The keymap can also be configured using environment variables ({{ic|XKB_DEFAULT_LAYOUT}}, {{ic|XKB_DEFAULT_VARIANT}}, etc.) when starting sway.<br />
<br />
=== Statusbar ===<br />
<br />
Installing the program {{Pkg|i3status}} is an easy way to get a practical, default statusline. All one has to do is add following snippet at the end of your sway config:<br />
<br />
{{hc|~/.config/sway/config|<nowiki><br />
bar {<br />
status_command i3status<br />
}<br />
</nowiki>}}<br />
<br />
If you want to achieve colored output of i3status, you can adjust following part in the i3status configuration:<br />
<br />
{{hc|~/.config/i3status/config|<nowiki><br />
general {<br />
colors = true<br />
interval = 5<br />
}<br />
</nowiki>}}<br />
<br />
In both examples, the system-wide installed configuration files has been copied over to the user directory and then modified. <br />
<br />
{{Tip|{{Pkg|waybar}} is an alternative to the bar included with sway (swaybar).}}<br />
<br />
=== Wallpaper ===<br />
<br />
Since release 1.1.1 the wallpaper part of the SwayWM project was moved to {{Pkg|swaybg}}, which is needed in order to run the output command.<br />
<br />
This line, which can be appended at the end of your sway configuration, sets a background image on all displays (output matches all with name {{ic|"*"}}):<br />
<br />
{{hc|~/.config/sway/config|<nowiki><br />
output "*" bg /home/onny/pictures/fredwang_norway.jpg fill<br />
</nowiki>}}<br />
<br />
Of course you have to replace the file name and path according to your wallpaper.<br />
<br />
=== Input devices ===<br />
<br />
Its possible to tweak specific input device configurations. For example to enable tap-to-click and natural scolling for a touchpad, add an input block:<br />
<br />
{{hc|~/.config/sway/config|<nowiki><br />
input "2:14:ETPS/2_Elantech_Touchpad" {<br />
tap enabled<br />
natural_scroll enabled<br />
}<br />
</nowiki>}}<br />
<br />
Where as the device identifier can be queried with:<br />
<br />
$ swaymsg -t get_inputs<br />
<br />
The output from the command, sometimes has a "\" to escape symbols like "/" (ie {{ic|"2:14:ETPS\/2_Elantech_Touchpad"}}) and it needs to be removed.<br />
<br />
More documentation and options like acceleration profiles can be found in {{man|5|sway-input}}.<br />
<br />
=== HiDPI ===<br />
<br />
Set your displays scale factor with the {{ic|output}} command in your config file. The scale factor can be fractional, but it is usually 2 for HiDPI screens.<br />
<br />
output <name> scale <factor><br />
<br />
You can find your display name with the following command:<br />
<br />
$ swaymsg -t get_outputs<br />
<br />
=== Custom keybindings ===<br />
<br />
[[Extra keyboard keys|Special keys]] on your keyboard can be used to execute commands, for example to control your volume or your monitor brightness:<br />
<br />
{{hc|~/.config/sway/config|<nowiki><br />
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%<br />
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%<br />
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle<br />
bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle<br />
bindsym XF86MonBrightnessDown exec brightnessctl set 5%-<br />
bindsym XF86MonBrightnessUp exec brightnessctl set +5%<br />
</nowiki>}}<br />
<br />
To control brightness you can use {{AUR|brightnessctl}} or {{Pkg|light}}. For a list of utilities to control brightness and color correction see [[Backlight]].<br />
<br />
=== Xresources ===<br />
<br />
Copy {{ic|~/.Xresources}} to {{ic|~/.Xdefaults}} to use them in Sway.<br />
<br />
=== Run programs natively under Wayland (without Xwayland support) ===<br />
<br />
{{Accuracy|{{ic|xwayland disable}} is not necessary to run programs natively under Wayland, configuring the [[Wayland#GUI libraries|GUI libraries]] appropriately is enough. Keeping XWayland enabled is good for programs that don't work otherwise.}}<br />
<br />
First, be sure the toolkit or library of every program that is and will be installed [[Wayland#GUI_libraries|support Wayland]]. Then append the following line to your sway configuration file to disable Xwayland support:<br />
<br />
{{hc|~/.config/sway/config|<nowiki><br />
xwayland disable<br />
</nowiki>}}<br />
<br />
{{ Note| Some programs, like [[Firefox#Wayland|Firefox]], [[#Application launchers|bemenu]] or [[Wayland#Qt_5|Qt5]] based programs, also need specific environment variables set for them to run natively under Wayland. }}<br />
{{ Note| In a fresh Sway install, you need to change the default menu and terminal applications because they depend on Xwayland. }}<br />
<br />
== Tips and tricks ==<br />
<br />
=== Autostart on login ===<br />
<br />
To start sway from tty1 on login with default US keyboard, edit:<br />
<br />
{{hc|~/.bash_profile|<br />
<nowiki>if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then<br />
XKB_DEFAULT_LAYOUT=us exec sway<br />
fi</nowiki><br />
}}<br />
<br />
=== Backlight toggle ===<br />
<br />
To turn off (and on) your displays with a key (e.g. {{ic|Pause}}) bind the following in your Sway {{ic|config}}:<br />
<br />
#!/usr/bin/dash<br />
read lcd < /tmp/lcd<br />
if [ "$lcd" -eq "0" ]; then<br />
swaymsg "output * dpms on"<br />
echo 1 > /tmp/lcd<br />
else<br />
swaymsg "output * dpms off"<br />
echo 0 > /tmp/lcd<br />
fi<br />
<br />
=== Screen capture ===<br />
<br />
Capturing the screen can be done using {{Pkg|grim}} or {{AUR|swayshot}} for screenshots and {{AUR|wf-recorder-git}} for video. Optionally, {{Pkg|slurp}} can be used to select the part of the screen to capture.<br />
<br />
Take a screenshot of the whole screen:<br />
<br />
$ grim screenshot.png<br />
<br />
Take a screenshot of a part of the screen:<br />
<br />
$ grim -g "$(slurp)" screenshot.png<br />
<br />
Capture a video of the whole screen:<br />
<br />
$ wf-recorder -o recording.mp4<br />
<br />
Capture a video of a part of the screen:<br />
<br />
$ wf-recorder -g "$(slurp)"<br />
<br />
Example of usage with {{Pkg|grim}}, {{Pkg|slurp}} and {{Pkg|wl-clipboard}}, screenshot directly with Print button to clipboard. <br />
{{hc|~/.config/sway/config|<br />
<nowiki>bindsym --release Print exec grim -g \"$(slurp)" - | wl-copy</nowiki><br />
}}<br />
<br />
== Troubleshooting ==<br />
<br />
=== Application launchers ===<br />
<br />
i3-dmenu-desktop, {{Pkg|dmenu}}, and {{Pkg|rofi}} all function relatively well in Sway, but all run under XWayland and suffer from the same issue where they can become unresponsive if the cursor is moved to a native Wayland window. The reason for this issue is that Wayland clients/windows do not have access to input devices unless they have focus of the screen. The XWayland server is itself a client to the Wayland compositor, so one of its XWayland clients must have focus for it to access user input. However, once one of its clients has focus, it can gather input and make it available to all XWayland clients through the X11 protocol. Hence, moving the cursor to an XWayland window and pressing Escape should fix the issue, and sometimes running {{ic|pkill}} does too.<br />
<br />
{{Pkg|bemenu}} is a native Wayland dmenu replacement which can optionally be combined with {{AUR|j4-dmenu-desktop}} to provide a Wayland-native combination for launching desktop files (as i3-dmenu-desktop does):<br />
<br />
j4-dmenu-desktop --dmenu='bemenu -i --nb "#3f3f3f" --nf "#dcdccc" --fn "pango:DejaVu Sans Mono 12"' --term='termite'<br />
<br />
You may need to set {{ic|BEMENU_BACKEND}} environment variable to "wayland" if you choose not to disable XWayland.<br />
<br />
You can also build your own with a floating terminal and fzf as discussed in a [https://github.com/swaywm/sway/issues/1367 GitHub issue].<br />
<br />
=== VirtualBox ===<br />
<br />
Sway doesn't work well (or at all) under [[VirtualBox]].<br />
<br />
=== Sway socket not detected ===<br />
<br />
Using a {{ic|swaymsg}} argument, such as {{ic|swaymsg -t get_outputs}}, will sometimes return the message:<br />
<br />
sway socket not detected.<br />
ERROR: Unable to connect to<br />
<br />
when run inside a terminal multiplexer (such as gnu screen or tmux). This means {{ic|swaymsg}} could not connect to the socket provided in your {{ic|SWAYSOCK}}.<br />
<br />
To view what the current value of {{ic|SWAYSOCK}} is, type:<br />
<br />
$ env | fgrep SWAYSOCK<br />
SWAYSOCK=/run/user/1000/sway-ipc.1000.4981.sock<br />
<br />
To work around this problem, you may try attaching to a socket based on the running sway process:<br />
<br />
$ export SWAYSOCK=/run/user/$(id -u)/sway-ipc.$(id -u).$(pgrep -x sway).sock<br />
<br />
To avoid this error, run the command outside of a multiplexer.<br />
<br />
=== Unable to retrieve socket path ===<br />
<br />
Requesting messages from {{ic|swaymsg -t}} on a tty may return the following message:<br />
<br />
Unable to retrieve socket path<br />
<br />
{{ic|SWAYSOCK}} environment variable is set after launching Sway, therefore a workaround to this error is to request {{ic|swaymsg -t [message]}} in a terminal inside Sway.<br />
<br />
=== Keybindings and keyboard layouts ===<br />
<br />
By default, if you are using more than one keyboard layout, e.g. {{ic|<nowiki>input * xkb_layout "us,ru"</nowiki>}}, bindings may become broken when you switch on some secondary layout.<br />
<br />
Thanks to https://github.com/swaywm/sway/pull/3058, all you need is to add {{ic|--to-code}} key to sensitive {{ic|bindsym}} lines like this:<br />
{{bc|<nowiki><br />
bindsym --to-code {<br />
$mod+$left focus left<br />
$mod+$down focus down<br />
$mod+$up focus up<br />
$mod+$right focus right<br />
}</nowiki><br />
}}<br />
<br />
== See also ==<br />
<br />
* [https://github.com/swaywm/sway GitHub project]<br />
* [https://github.com/swaywm/sway/wiki Sway official wiki]<br />
* [https://git.sr.ht/~sircmpwn/sway sr.ht git page]<br />
* [https://swaywm.org Website]<br />
* [https://drewdevault.com/2019/03/11/Sway-1.0-released.html Announcing the release of sway 1.0]</div>Sikmirhttps://wiki.archlinux.org/index.php?title=Talk:VCS_package_guidelines&diff=576530Talk:VCS package guidelines2019-06-28T16:18:36Z<p>Sikmir: /* GitHub API usage */ Add comment</p>
<hr />
<div>== Numeric vs Date Standard in Git pkgver ==<br />
<br />
I'd like to see a standard emerge in AUR Git packages, but standards have to work down to the lowest common denominator. Only a small minority of GitHub projects properly tag their releases, so there can be only two LCD standards for Git packages: the Numeric standard, e.g. ("r1581.2b039da") and the Date standard, e.g. ("2014-01-01"). The date standard is much more readable, and actionable, and has the additional benefit of being backwards compatible with older Git packages.<br />
<br />
I don't know if any standard can emerge even if we wanted it to, but please allow me to at least add the Date standard to the VCS package guidelines wiki (as opposed to scrubbing it, :).<br />
<br />
:Using the commit date would be incorrect because it doesn't refer to a specific commit and the dates are not always sequential. It would be even more wrong if it was the build date, as that doesn't refer to anything to do with the version. -- [[User:thestinger|thestinger]] 21:33, 23 January 2015 (UTC)<br />
<br />
::''it doesn't refer to a specific commit''<br />
::<br />
::Neither does "r1581.2b039da" refer to a specific commit without the .git repo cmdline interaction, and it is considered best practice to prune $pkgdir of .git:<br />
::<br />
find "$pkgdir" -type d -name .git -exec rm -r '{}' +<br />
::<br />
::Can you explain what you mean by "the dates are not always sequential"? The Date standard looks like this:<br />
::<br />
git log -1 --format="%cd" --date=short | sed "s|-||g"<br />
::<br />
::It displays the latest commit date from the upstream Git repo.<br />
::<br />
::In the edge case of breaking changes occurring upstream in Git repos on the same day, then package maintainers should increment pkgrel. In practice, "2014-01-01" is much more readable and useful than "r1581.2b039da". The readability benefits of "2014-01-01" vs. "r1581.2b039da" should not be underestimated due to edge cases. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 18:39, 24 January 2015 (UTC)<br />
:::A git commit id certainly refers to a specific commit. I don't know why you think this has anything to do with shipping the VCS repository in the package. The commit date of the most recent commit may be from 20 weeks ago while the earlier commits were from last week. Git does not have a linear history. It's not going to be changed to use a version format where it can go both backwards and forwards with no way of tracing it back to the commit. Readability is worthless if the information isn't meaningful... There are 2 hard requirements: newer revisions must have higher package versions without exceptions, and it must be possible to trace it back to a commit to properly identify and report bugs. -- [[User:thestinger|thestinger]] 18:53, 24 January 2015<br />
:::<br />
::::<br />
::::I am quite certain of what a commit ID looks like, e.g. 2d5749d0315a59f4a8bf73ebbe757b227c8c17a3, not r1581.2b039da.<br />
::::<br />
::::Can you show me where to find "r1581.2b039da" on a GitHub/BitBucket repo? It doesn't exist anywhere that I can see. You need to have the repo locally, then cd into the Git repo and run:<br />
::::<br />
git rev-list --count HEAD<br />
::::<br />
::::That is work-intensive, and it conflicts with the best practice of pruning AUR packages of .git repos.<br />
::::<br />
::::I previously used the Wiki-recommended Numeric standard, so it's not like I haven't used it. I switched to the Date standard, updating hundreds of packages to reflect it. Why do you suppose that is?<br />
::::<br />
:::: ''Readability is worthless if the information isn't meaningful''<br />
::::You'd be hard pressed to convince me that the date "2014-01-01" is somehow *less* semantically meaningful or actionable than "r1581". I say this after maintaining for years, hundreds of Git packages in the AUR. You can tell by grepping `pacman -Q` exactly which AUR git packages are out of date with a two-second visit to GitHub. The Date standard is incredibly actionable and pragmatic not to mention simple and immediately understandable by anyone.<br />
::::<br />
:::: ''newer revisions must have higher package versions without exceptions''<br />
::::<br />
::::Not a problem: "2014-01-01" < "2014-01-02"<br />
::::<br />
:::: ''it must be possible to trace it back to a commit to properly identify and report bugs''<br />
::::<br />
:::: Given how frequently "stable" Go packages and C packages pull in Git dependencies as part of their build process without specifying a certain commit, I disagree with this proposition. Why would recording the version of acmedaemon as 1.5, when it pulls in Git packages without specifying commit ID, be all that different in bug reports than "2014-01-01"? In both cases, you will not be able to track down the exact cause of the bug by commit. In both cases, you will in all likelihood end up consulting the build date. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 03:32, 25 January 2015 (UTC)<br />
<br />
:::::''I am quite certain of what a commit ID looks like, e.g. 2d5749d0315a59f4a8bf73ebbe757b227c8c17a3, not r1581.2b039da.''<br />
:::::In your scenerio, 2b039da is the short version of the commit hash and does point to a specific commit. As for where you find it on Github, it's listed on the commit log, of course. Just look at the right hand side of the page.<br />
:::::''You'd be hard pressed to convince me that the date "2014-01-01" is somehow *less* semantically meaningful or actionable than "r1581".''<br />
:::::In this case, human readability really is meaningless. Machine readability is all that matters.<br />
:::::''Not a problem: "2014-01-01" < "2014-01-02"''<br />
:::::And what happens when the commit after that is dated 2013-12-31? As thestinger pointed out, Git is not linear.<br />
:::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 03:40, 25 January 2015 (UTC)<br />
<br />
::::::''2b039da is the short version of the commit hash''<br />
::::::<br />
::::::Can this information be easily compared on GitHub to your local package version to check if it is out of date? The answer is no.<br />
::::::<br />
::::::It is not actionable, except by cloning the repo yourself, running the Git command, and then manually scanning the Git log for short versions. It's very work-intensive.<br />
::::::<br />
::::::''Git is not linear''<br />
::::::<br />
::::::Neither are stable packages on PyPi: https://pypi.python.org/pypi/tackpy/0.9.9a<br />
::::::<br />
::::::Pacman views the upgrade of 0.9.9 -> 0.9.9a as a downgrade. See https://aur.archlinux.org/packages/python2-tackpy for a real world example of this edge case. Edge cases should be no reason to prevent readers of the wiki to make informed choices about Git packaging standards. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 04:08, 25 January 2015 (UTC)<br />
<br />
:::::::Yes, the short hash of each commit is listed in the commit log. Also note that the revision count (the "r" number listed first) is also listed at the top of each repo's page.<br />
:::::::As for PyPi's versioning scheme, their choice is different than what Arch's vercmp assumes. The packager needs to take this into account, just as all packagers must take upstream's idiosyncrasies into account. I don't see how it's relevant here.<br />
:::::::You also never answered my question, what happens when the last commit is dated before the commit previous to it? This question is critical, as it would cause your versioning scheme to go backwards by any and all measures. That makes it unacceptable.<br />
:::::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 04:15, 25 January 2015 (UTC)<br />
<br />
::::::::Incorrect.<br />
::::::::<br />
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)<br />
::::::::<br />
::::::::The output of the above command does not correspond to any piece of information on GitHub.<br />
::::::::<br />
::::::::If PyPi packagers should take edge cases into account for PyPi packages, then they should do the same for Git packages. Edge cases aren't reason enough to scrub a competing standard from the wiki. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 04:23, 25 January 2015 (UTC)<br />
<br />
:::::::::I'm sorry if you can't find this information on GitHub. It's very, very plainly displayed in the places I already pointed you to. If you would take a minute to check instead of just jumping at me, you might find it.<br />
:::::::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 04:31, 25 January 2015 (UTC)<br />
<br />
::::::::::''the short hash of each commit is listed in the commit log. Also note that the revision count (the "r" number listed first) is also listed at the top of each repo's page''.<br />
::::::::::<br />
::::::::::This is (partially) incorrect. The short hash of each commit is not listed. What is listed in the commit log is the truncated commit ID.<br />
::::::::::<br />
::::::::::The revision count point I will retract. It didn't appear to work for my own Git repos, but that was because I ran the command from a Git subrepo (edge case :). The date still has the advantage of being more human readable than r1582. If a package has version 2011-10-22, I will know this project is either unmaintained, or it's been a really long time since I last rebuilt it. All without leaving the terminal. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 07:33, 25 January 2015 (UTC)<br />
<br />
::::::::::It's also very easy to look up or link to commits via the abbreviated commit hashes or proper identifiers produced by {{ic|git describe}}. -- [[User:thestinger|thestinger]] 04:33, 25 January 2015 (UTC)<br />
<br />
::::::That has nothing to do with non-linear history. It has to do with an incompatibility between Pacman's version comparison and the one chosen by the project. There are ways of dealing with that, but it has nothing to do with this discussion. -- [[User:thestinger|thestinger]] 04:24, 25 January 2015 (UTC)<br />
<br />
:::::The ideal version is the one produced by {{ic|git describe}}, because it's easily understood by humans (last tag, commits since last tag, abbreviated commit), is also understood by the various Git commands and GitHub and is monotonically increasing thanks to the inclusion of the last version and revision count since then. The versions it produces ({{ic|10-7-g8537989}}) can be directly used with commands like {{ic|git show}}. Unlike the build date, it identifies a unique revision of the project, including the state of any submodules.<br />
<br />
:::::The only case where another method should be used is when the project doesn't yet have any tagged release or does the releases in a way that's not very sane. The releases ''should'' be tagged on master with additional tags in stable branches for fixes backported to old releases. If this isn't the case, the {{ic|git describe}} output needs to be emulated. A date is a poor way of doing that, because it's not connected to a specific point in the revision history.<br />
<br />
:::::The only case where the commit date would work is if Git is being used as a crippled centralized version control system. If all commits get created against master (no merging branches or patches) in a centralized repository where the system clock is never moved backwards, it could work... but that's not the reality of non-linear, distributed version control.<br />
<br />
:::::A build date is even worse, because it only refers to the local state of time and the local state of the repository. Commits from before that timestamp will often be pushed to the repository.<br />
<br />
:::::-- [[User:thestinger|thestinger]] 04:24, 25 January 2015 (UTC)<br />
<br />
::::::A packaging standard must be compatible with the lowest common denominator. A minority of Git repos are properly tagged. The Date works as a standard, tags do not.<br />
::::::<br />
git log -1 --format="%cd" --date=short | sed "s|-||g"<br />
::::::<br />
::::::The output of the above command shows the date of the most recent commit. If the most recent commit date happens to come before the date of a previous commit, I do understand this is suboptimal, but I consider it an edge case. Even in big projects with contributors in different time zones you will typically see branches merged in with PRs. PRs reset the date to something recent. The linearity of Git is rarely problematic, but I do see where you're coming from (I'm also a happy user of archversion for keeping packages up to date, though archversion works with the Date standard too :) --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 04:59, 25 January 2015 (UTC)<br />
<br />
:::::::The {{ic|git describe}} versioning system is the standard defined and used by Git itself. The dashes need to be converted into dots for {{ic|pkgver}} and an {{ic|r}} ''may'' be inserted to make it clearer which part is the revision number. If version-based tags on master are available, this is the only sane way to do it.<br />
<br />
:::::::Git defaults to fast-forwarding / applying patches without merge commits, as long as there are no conflicts. GitHub will ''always'' generate a merge commit but that's not true for anything applied / merged by the developers and then pushed to master. -- [[User:thestinger|thestinger]] 05:24, 25 January 2015 (UTC)<br />
<br />
:::::::You've made the claim that most git repos aren't properly tagged, not only now but to me previously. Do you have anything to back that up? IME, the large majority of projects that are in a usable state are either tagged or get tagged as they become stable.<br />
:::::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 05:27, 25 January 2015 (UTC)<br />
<br />
::::::::OK:<br />
::::::::<br />
git init<br />
::::::::<br />
::::::::You now have your very own untagged Git repo :).<br />
::::::::<br />
::::::::The majority of Git repos are untagged. If you want to have a standard compatible with the lowest common denominator, by definition you cannot depend on tags being there.<br />
::::::::<br />
::::::::I regularly package Git software in the alpha stages and software maintained by people who are unfamiliar with tagging or aren't bothered to tag. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 07:15, 25 January 2015 (UTC)<br />
<br />
::::As suggested in [[VCS package guidelines#Fallback]], I think the only date that can be used is the build date: for example I've recently used it in [https://aur.archlinux.org/packages/te/textadept-common-git/PKGBUILD a PKGBUILD] for a repo without tags or branches, also appending the first 7 characters of the commit hash (the repo is not cloned, so I could only use ''git-ls-remote''). — [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 03:30, 25 January 2015 (UTC)<br />
<br />
== Updating a CVS repo ==<br />
<br />
I don't use cvs. How can you describe the pkgver for cvs (for pacman 4.1)? <br><br />
-- [[User:Dracorp|Dracorp]] ([[User talk:Dracorp|talk]]) 09:31, 6 April 2013 (UTC)<br />
<br />
:CVS is not supported in pacman 4.1 like the other VCS tools. You will need to update pkgver manually until CVS support is added.<br />
:-- [[User:Jstjohn|Jstjohn]] ([[User talk:Jstjohn|talk]]) 22:44, 15 April 2013 (UTC)<br />
<br />
::Yeah, but how about mentioning that in the article (as well as giving a download example)? Even if it's not that common anymore.<br />
::--[[User:Det|Det]] ([[User talk:Det|talk]]) 22:39, 2 May 2013 (UTC)<br />
<br />
:::The download example can still be found in {{ic|/usr/share/pacman/}}. The next version of the ABS package should update it a bit so the download happens in the prepare function where it belongs. As for pkgver, I think the generic example using date covers that, as there's not a way to get a version number from a CVS repo. Maybe a note to that effect?<br />
::: -- [[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 07:17, 15 May 2013 (UTC)<br />
<br />
::::That makes the most sense, but it might also be a good idea to rename the [[VCS PKGBUILD Guidelines#Fallback|"Fallback"]] section to something like "Fallback / CVS" to make it more obvious even when you're just checking out the table of contents.<br />
<br />
::::But as for ABS, as far as I can tell the last commit was over [https://projects.archlinux.org/abs.git/log/ 8 months] ago.<br />
::::--[[User:Det|Det]] ([[User talk:Det|talk]]) 05:54, 19 May 2013 (UTC)<br />
<br />
:::::Hmm, there were a number of patches submitted last month for cleaning up the prototypes, looks like none have been committed yet. I do remember a discussion (IRC maybe?) questioning the proper place for the prototypes, so maybe that's why? Looking at the patches, I was mistaken anyway; they didn't update the darcs or cvs prototypes. Simple enough, I'll send in a patch myself.<br />
:::::--[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 08:22, 19 May 2013 (UTC)<br />
<br />
: I use this dirty hack: {{ic|<nowiki>cvs history -c -a | cut -d' ' -f2 | sort -u | tail -n 1 | sed 's|-||g"</nowiki>}} ; could probably be improved.<br />
:--[[User:Buhman|Buhman]] ([[User talk:Buhman|talk]]) 18:00, 6 June 2013 (UTC)<br />
<br />
<br />
== pkgver function for hg based on tags ==<br />
<br />
I recent came across a way with hg to show the most recent tag, as well as the number of commits from this tag (similar to the output of {{ic|git describe}}.) <br />
<br />
{{hc|<nowiki>pkgver() {<br />
cd local_repo<br />
hg log -r . --template '{latesttag}.{latesttagdistance}.{node|short}\n'<br />
}</nowiki>|<br />
3.0.1.40.ee9a2543fcd6<br />
}}<br />
<br />
Please could this be included in the page.<br />
<br />
[[User:Garyvdm|Garyvdm]] ([[User talk:Garyvdm|talk]]) 09:03, 23 July 2013 (UTC)<br />
<br />
== shorten hg version ==<br />
<br />
To prevent long package file name,<br />
It is proper to use this format<br />
<br />
{{bc|<nowiki>pkgver() {<br />
cd $_repo<br />
_id=$(hg identify -i)<br />
echo $(hg identify -n).${_id:0:4}<br />
}</nowiki><br />
}}<br />
--[[User:Dlin|Dlin]] ([[User talk:Dlin|talk]]) 05:30, 26 August 2013 (UTC)<br />
<br />
== fossil ==<br />
<br />
{{bc|<nowiki>pkgver() {<br />
cd local_repo<br />
_id=$(cat manifest.uuid 2>/dev/null)<br />
echo ${_id:0:4}<br />
}</nowiki><br />
}}<br />
--[[User:Dlin|Dlin]] ([[User talk:Dlin|talk]]) 05:36, 26 August 2013 (UTC)<br />
<br />
== set -o pipefail ==<br />
<br />
[https://wiki.archlinux.org/index.php?title=VCS_package_guidelines&diff=prev&oldid=363918 This change] mentioned {{ic|set -o ...}} as one of the reasons for reverting, nevertheless one example using {{ic|set -o pipefail}} still remains: [[VCS_package_guidelines#Git]] (the last example in that section). -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 17:41, 6 March 2015 (UTC)<br />
<br />
== Guidelines on updating version numbers ==<br />
<br />
There are a few version control AUR packages out there which use the correct combined format of release and git commit. However, sometimes the maintainers refuse to update the default pkgver upon new releases of the software, stating that it's unnecessary since it's updated automatically during installation anyway. While this is true, I personally feel it should still be the maintainer's responsibility to update the default pkgver upon actual releases (not individual commits) as otherwise a user will never receive an automatic update and instead has to force-reinstall all(!) such packages regularly.<br />
<br />
Should we add this to the guidelines or how do others feel about this?<br />
<br />
{{unsigned|09:51, 10 September 2015|Airblader}}<br />
<br />
:There's no official update mechanism for AUR packages, so this argument only applies to those using unofficial [[AUR helpers]]. Otherwise there's soname bumps; if the package is a library, then pkgver should likely be updated. If it is a library the package depends ''on'', I don't know of a reliable way as pkg''rel'' is stuck to 1 on VCS packages. After all, a soname bump could happen between releases or even commits. -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 11:00, 10 September 2015 (UTC)<br />
<br />
:If you're using a VCS package, you should be paying attention to what is happening upstream and choose when you rebuild the package. Managing them the same way as release packages makes no sense.<br />
:[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 13:25, 10 September 2015 (UTC)<br />
<br />
::Can you explain why it doesn't make sense to manage them the same way? One example is the package i3-git. As of writing this, it's version in the AUR is 4.10.2-xxxxx. The current i3 release is 4.10.4. So why *shouldn't* the package maintainer feel responsible to update it to 4.10.4-xxxxx? It's part of the Arch "feel" to be close to current development of software and I feel that if you maintain a package, you are responsible to update its version even if the actual installation process doesn't change. Sure I can rebuild my git packages, but that's really time intensive. I also cannot monitor all of those packages upstream with reasonable effort. This is exactly what a package management system has version numbers for and keeping them up to date is exactly what package maintainers are for, IMHO. [[User:Airblader|Airblader]] ([[User talk:Airblader|talk]]) 11:39, 11 September 2015 (UTC)<br />
<br />
:::VCS packages will ''always'' build the latest revision, regardless of what pkgver on the AUR contains. If a package maintainer bumps pkgver of a VCS package, there is no assurance that the users will actually build the same (working) revision, hence the bumping makes no sense. If you need to track multiple git repos, use something like [https://github.com/kynikos/repocheck repocheck] to find out if you actually ''need'' to rebuild the package. I'm sure there are similar tools for other VCS, or just write your own. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 12:13, 11 September 2015 (UTC)<br />
<br />
::::I don't think that bumping makes no sense just because you build the latest version and not the one stated by pkgver. This is *always* the case, even if the version isn't bumped. The bump isn't meant to build exactly that version, it is meant to trigger an automatic update in the user's package management system that doesn't require checking out the repository and verifying it themselves. Again, IMHO this is what version numbers are for. If we don't care about such packages triggering an update or having any kind of comparable version number, what's the point in even giving them a (meaningful) number? We might as well just set pkgver=1 and be done with it, no? So why all the fancy pkgver() functions for VCS packages? I don't see how the repocheck you linked to is relevant for this. I don't have the repositories of my VCS packages laying around (only in /tmp right after I update them and only until I reboot). I'd like to approach this with a pragmatic argument: I hope we can agree that triggering the update for official releases of the package is some benefit. Given that, what's the *harm* in recommending to update pkgver? If there's an opinion that it makes no sense, that's one thing, but as long as it doesn't harm I think the small benefit sounds like reason enough to me. It's not like updating the pkgver of a package is difficult work. [[User:Airblader|Airblader]] ([[User talk:Airblader|talk]]) 13:20, 11 September 2015 (UTC)<br />
<br />
:::::"I hope we can agree that triggering the update for official releases of the package is some benefit." We can't. I really see no benefit there at all. "Given that, what's the *harm* in recommending to update pkgver?" The harm comes from annoying people using those AUR helpers you mentioned. They have correctly chosen when they want to rebuild that package, now their helper is complaining all of the time even though they don't want to rebuild right now. Trigger automatic rebuilds of VCS packages is rarely a good thing, as there are no upsides and real downsides.<br />
:::::Your argument that it is really time intensive to rebuild your VCS packages makes no sense here, as you have to rebuild them either way. If you're unable to monitor upstream, why are you using a VCS package anyway? If you have no idea what's going on, you have no idea what you're getting when you build/rebuild it.<br />
:::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 13:38, 11 September 2015 (UTC)<br />
<br />
::::::I don't think that you choose VCS packages because you don't want your package management system to annoy you with updates. If that's something you don't want, then you don't use one at all (why would I choose to not receive updates for *that one* package, but for all 500 others?). IMHO, you choose VCS packages because you want to be close to current development, either "just because" or because you need(ed) it for something else. Also, sometimes there just is *only* the VCS version and no package for the release. Also, if you don't want to receive updates about a certain package, you can always ignore it in the config. I don't think it's good to deny *all* users the notification of updates just because *some* might not want them. <br />
::::::I also can't agree with "triggering automatic rebuilds of VCS packages is rarely a good thing". I never see upront what I actually build, so there's always that "risk". You don't install VCS packages if you want the release version. Furthermore, in practice, it seems rare that rebuilding a VCS package causes any issues since they usually point to the master branches which in most projects have some QA before merging.<br />
::::::Your point about having to rebuild them anyway and hence not saving time is not correct. You're arguing that I should just rebuild all VCS packages all the time just in case there was an update. I'm suggesting the information whether a package needs to be rebuilt is transported in the pkgver. This saves a *drastic* amount of time as I'm not speculating. Of course I can check the Github page of each package's upstream URL before rebuilding it, but this puts the work of versioning the package onto each and every user rather than the package maintainer. Again, if this is the desired behavior, we should recommend that VCS packages just set pkgver=1. I don't see why they need to provide any version info if it's completely unnecessary that it ever be updated. [[User:Airblader|Airblader]] ([[User talk:Airblader|talk]]) 13:48, 11 September 2015 (UTC)<br />
:::::::"I'm suggesting the information whether a package needs to be rebuilt is transported in the pkgver." This is really the heart of the matter. This is completely and totally wrong for VCS packages. Whether the package needs a rebuild is up to your judgement, not the pkgver.<br />
:::::::There's nothing wrong with setting pkgver=1 (unless the actual version is less than 1). Some AUR package already do this, using "LATEST". The important thing is that the correct pkgver appears on the build package.<br />
:::::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 13:59, 11 September 2015 (UTC)<br />
::::::::I just don't agree that it's "completely and totally" wrong. Yeah, sure, I can always decide to rebuild it myself. No one is taking this option away from anybody. But setting the pkgver when the actual release changes means the user is notified of this without having to care about it themselves (all n of them). Anyway, I don't think this is going anywhere. To me, letting the pkgver rot destroys a major point to why I use a package manager in the first place and makes me wonder why that person wants to be a package maintainer if they don't maintain the package, but clearly there's very different views on this. Thanks for the discussion anyway, at least I know now that there's no common view on it so there's no point in pushing for a change of guideline. [[User:Airblader|Airblader]] ([[User talk:Airblader|talk]]) 22:58, 11 September 2015 (UTC)<br />
<br />
:::::::::Sorry for reopening, I didn't make it in time to reply earlier...<br />
:::::::::I'll start by saying that I agree that VCS package maintainers shouldn't bump pkgver manually. However, suggesting to use a less confusing pkgvar value would seem sensible to me, e.g. we could indeed give "LATEST" as an example.<br />
:::::::::— [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 04:04, 13 September 2015 (UTC)<br />
<br />
:::::::::I also wanted to try to give @Airblader another perspective. You have mentioned 2 different cases:<br />
:::::::::* A package has both a "stable" and a "vcs" version, e.g. {{Pkg|i3}} and {{AUR|i3-git}}: why are you using {{AUR|i3-git}} in this case if you want to follow the normal upstream releases?<br />
:::::::::* A package only has a "vcs" version, e.g. {{AUR|wmfs2-git}} (dead, I know, but take it as an example): in this case the AUR maintainer can't be blamed for not bumping pkgver manually, so the problem is actually that there's nobody maintaining a "stable" PKGBUILD, and you could be the one filling that gap!<br />
:::::::::— [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 04:04, 13 September 2015 (UTC)<br />
<br />
<br />
== Add information about sub-modules in GIT section ==<br />
<br />
Git has submodules that can be updated rather than having to download the entire git repo for an update. Someone shared this with me: http://sprunge.us/HKdJ?md and I think it could be useful to document this sort of thing in the wiki. I'd try to myself but I'm not super familiar with git submodules.[[User:Meskarune|Meskarune]] ([[User talk:Meskarune|talk]]) 23:35, 8 December 2016 (UTC)<br />
:That's what https://wiki.archlinux.org/index.php/VCS_package_guidelines#Git_Submodules already says, isn't it?<br />
:[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 00:14, 9 December 2016 (UTC)<br />
:: I was thinking it should be in the git section and expanded with a better explanation or at the very least links to more information on git sub-modules. Also why someone would want to even mess with sub-modules. I just don't feel like I know enough to write something further up myself. [[User:Meskarune|Meskarune]] ([[User talk:Meskarune|talk]]) 01:54, 9 December 2016 (UTC)<br />
<br />
<br />
== Warn against trivial pkgver bumps ==<br />
<br />
As mentioned previously on this page, there is no need (but it is okay to) commit a bumped pkgver to the AUR on upstream releases. But I think it is important to go one step further and actually instruct people not to commit a bumped pkgver every time they locally rebuild the package with a handful of new upstream commits.<br />
<br />
This is depressingly more common than it should be, and I can't actually find anywhere on the Wiki where it actually talks about this right now.<br />
[[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 16:55, 9 June 2017 (UTC)<br />
<br />
:I second this. However, this page is about how the PKGBUILD should be written, not about how packages should be managed on the [[AUR]]. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 17:07, 9 June 2017 (UTC)<br />
<br />
::Hmm, this is... actually a good point. I have added a note here[[Arch User Repository#Foo in the AUR is outdated; what do I do?|[1]]] instead, what do you think? <br />
::That could use a "Consider whether the package is actually outdated to begin with" section... -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 18:39, 9 June 2017 (UTC)<br />
<br />
:::Looks good, maybe adding something like "Tracking of upstream updates for VCS packages is the responsibility of users, not maintainers." would make it more explicit. Regarding soname bumps, pushing them does not hurt but I tend to support the same strategy as with pkgver, because people might prefer {{ic|makepkg -ef}} to keep the same revision. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 19:13, 9 June 2017 (UTC)<br />
<br />
::::I reject this argument. :p {{ic|makepkg -ef}} is not meant to guarantee an identical package when the PKGBUILD has been modified between runs. Why would you even want that anyway?<br />
::::Also, by preference I do generally do a pkgver bump on upstream stable releases, on the grounds that per-commit notifications are ugly but stable releases should be updated to as soon as possible. But maybe now that we are writing actual guidelines, maybe we can decide whether that is something the AUR wishes to firmly rule against. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 22:26, 9 June 2017 (UTC)<br />
<br />
:::::I have an AUR package where the maintainer bumps the package in every single new commit. He asked for a guideline where this is written down, as he doesnt believe my "good practice" argument. I think it would be best to write it down into the guideline section of this page, as its the first place I'd search for. The AUR page might be also a suitable place, but this is not where you start searching. Please add a note, thanks. --[[User:NicoHood|NicoHood]] ([[User talk:NicoHood|talk]]) 13:32, 16 June 2017 (UTC)<br />
<br />
::::::It's been already added to [[Arch User Repository#Foo in the AUR is outdated; what do I do?]], which is the page for AUR guidelines. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 14:52, 16 June 2017 (UTC)<br />
<br />
:::::::Yes, but it only says you should not flag it out of date. But it does not tell the maintainer to stop version bumping. This is not clear enough and people will always ignore it then, if you tell them to stop. --[[User:NicoHood|NicoHood]] ([[User talk:NicoHood|talk]]) 15:04, 16 June 2017 (UTC)<br />
<br />
::::::::Aaaaaaand, you have now confirmed that you '''haven't actually read''' the change I made there. (I cannot believe you think I would go modify the AUR page in reference to this conversation, and then ''completely'' fail to say the one thing this discussion was about in the first place.)<br />
::::::::So I will just ignore anything you say now, I guess. At least until I have some reason to think it is actually worth my time to even consider what you are saying. :(<br />
::::::::Addendum: You could always have just added it yourself, this is a Wiki after all... -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 21:40, 16 June 2017 (UTC)<br />
<br />
:::::Hi, I'm the maintainer [[User:NicoHood|NicoHood]] is talking about, [https://aur.archlinux.org/packages/dino-git/ here] the discussion. I failed to find a guideline about how a maintainer should behave in this circumstance and as it wasn't discouraged or forbidden I decided to act as I did. One of my points is that I find annoying, as a user with more than a bounce of packages from AUR, that I have to clone every time, every repo for every package just to check for updates (some of the projects are quite big and I find this a waste of time and bandwidth). In this particular case we are talking about a project which is rapidly implementing new features and as I check periodically for updates regarding new functionalities I think other users may benefit from being notified about them. I share the point of not bumping the pkgver for every commit but I think that if a maintainer has time to update the pkgver on new features and will to do so it's not making damages to anyone. Please correct me if I'm missing something. Re-reading my commits I noticed some of them were not needed and I'll avoid to push unnecessary updates. <br />
:::::What I'm missing as well is the role of pkgver for vcs packages, expecially for those projects that don't have a release yet. Clarifying this maybe would also close the discussion. [[User:Valo|Valo]] ([[User talk:Valo|talk]]) 08:04, 19 June 2017 (UTC)<br />
<br />
::::::You can use $SRCDEST to specify a cache directory where makepkg will store the repositories in between makepkg runs. For a package which someone wants to update frequently, it makes sense to use this. :) This goes double for a rapidly-developing software which gets frequent commits. And that still isn't an excuse to "have time to update the pkgver". Strictly speaking, it is '''never''' necessary, unless changes to the dependencies or the build()/package() functions are involved. People who are that interested in the software's development, are likely already following it elsewhere, and everyone else doesn't really need to know "oh, how exciting, a couple more commits for this VCS software. There is also the matter that for looking at the history of the PKGBUILD itself, to see what changed, it requires more effort to mentally filter through many pkgver-only changes and see what actually changed with regard to the metadata/build process/etc. Noise is, well, noisy.<br />
::::::I only justify upstream releases as it is, by telling myself that users of the non-development version are expected to update immediately, so users of the development version should as well -- and because even if a user doesn't bother to update for each commit, they should definitely aspire to be running the latest official stable release.<br />
::::::Regarding the purpose of the pkgver for VCS packages, it is to ensure that users can query their installed packages to see what version of the software they have installed, and to ensure a monotonically increasing pkgver for more recent snapshots of the source code it is built from. The fact that pkgver is also something an AUR helper can compare when emulating {{ic|pacman -Syu}} is not really relevant to a VCS package, except as an added redundancy which you should be judicious about using.<br />
::::::Anyway, we now have a guideline. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 04:29, 26 June 2017 (UTC)<br />
<br />
:On a similar note, it is also annoying to {{ic|git checkout PKGBUILD}} before {{ic|git pull}} each time there ''is'' a substantial change pushed to the AUR, but my local {{ic|pkgver}} was newer than the previous version on AUR. It's not just about running one more command, I always have to {{ic|git diff}} before to check that I don't have some other unstaged changes. Perhaps if there was some better technical solution for this (perhaps the {{ic|pkgver}} variable could be completely removed when there is a {{ic|pkgver}} function?), then maybe people would not feel the unbearable urge to immediately commit and push all unstaged changes. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 17:18, 9 June 2017 (UTC)<br />
<br />
::Well, you probably aren't supposed to make local changes. :p What is wrong with the AUR maintainer that you need to fix, but don't feel like asking for a better maintainer? That being said, I do actually have cases (very personal patches) where I make a local change and commit that, then use {{ic|git fetch && git rebase}}. This works quite well, so I am not sure we need a better technical solution at all. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 18:39, 9 June 2017 (UTC)<br />
<br />
:::Not that I care about these, but at least [https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mpv-git#n6 here] people are actually supposed to make local changes. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 19:13, 9 June 2017 (UTC)<br />
<br />
::::Sure, it is sometimes "supposed to" happen, but it isn't really the norm. :) As I said, {{ic|git rebase}} is a powerful tool to use there. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 22:26, 9 June 2017 (UTC)<br />
<br />
== Git submodules: sometimes not all submodules are needed ==<br />
<br />
As per this writeup by Earnestly (which I understand is the initial source of that section): https://ptpb.pw/r/N6-z.md<br />
Some packages shouldn't try to checkout all submodules, because it is wasteful and unneeded. It might be nice to expand on that section by mentioning this. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 14:19, 12 July 2017 (UTC)<br />
<br />
== Add notice to this page? ==<br />
The [[Arch User Repository]] page indicates:<br />
{{Note|[[VCS package guidelines|VCS packages]] are not considered out of date when the pkgver changes, so '''please''' do not flag them as the maintainer will merely unflag the package and ignore you. AUR maintainers should not commit mere pkgver bumps.}}<br />
Perhaps this should be included on this page as well, to inform new maintainers that they should not be making pkgver bumps for these packages.<br />
That being said, there should probably be a way to update the pkgver shown by the AUR web UI, or disable it entirely for VCS packages, in order to prevent others from believing a package is out of date and flagging it. [[User:JacobHenner|JacobHenner]] ([[User talk:JacobHenner|talk]]) 11:33, 17 November 2017 (UTC)<br />
<br />
== pacman 4.1 ==<br />
<br />
Shall we remove the references to 4.1?<br />
What was possible / the practice in the past may help to understand certain outdated packages but 5 years starts to be very long and we should turn the page at one stage I suppose.<br />
This is the impression of a newcomer who wants to get to the point and is confused by the reference to such old versions but don't hesitate to correct me if this is still important.<br />
[[User:Kewl|Kewl]] ([[User talk:Kewl|talk]]) 10:29, 14 January 2018 (UTC)<br />
<br />
== edit request: sed command needs to replace '-' globally ==<br />
<br />
This line (missing `g`):<br />
git describe --long | sed -r 's/-([0-9,a-g,A-G]{7}.*)//' | sed 's/-/./'<br />
should be:<br />
git describe --long | sed -r 's/-([0-9,a-g,A-G]{7}.*)//' | sed 's/-/./g'<br />
<br />
{{unsigned|05:58, 1 March 2018|Skimj}}<br />
<br />
== Suggest to use https instead of git protocol when possible ==<br />
A lot of public structures/companies block the default git port (9418). This problem is explained here : https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols#_the_cons_4<br />
Using {{ic|git+https://}} urls for sources is supported by most (if not all) git servers, and {{ic|https}} will most likely not be blocked.<br />
<br />
{{unsigned|10:39, 22 October 2018|Salamandar}}<br />
<br />
:+1, I'd also mention that it's a security issue because {{ic|git://}} and {{ic|http://}} aren't encrypted and vulnerable to MITM attacks. --[[User:Larivact|Larivact]] ([[User talk:Larivact|talk]]) 19:10, 22 October 2018 (UTC)<br />
<br />
::+1, That's gold for me, as I'm normally behind a proxy that blocks {{ic|git://}}, but allows {{ic|git+https://}}... -- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 02:19, 16 April 2019 (UTC)<br />
<br />
:::I see this is done in "An example Git source array". How about the other two places that illustrate using git sources? (left of {{ic|vcs+}} bullet point in [[VCS package guidelines#VCS sources|VCS sources]], on two lines in the [[VCS package guidelines#Git submodules|Git submodules]] tip) [[User:Quequotion|quequotion]] ([[User talk:Quequotion|talk]]) 15:18, 5 June 2019 (UTC)<br />
<br />
== Proposal: Break "Guidelines" header into subsections ==<br />
<br />
Too many bullet points are a navigation hazard. To help users get to the information they need faster, we should reorganize this into a few subsections. [[User:Quequotion|quequotion]] ([[User talk:Quequotion|talk]]) 13:31, 4 March 2019 (UTC)<br />
<br />
=== Proposal: Package naming ===<br />
<br />
Suffix {{Ic|''pkgbase''}} with {{Ic|-cvs}}, {{Ic|-svn}}, {{Ic|-hg}}, {{Ic|-darcs}}, {{Ic|-bzr}}, {{Ic|-git}} etc. unless the package fetches a specific release.<br />
<br />
=== Proposal: Versioning ===<br />
<br />
If the resulting package is different after making any changes, increasing the {{Ic|pkgrel}} is mandatory. Changing the {{ic|pkgver}} is not.<br />
<br />
{{Tip|{{Ic|--holdver}} can be used to prevent [[makepkg]] from updating the {{ic|pkgver}} (see: [https://www.archlinux.org/pacman/makepkg.8.html makepkg(8)])}}<br />
<br />
=== Proposal: Conflicts and dependencies ===<br />
<br />
* Include the standard version of the package in {{ic|conflicts}} and {{ic|provides}} (e.g. for {{AUR|fluxbox-git}}: {{Ic|1=conflicts=('fluxbox')}} and {{Ic|1=provides=('fluxbox')}}).<br />
<br />
* {{Ic|replaces}} should be used only when a package ''deprecates'' another. (ie, the {{ic|''pkgbase''}} has changed and the previous version has been [[Arch User Repository#Deletion|deleted]])<br />
<br />
* Include the appropriate VCS tool in {{Ic|makedepends}} ({{pkg|cvs}}, {{pkg|subversion}}, {{pkg|git}}, ...).<br />
<br />
=== Proposal: Authentication and Security ===<br />
<br />
* When using the cvsroot, use {{Ic|anonymous:@}} rather than {{Ic|anonymous@}} to avoid having to enter a blank password or {{Ic|anonymous:password@}}, if one is required.<br />
<br />
* Because the sources are not static, skip the checksum in {{ic|md*sums()}} with the value {{ic|'SKIP'}}.<br />
<br />
<br />
: Seems to me as a good idea. Just two notes: "Security" should be lowercase in the section title "Authentication and Security", and AUR pkgbase deletion request was moved from [[Arch User Repository#Deletion]] to [[AUR submission guidelines#Requests]] since you proposed these changes. -- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 12:02, 28 June 2019 (UTC)<br />
<br />
== GitHub API usage ==<br />
<br />
Some git repos are really huge (ex. QGIS) and git-clone process takes a lot of time and space. So, here is an example how to use GH API to obtain pkgver:<br />
{{hc|<nowiki><br />
_orgname=foo<br />
_pkgname=bar<br />
_branch=master<br />
_gh_api_url="https://api.github.com/repos/${_orgname}/${_pkgname}"<br />
...<br />
makedepends=('jq')<br />
...<br />
source=("https://github.com/${_orgname}/${_pkgname}/archive/${_branch}.tar.gz")<br />
sha256sums=('SKIP')<br />
<br />
pkgver() {<br />
read -r tag_name tag_sha <<<$(curl -s "${_gh_api_url}/tags" | \<br />
jq -r '.[0]|[.name,.commit.sha]|@sh' | sed "s/'//g")<br />
head=$(curl -s "${_gh_api_url}/git/refs/heads/${_branch}" | \<br />
jq -r '.object.sha')<br />
count=$(curl -s "${_gh_api_url}/compare/${tag_sha}...${head}" | \<br />
jq -r '.total_commits')<br />
<br />
printf "%s.r%s.g%.8s" "${tag_name}" "${count}" "${head}"<br />
}</nowiki>|<br />
0.1.r7.g47de1a51<br />
}}<br />
<br />
{{unsigned|2019-06-28|Sikmir}}<br />
<br />
: ''makepkg'' still requires cloning the whole source code repository to build the package. In fact, the source code fetching happens before the [[PKGBUILD#pkgver|pkgver]] function. IMO, this option does not seem to have any use for packaging in Arch. By the way, if you use the binary ''jq'', make sure to add {{pkg|jq}} to [[PKGBUILD#makedepends|makedepends]] array. -- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 11:37, 28 June 2019 (UTC)<br />
<br />
: No! It doesn't require cloning, see ''source'' variable, there is only gzipped snapshot. [[User:Sikmir|Sikmir]] ([[User talk:Sikmir|talk]]) 16:18, 28 June 2019 (UTC)</div>Sikmirhttps://wiki.archlinux.org/index.php?title=Talk:VCS_package_guidelines&diff=576519Talk:VCS package guidelines2019-06-28T11:22:27Z<p>Sikmir: /* GitHub API usage */ new section</p>
<hr />
<div>== Numeric vs Date Standard in Git pkgver ==<br />
<br />
I'd like to see a standard emerge in AUR Git packages, but standards have to work down to the lowest common denominator. Only a small minority of GitHub projects properly tag their releases, so there can be only two LCD standards for Git packages: the Numeric standard, e.g. ("r1581.2b039da") and the Date standard, e.g. ("2014-01-01"). The date standard is much more readable, and actionable, and has the additional benefit of being backwards compatible with older Git packages.<br />
<br />
I don't know if any standard can emerge even if we wanted it to, but please allow me to at least add the Date standard to the VCS package guidelines wiki (as opposed to scrubbing it, :).<br />
<br />
:Using the commit date would be incorrect because it doesn't refer to a specific commit and the dates are not always sequential. It would be even more wrong if it was the build date, as that doesn't refer to anything to do with the version. -- [[User:thestinger|thestinger]] 21:33, 23 January 2015 (UTC)<br />
<br />
::''it doesn't refer to a specific commit''<br />
::<br />
::Neither does "r1581.2b039da" refer to a specific commit without the .git repo cmdline interaction, and it is considered best practice to prune $pkgdir of .git:<br />
::<br />
find "$pkgdir" -type d -name .git -exec rm -r '{}' +<br />
::<br />
::Can you explain what you mean by "the dates are not always sequential"? The Date standard looks like this:<br />
::<br />
git log -1 --format="%cd" --date=short | sed "s|-||g"<br />
::<br />
::It displays the latest commit date from the upstream Git repo.<br />
::<br />
::In the edge case of breaking changes occurring upstream in Git repos on the same day, then package maintainers should increment pkgrel. In practice, "2014-01-01" is much more readable and useful than "r1581.2b039da". The readability benefits of "2014-01-01" vs. "r1581.2b039da" should not be underestimated due to edge cases. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 18:39, 24 January 2015 (UTC)<br />
:::A git commit id certainly refers to a specific commit. I don't know why you think this has anything to do with shipping the VCS repository in the package. The commit date of the most recent commit may be from 20 weeks ago while the earlier commits were from last week. Git does not have a linear history. It's not going to be changed to use a version format where it can go both backwards and forwards with no way of tracing it back to the commit. Readability is worthless if the information isn't meaningful... There are 2 hard requirements: newer revisions must have higher package versions without exceptions, and it must be possible to trace it back to a commit to properly identify and report bugs. -- [[User:thestinger|thestinger]] 18:53, 24 January 2015<br />
:::<br />
::::<br />
::::I am quite certain of what a commit ID looks like, e.g. 2d5749d0315a59f4a8bf73ebbe757b227c8c17a3, not r1581.2b039da.<br />
::::<br />
::::Can you show me where to find "r1581.2b039da" on a GitHub/BitBucket repo? It doesn't exist anywhere that I can see. You need to have the repo locally, then cd into the Git repo and run:<br />
::::<br />
git rev-list --count HEAD<br />
::::<br />
::::That is work-intensive, and it conflicts with the best practice of pruning AUR packages of .git repos.<br />
::::<br />
::::I previously used the Wiki-recommended Numeric standard, so it's not like I haven't used it. I switched to the Date standard, updating hundreds of packages to reflect it. Why do you suppose that is?<br />
::::<br />
:::: ''Readability is worthless if the information isn't meaningful''<br />
::::You'd be hard pressed to convince me that the date "2014-01-01" is somehow *less* semantically meaningful or actionable than "r1581". I say this after maintaining for years, hundreds of Git packages in the AUR. You can tell by grepping `pacman -Q` exactly which AUR git packages are out of date with a two-second visit to GitHub. The Date standard is incredibly actionable and pragmatic not to mention simple and immediately understandable by anyone.<br />
::::<br />
:::: ''newer revisions must have higher package versions without exceptions''<br />
::::<br />
::::Not a problem: "2014-01-01" < "2014-01-02"<br />
::::<br />
:::: ''it must be possible to trace it back to a commit to properly identify and report bugs''<br />
::::<br />
:::: Given how frequently "stable" Go packages and C packages pull in Git dependencies as part of their build process without specifying a certain commit, I disagree with this proposition. Why would recording the version of acmedaemon as 1.5, when it pulls in Git packages without specifying commit ID, be all that different in bug reports than "2014-01-01"? In both cases, you will not be able to track down the exact cause of the bug by commit. In both cases, you will in all likelihood end up consulting the build date. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 03:32, 25 January 2015 (UTC)<br />
<br />
:::::''I am quite certain of what a commit ID looks like, e.g. 2d5749d0315a59f4a8bf73ebbe757b227c8c17a3, not r1581.2b039da.''<br />
:::::In your scenerio, 2b039da is the short version of the commit hash and does point to a specific commit. As for where you find it on Github, it's listed on the commit log, of course. Just look at the right hand side of the page.<br />
:::::''You'd be hard pressed to convince me that the date "2014-01-01" is somehow *less* semantically meaningful or actionable than "r1581".''<br />
:::::In this case, human readability really is meaningless. Machine readability is all that matters.<br />
:::::''Not a problem: "2014-01-01" < "2014-01-02"''<br />
:::::And what happens when the commit after that is dated 2013-12-31? As thestinger pointed out, Git is not linear.<br />
:::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 03:40, 25 January 2015 (UTC)<br />
<br />
::::::''2b039da is the short version of the commit hash''<br />
::::::<br />
::::::Can this information be easily compared on GitHub to your local package version to check if it is out of date? The answer is no.<br />
::::::<br />
::::::It is not actionable, except by cloning the repo yourself, running the Git command, and then manually scanning the Git log for short versions. It's very work-intensive.<br />
::::::<br />
::::::''Git is not linear''<br />
::::::<br />
::::::Neither are stable packages on PyPi: https://pypi.python.org/pypi/tackpy/0.9.9a<br />
::::::<br />
::::::Pacman views the upgrade of 0.9.9 -> 0.9.9a as a downgrade. See https://aur.archlinux.org/packages/python2-tackpy for a real world example of this edge case. Edge cases should be no reason to prevent readers of the wiki to make informed choices about Git packaging standards. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 04:08, 25 January 2015 (UTC)<br />
<br />
:::::::Yes, the short hash of each commit is listed in the commit log. Also note that the revision count (the "r" number listed first) is also listed at the top of each repo's page.<br />
:::::::As for PyPi's versioning scheme, their choice is different than what Arch's vercmp assumes. The packager needs to take this into account, just as all packagers must take upstream's idiosyncrasies into account. I don't see how it's relevant here.<br />
:::::::You also never answered my question, what happens when the last commit is dated before the commit previous to it? This question is critical, as it would cause your versioning scheme to go backwards by any and all measures. That makes it unacceptable.<br />
:::::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 04:15, 25 January 2015 (UTC)<br />
<br />
::::::::Incorrect.<br />
::::::::<br />
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)<br />
::::::::<br />
::::::::The output of the above command does not correspond to any piece of information on GitHub.<br />
::::::::<br />
::::::::If PyPi packagers should take edge cases into account for PyPi packages, then they should do the same for Git packages. Edge cases aren't reason enough to scrub a competing standard from the wiki. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 04:23, 25 January 2015 (UTC)<br />
<br />
:::::::::I'm sorry if you can't find this information on GitHub. It's very, very plainly displayed in the places I already pointed you to. If you would take a minute to check instead of just jumping at me, you might find it.<br />
:::::::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 04:31, 25 January 2015 (UTC)<br />
<br />
::::::::::''the short hash of each commit is listed in the commit log. Also note that the revision count (the "r" number listed first) is also listed at the top of each repo's page''.<br />
::::::::::<br />
::::::::::This is (partially) incorrect. The short hash of each commit is not listed. What is listed in the commit log is the truncated commit ID.<br />
::::::::::<br />
::::::::::The revision count point I will retract. It didn't appear to work for my own Git repos, but that was because I ran the command from a Git subrepo (edge case :). The date still has the advantage of being more human readable than r1582. If a package has version 2011-10-22, I will know this project is either unmaintained, or it's been a really long time since I last rebuilt it. All without leaving the terminal. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 07:33, 25 January 2015 (UTC)<br />
<br />
::::::::::It's also very easy to look up or link to commits via the abbreviated commit hashes or proper identifiers produced by {{ic|git describe}}. -- [[User:thestinger|thestinger]] 04:33, 25 January 2015 (UTC)<br />
<br />
::::::That has nothing to do with non-linear history. It has to do with an incompatibility between Pacman's version comparison and the one chosen by the project. There are ways of dealing with that, but it has nothing to do with this discussion. -- [[User:thestinger|thestinger]] 04:24, 25 January 2015 (UTC)<br />
<br />
:::::The ideal version is the one produced by {{ic|git describe}}, because it's easily understood by humans (last tag, commits since last tag, abbreviated commit), is also understood by the various Git commands and GitHub and is monotonically increasing thanks to the inclusion of the last version and revision count since then. The versions it produces ({{ic|10-7-g8537989}}) can be directly used with commands like {{ic|git show}}. Unlike the build date, it identifies a unique revision of the project, including the state of any submodules.<br />
<br />
:::::The only case where another method should be used is when the project doesn't yet have any tagged release or does the releases in a way that's not very sane. The releases ''should'' be tagged on master with additional tags in stable branches for fixes backported to old releases. If this isn't the case, the {{ic|git describe}} output needs to be emulated. A date is a poor way of doing that, because it's not connected to a specific point in the revision history.<br />
<br />
:::::The only case where the commit date would work is if Git is being used as a crippled centralized version control system. If all commits get created against master (no merging branches or patches) in a centralized repository where the system clock is never moved backwards, it could work... but that's not the reality of non-linear, distributed version control.<br />
<br />
:::::A build date is even worse, because it only refers to the local state of time and the local state of the repository. Commits from before that timestamp will often be pushed to the repository.<br />
<br />
:::::-- [[User:thestinger|thestinger]] 04:24, 25 January 2015 (UTC)<br />
<br />
::::::A packaging standard must be compatible with the lowest common denominator. A minority of Git repos are properly tagged. The Date works as a standard, tags do not.<br />
::::::<br />
git log -1 --format="%cd" --date=short | sed "s|-||g"<br />
::::::<br />
::::::The output of the above command shows the date of the most recent commit. If the most recent commit date happens to come before the date of a previous commit, I do understand this is suboptimal, but I consider it an edge case. Even in big projects with contributors in different time zones you will typically see branches merged in with PRs. PRs reset the date to something recent. The linearity of Git is rarely problematic, but I do see where you're coming from (I'm also a happy user of archversion for keeping packages up to date, though archversion works with the Date standard too :) --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 04:59, 25 January 2015 (UTC)<br />
<br />
:::::::The {{ic|git describe}} versioning system is the standard defined and used by Git itself. The dashes need to be converted into dots for {{ic|pkgver}} and an {{ic|r}} ''may'' be inserted to make it clearer which part is the revision number. If version-based tags on master are available, this is the only sane way to do it.<br />
<br />
:::::::Git defaults to fast-forwarding / applying patches without merge commits, as long as there are no conflicts. GitHub will ''always'' generate a merge commit but that's not true for anything applied / merged by the developers and then pushed to master. -- [[User:thestinger|thestinger]] 05:24, 25 January 2015 (UTC)<br />
<br />
:::::::You've made the claim that most git repos aren't properly tagged, not only now but to me previously. Do you have anything to back that up? IME, the large majority of projects that are in a usable state are either tagged or get tagged as they become stable.<br />
:::::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 05:27, 25 January 2015 (UTC)<br />
<br />
::::::::OK:<br />
::::::::<br />
git init<br />
::::::::<br />
::::::::You now have your very own untagged Git repo :).<br />
::::::::<br />
::::::::The majority of Git repos are untagged. If you want to have a standard compatible with the lowest common denominator, by definition you cannot depend on tags being there.<br />
::::::::<br />
::::::::I regularly package Git software in the alpha stages and software maintained by people who are unfamiliar with tagging or aren't bothered to tag. --[[User:Atweiden|Atweiden]] ([[User talk:Atweiden|talk]]) 07:15, 25 January 2015 (UTC)<br />
<br />
::::As suggested in [[VCS package guidelines#Fallback]], I think the only date that can be used is the build date: for example I've recently used it in [https://aur.archlinux.org/packages/te/textadept-common-git/PKGBUILD a PKGBUILD] for a repo without tags or branches, also appending the first 7 characters of the commit hash (the repo is not cloned, so I could only use ''git-ls-remote''). — [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 03:30, 25 January 2015 (UTC)<br />
<br />
== Updating a CVS repo ==<br />
<br />
I don't use cvs. How can you describe the pkgver for cvs (for pacman 4.1)? <br><br />
-- [[User:Dracorp|Dracorp]] ([[User talk:Dracorp|talk]]) 09:31, 6 April 2013 (UTC)<br />
<br />
:CVS is not supported in pacman 4.1 like the other VCS tools. You will need to update pkgver manually until CVS support is added.<br />
:-- [[User:Jstjohn|Jstjohn]] ([[User talk:Jstjohn|talk]]) 22:44, 15 April 2013 (UTC)<br />
<br />
::Yeah, but how about mentioning that in the article (as well as giving a download example)? Even if it's not that common anymore.<br />
::--[[User:Det|Det]] ([[User talk:Det|talk]]) 22:39, 2 May 2013 (UTC)<br />
<br />
:::The download example can still be found in {{ic|/usr/share/pacman/}}. The next version of the ABS package should update it a bit so the download happens in the prepare function where it belongs. As for pkgver, I think the generic example using date covers that, as there's not a way to get a version number from a CVS repo. Maybe a note to that effect?<br />
::: -- [[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 07:17, 15 May 2013 (UTC)<br />
<br />
::::That makes the most sense, but it might also be a good idea to rename the [[VCS PKGBUILD Guidelines#Fallback|"Fallback"]] section to something like "Fallback / CVS" to make it more obvious even when you're just checking out the table of contents.<br />
<br />
::::But as for ABS, as far as I can tell the last commit was over [https://projects.archlinux.org/abs.git/log/ 8 months] ago.<br />
::::--[[User:Det|Det]] ([[User talk:Det|talk]]) 05:54, 19 May 2013 (UTC)<br />
<br />
:::::Hmm, there were a number of patches submitted last month for cleaning up the prototypes, looks like none have been committed yet. I do remember a discussion (IRC maybe?) questioning the proper place for the prototypes, so maybe that's why? Looking at the patches, I was mistaken anyway; they didn't update the darcs or cvs prototypes. Simple enough, I'll send in a patch myself.<br />
:::::--[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 08:22, 19 May 2013 (UTC)<br />
<br />
: I use this dirty hack: {{ic|<nowiki>cvs history -c -a | cut -d' ' -f2 | sort -u | tail -n 1 | sed 's|-||g"</nowiki>}} ; could probably be improved.<br />
:--[[User:Buhman|Buhman]] ([[User talk:Buhman|talk]]) 18:00, 6 June 2013 (UTC)<br />
<br />
<br />
== pkgver function for hg based on tags ==<br />
<br />
I recent came across a way with hg to show the most recent tag, as well as the number of commits from this tag (similar to the output of {{ic|git describe}}.) <br />
<br />
{{hc|<nowiki>pkgver() {<br />
cd local_repo<br />
hg log -r . --template '{latesttag}.{latesttagdistance}.{node|short}\n'<br />
}</nowiki>|<br />
3.0.1.40.ee9a2543fcd6<br />
}}<br />
<br />
Please could this be included in the page.<br />
<br />
[[User:Garyvdm|Garyvdm]] ([[User talk:Garyvdm|talk]]) 09:03, 23 July 2013 (UTC)<br />
<br />
== shorten hg version ==<br />
<br />
To prevent long package file name,<br />
It is proper to use this format<br />
<br />
{{bc|<nowiki>pkgver() {<br />
cd $_repo<br />
_id=$(hg identify -i)<br />
echo $(hg identify -n).${_id:0:4}<br />
}</nowiki><br />
}}<br />
--[[User:Dlin|Dlin]] ([[User talk:Dlin|talk]]) 05:30, 26 August 2013 (UTC)<br />
<br />
== fossil ==<br />
<br />
{{bc|<nowiki>pkgver() {<br />
cd local_repo<br />
_id=$(cat manifest.uuid 2>/dev/null)<br />
echo ${_id:0:4}<br />
}</nowiki><br />
}}<br />
--[[User:Dlin|Dlin]] ([[User talk:Dlin|talk]]) 05:36, 26 August 2013 (UTC)<br />
<br />
== set -o pipefail ==<br />
<br />
[https://wiki.archlinux.org/index.php?title=VCS_package_guidelines&diff=prev&oldid=363918 This change] mentioned {{ic|set -o ...}} as one of the reasons for reverting, nevertheless one example using {{ic|set -o pipefail}} still remains: [[VCS_package_guidelines#Git]] (the last example in that section). -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 17:41, 6 March 2015 (UTC)<br />
<br />
== Guidelines on updating version numbers ==<br />
<br />
There are a few version control AUR packages out there which use the correct combined format of release and git commit. However, sometimes the maintainers refuse to update the default pkgver upon new releases of the software, stating that it's unnecessary since it's updated automatically during installation anyway. While this is true, I personally feel it should still be the maintainer's responsibility to update the default pkgver upon actual releases (not individual commits) as otherwise a user will never receive an automatic update and instead has to force-reinstall all(!) such packages regularly.<br />
<br />
Should we add this to the guidelines or how do others feel about this?<br />
<br />
{{unsigned|09:51, 10 September 2015|Airblader}}<br />
<br />
:There's no official update mechanism for AUR packages, so this argument only applies to those using unofficial [[AUR helpers]]. Otherwise there's soname bumps; if the package is a library, then pkgver should likely be updated. If it is a library the package depends ''on'', I don't know of a reliable way as pkg''rel'' is stuck to 1 on VCS packages. After all, a soname bump could happen between releases or even commits. -- [[User:Alad|Alad]] ([[User talk:Alad|talk]]) 11:00, 10 September 2015 (UTC)<br />
<br />
:If you're using a VCS package, you should be paying attention to what is happening upstream and choose when you rebuild the package. Managing them the same way as release packages makes no sense.<br />
:[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 13:25, 10 September 2015 (UTC)<br />
<br />
::Can you explain why it doesn't make sense to manage them the same way? One example is the package i3-git. As of writing this, it's version in the AUR is 4.10.2-xxxxx. The current i3 release is 4.10.4. So why *shouldn't* the package maintainer feel responsible to update it to 4.10.4-xxxxx? It's part of the Arch "feel" to be close to current development of software and I feel that if you maintain a package, you are responsible to update its version even if the actual installation process doesn't change. Sure I can rebuild my git packages, but that's really time intensive. I also cannot monitor all of those packages upstream with reasonable effort. This is exactly what a package management system has version numbers for and keeping them up to date is exactly what package maintainers are for, IMHO. [[User:Airblader|Airblader]] ([[User talk:Airblader|talk]]) 11:39, 11 September 2015 (UTC)<br />
<br />
:::VCS packages will ''always'' build the latest revision, regardless of what pkgver on the AUR contains. If a package maintainer bumps pkgver of a VCS package, there is no assurance that the users will actually build the same (working) revision, hence the bumping makes no sense. If you need to track multiple git repos, use something like [https://github.com/kynikos/repocheck repocheck] to find out if you actually ''need'' to rebuild the package. I'm sure there are similar tools for other VCS, or just write your own. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 12:13, 11 September 2015 (UTC)<br />
<br />
::::I don't think that bumping makes no sense just because you build the latest version and not the one stated by pkgver. This is *always* the case, even if the version isn't bumped. The bump isn't meant to build exactly that version, it is meant to trigger an automatic update in the user's package management system that doesn't require checking out the repository and verifying it themselves. Again, IMHO this is what version numbers are for. If we don't care about such packages triggering an update or having any kind of comparable version number, what's the point in even giving them a (meaningful) number? We might as well just set pkgver=1 and be done with it, no? So why all the fancy pkgver() functions for VCS packages? I don't see how the repocheck you linked to is relevant for this. I don't have the repositories of my VCS packages laying around (only in /tmp right after I update them and only until I reboot). I'd like to approach this with a pragmatic argument: I hope we can agree that triggering the update for official releases of the package is some benefit. Given that, what's the *harm* in recommending to update pkgver? If there's an opinion that it makes no sense, that's one thing, but as long as it doesn't harm I think the small benefit sounds like reason enough to me. It's not like updating the pkgver of a package is difficult work. [[User:Airblader|Airblader]] ([[User talk:Airblader|talk]]) 13:20, 11 September 2015 (UTC)<br />
<br />
:::::"I hope we can agree that triggering the update for official releases of the package is some benefit." We can't. I really see no benefit there at all. "Given that, what's the *harm* in recommending to update pkgver?" The harm comes from annoying people using those AUR helpers you mentioned. They have correctly chosen when they want to rebuild that package, now their helper is complaining all of the time even though they don't want to rebuild right now. Trigger automatic rebuilds of VCS packages is rarely a good thing, as there are no upsides and real downsides.<br />
:::::Your argument that it is really time intensive to rebuild your VCS packages makes no sense here, as you have to rebuild them either way. If you're unable to monitor upstream, why are you using a VCS package anyway? If you have no idea what's going on, you have no idea what you're getting when you build/rebuild it.<br />
:::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 13:38, 11 September 2015 (UTC)<br />
<br />
::::::I don't think that you choose VCS packages because you don't want your package management system to annoy you with updates. If that's something you don't want, then you don't use one at all (why would I choose to not receive updates for *that one* package, but for all 500 others?). IMHO, you choose VCS packages because you want to be close to current development, either "just because" or because you need(ed) it for something else. Also, sometimes there just is *only* the VCS version and no package for the release. Also, if you don't want to receive updates about a certain package, you can always ignore it in the config. I don't think it's good to deny *all* users the notification of updates just because *some* might not want them. <br />
::::::I also can't agree with "triggering automatic rebuilds of VCS packages is rarely a good thing". I never see upront what I actually build, so there's always that "risk". You don't install VCS packages if you want the release version. Furthermore, in practice, it seems rare that rebuilding a VCS package causes any issues since they usually point to the master branches which in most projects have some QA before merging.<br />
::::::Your point about having to rebuild them anyway and hence not saving time is not correct. You're arguing that I should just rebuild all VCS packages all the time just in case there was an update. I'm suggesting the information whether a package needs to be rebuilt is transported in the pkgver. This saves a *drastic* amount of time as I'm not speculating. Of course I can check the Github page of each package's upstream URL before rebuilding it, but this puts the work of versioning the package onto each and every user rather than the package maintainer. Again, if this is the desired behavior, we should recommend that VCS packages just set pkgver=1. I don't see why they need to provide any version info if it's completely unnecessary that it ever be updated. [[User:Airblader|Airblader]] ([[User talk:Airblader|talk]]) 13:48, 11 September 2015 (UTC)<br />
:::::::"I'm suggesting the information whether a package needs to be rebuilt is transported in the pkgver." This is really the heart of the matter. This is completely and totally wrong for VCS packages. Whether the package needs a rebuild is up to your judgement, not the pkgver.<br />
:::::::There's nothing wrong with setting pkgver=1 (unless the actual version is less than 1). Some AUR package already do this, using "LATEST". The important thing is that the correct pkgver appears on the build package.<br />
:::::::[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 13:59, 11 September 2015 (UTC)<br />
::::::::I just don't agree that it's "completely and totally" wrong. Yeah, sure, I can always decide to rebuild it myself. No one is taking this option away from anybody. But setting the pkgver when the actual release changes means the user is notified of this without having to care about it themselves (all n of them). Anyway, I don't think this is going anywhere. To me, letting the pkgver rot destroys a major point to why I use a package manager in the first place and makes me wonder why that person wants to be a package maintainer if they don't maintain the package, but clearly there's very different views on this. Thanks for the discussion anyway, at least I know now that there's no common view on it so there's no point in pushing for a change of guideline. [[User:Airblader|Airblader]] ([[User talk:Airblader|talk]]) 22:58, 11 September 2015 (UTC)<br />
<br />
:::::::::Sorry for reopening, I didn't make it in time to reply earlier...<br />
:::::::::I'll start by saying that I agree that VCS package maintainers shouldn't bump pkgver manually. However, suggesting to use a less confusing pkgvar value would seem sensible to me, e.g. we could indeed give "LATEST" as an example.<br />
:::::::::— [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 04:04, 13 September 2015 (UTC)<br />
<br />
:::::::::I also wanted to try to give @Airblader another perspective. You have mentioned 2 different cases:<br />
:::::::::* A package has both a "stable" and a "vcs" version, e.g. {{Pkg|i3}} and {{AUR|i3-git}}: why are you using {{AUR|i3-git}} in this case if you want to follow the normal upstream releases?<br />
:::::::::* A package only has a "vcs" version, e.g. {{AUR|wmfs2-git}} (dead, I know, but take it as an example): in this case the AUR maintainer can't be blamed for not bumping pkgver manually, so the problem is actually that there's nobody maintaining a "stable" PKGBUILD, and you could be the one filling that gap!<br />
:::::::::— [[User:Kynikos|Kynikos]] ([[User talk:Kynikos|talk]]) 04:04, 13 September 2015 (UTC)<br />
<br />
<br />
== Add information about sub-modules in GIT section ==<br />
<br />
Git has submodules that can be updated rather than having to download the entire git repo for an update. Someone shared this with me: http://sprunge.us/HKdJ?md and I think it could be useful to document this sort of thing in the wiki. I'd try to myself but I'm not super familiar with git submodules.[[User:Meskarune|Meskarune]] ([[User talk:Meskarune|talk]]) 23:35, 8 December 2016 (UTC)<br />
:That's what https://wiki.archlinux.org/index.php/VCS_package_guidelines#Git_Submodules already says, isn't it?<br />
:[[User:Scimmia|Scimmia]] ([[User talk:Scimmia|talk]]) 00:14, 9 December 2016 (UTC)<br />
:: I was thinking it should be in the git section and expanded with a better explanation or at the very least links to more information on git sub-modules. Also why someone would want to even mess with sub-modules. I just don't feel like I know enough to write something further up myself. [[User:Meskarune|Meskarune]] ([[User talk:Meskarune|talk]]) 01:54, 9 December 2016 (UTC)<br />
<br />
<br />
== Warn against trivial pkgver bumps ==<br />
<br />
As mentioned previously on this page, there is no need (but it is okay to) commit a bumped pkgver to the AUR on upstream releases. But I think it is important to go one step further and actually instruct people not to commit a bumped pkgver every time they locally rebuild the package with a handful of new upstream commits.<br />
<br />
This is depressingly more common than it should be, and I can't actually find anywhere on the Wiki where it actually talks about this right now.<br />
[[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 16:55, 9 June 2017 (UTC)<br />
<br />
:I second this. However, this page is about how the PKGBUILD should be written, not about how packages should be managed on the [[AUR]]. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 17:07, 9 June 2017 (UTC)<br />
<br />
::Hmm, this is... actually a good point. I have added a note here[[Arch User Repository#Foo in the AUR is outdated; what do I do?|[1]]] instead, what do you think? <br />
::That could use a "Consider whether the package is actually outdated to begin with" section... -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 18:39, 9 June 2017 (UTC)<br />
<br />
:::Looks good, maybe adding something like "Tracking of upstream updates for VCS packages is the responsibility of users, not maintainers." would make it more explicit. Regarding soname bumps, pushing them does not hurt but I tend to support the same strategy as with pkgver, because people might prefer {{ic|makepkg -ef}} to keep the same revision. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 19:13, 9 June 2017 (UTC)<br />
<br />
::::I reject this argument. :p {{ic|makepkg -ef}} is not meant to guarantee an identical package when the PKGBUILD has been modified between runs. Why would you even want that anyway?<br />
::::Also, by preference I do generally do a pkgver bump on upstream stable releases, on the grounds that per-commit notifications are ugly but stable releases should be updated to as soon as possible. But maybe now that we are writing actual guidelines, maybe we can decide whether that is something the AUR wishes to firmly rule against. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 22:26, 9 June 2017 (UTC)<br />
<br />
:::::I have an AUR package where the maintainer bumps the package in every single new commit. He asked for a guideline where this is written down, as he doesnt believe my "good practice" argument. I think it would be best to write it down into the guideline section of this page, as its the first place I'd search for. The AUR page might be also a suitable place, but this is not where you start searching. Please add a note, thanks. --[[User:NicoHood|NicoHood]] ([[User talk:NicoHood|talk]]) 13:32, 16 June 2017 (UTC)<br />
<br />
::::::It's been already added to [[Arch User Repository#Foo in the AUR is outdated; what do I do?]], which is the page for AUR guidelines. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 14:52, 16 June 2017 (UTC)<br />
<br />
:::::::Yes, but it only says you should not flag it out of date. But it does not tell the maintainer to stop version bumping. This is not clear enough and people will always ignore it then, if you tell them to stop. --[[User:NicoHood|NicoHood]] ([[User talk:NicoHood|talk]]) 15:04, 16 June 2017 (UTC)<br />
<br />
::::::::Aaaaaaand, you have now confirmed that you '''haven't actually read''' the change I made there. (I cannot believe you think I would go modify the AUR page in reference to this conversation, and then ''completely'' fail to say the one thing this discussion was about in the first place.)<br />
::::::::So I will just ignore anything you say now, I guess. At least until I have some reason to think it is actually worth my time to even consider what you are saying. :(<br />
::::::::Addendum: You could always have just added it yourself, this is a Wiki after all... -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 21:40, 16 June 2017 (UTC)<br />
<br />
:::::Hi, I'm the maintainer [[User:NicoHood|NicoHood]] is talking about, [https://aur.archlinux.org/packages/dino-git/ here] the discussion. I failed to find a guideline about how a maintainer should behave in this circumstance and as it wasn't discouraged or forbidden I decided to act as I did. One of my points is that I find annoying, as a user with more than a bounce of packages from AUR, that I have to clone every time, every repo for every package just to check for updates (some of the projects are quite big and I find this a waste of time and bandwidth). In this particular case we are talking about a project which is rapidly implementing new features and as I check periodically for updates regarding new functionalities I think other users may benefit from being notified about them. I share the point of not bumping the pkgver for every commit but I think that if a maintainer has time to update the pkgver on new features and will to do so it's not making damages to anyone. Please correct me if I'm missing something. Re-reading my commits I noticed some of them were not needed and I'll avoid to push unnecessary updates. <br />
:::::What I'm missing as well is the role of pkgver for vcs packages, expecially for those projects that don't have a release yet. Clarifying this maybe would also close the discussion. [[User:Valo|Valo]] ([[User talk:Valo|talk]]) 08:04, 19 June 2017 (UTC)<br />
<br />
::::::You can use $SRCDEST to specify a cache directory where makepkg will store the repositories in between makepkg runs. For a package which someone wants to update frequently, it makes sense to use this. :) This goes double for a rapidly-developing software which gets frequent commits. And that still isn't an excuse to "have time to update the pkgver". Strictly speaking, it is '''never''' necessary, unless changes to the dependencies or the build()/package() functions are involved. People who are that interested in the software's development, are likely already following it elsewhere, and everyone else doesn't really need to know "oh, how exciting, a couple more commits for this VCS software. There is also the matter that for looking at the history of the PKGBUILD itself, to see what changed, it requires more effort to mentally filter through many pkgver-only changes and see what actually changed with regard to the metadata/build process/etc. Noise is, well, noisy.<br />
::::::I only justify upstream releases as it is, by telling myself that users of the non-development version are expected to update immediately, so users of the development version should as well -- and because even if a user doesn't bother to update for each commit, they should definitely aspire to be running the latest official stable release.<br />
::::::Regarding the purpose of the pkgver for VCS packages, it is to ensure that users can query their installed packages to see what version of the software they have installed, and to ensure a monotonically increasing pkgver for more recent snapshots of the source code it is built from. The fact that pkgver is also something an AUR helper can compare when emulating {{ic|pacman -Syu}} is not really relevant to a VCS package, except as an added redundancy which you should be judicious about using.<br />
::::::Anyway, we now have a guideline. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 04:29, 26 June 2017 (UTC)<br />
<br />
:On a similar note, it is also annoying to {{ic|git checkout PKGBUILD}} before {{ic|git pull}} each time there ''is'' a substantial change pushed to the AUR, but my local {{ic|pkgver}} was newer than the previous version on AUR. It's not just about running one more command, I always have to {{ic|git diff}} before to check that I don't have some other unstaged changes. Perhaps if there was some better technical solution for this (perhaps the {{ic|pkgver}} variable could be completely removed when there is a {{ic|pkgver}} function?), then maybe people would not feel the unbearable urge to immediately commit and push all unstaged changes. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 17:18, 9 June 2017 (UTC)<br />
<br />
::Well, you probably aren't supposed to make local changes. :p What is wrong with the AUR maintainer that you need to fix, but don't feel like asking for a better maintainer? That being said, I do actually have cases (very personal patches) where I make a local change and commit that, then use {{ic|git fetch && git rebase}}. This works quite well, so I am not sure we need a better technical solution at all. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 18:39, 9 June 2017 (UTC)<br />
<br />
:::Not that I care about these, but at least [https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mpv-git#n6 here] people are actually supposed to make local changes. -- [[User:Lahwaacz|Lahwaacz]] ([[User talk:Lahwaacz|talk]]) 19:13, 9 June 2017 (UTC)<br />
<br />
::::Sure, it is sometimes "supposed to" happen, but it isn't really the norm. :) As I said, {{ic|git rebase}} is a powerful tool to use there. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 22:26, 9 June 2017 (UTC)<br />
<br />
== Git submodules: sometimes not all submodules are needed ==<br />
<br />
As per this writeup by Earnestly (which I understand is the initial source of that section): https://ptpb.pw/r/N6-z.md<br />
Some packages shouldn't try to checkout all submodules, because it is wasteful and unneeded. It might be nice to expand on that section by mentioning this. -- [[User:Eschwartz|Eschwartz]] ([[User talk:Eschwartz|talk]]) 14:19, 12 July 2017 (UTC)<br />
<br />
== Add notice to this page? ==<br />
The [[Arch User Repository]] page indicates:<br />
{{Note|[[VCS package guidelines|VCS packages]] are not considered out of date when the pkgver changes, so '''please''' do not flag them as the maintainer will merely unflag the package and ignore you. AUR maintainers should not commit mere pkgver bumps.}}<br />
Perhaps this should be included on this page as well, to inform new maintainers that they should not be making pkgver bumps for these packages.<br />
That being said, there should probably be a way to update the pkgver shown by the AUR web UI, or disable it entirely for VCS packages, in order to prevent others from believing a package is out of date and flagging it. [[User:JacobHenner|JacobHenner]] ([[User talk:JacobHenner|talk]]) 11:33, 17 November 2017 (UTC)<br />
<br />
== pacman 4.1 ==<br />
<br />
Shall we remove the references to 4.1?<br />
What was possible / the practice in the past may help to understand certain outdated packages but 5 years starts to be very long and we should turn the page at one stage I suppose.<br />
This is the impression of a newcomer who wants to get to the point and is confused by the reference to such old versions but don't hesitate to correct me if this is still important.<br />
[[User:Kewl|Kewl]] ([[User talk:Kewl|talk]]) 10:29, 14 January 2018 (UTC)<br />
<br />
== edit request: sed command needs to replace '-' globally ==<br />
<br />
This line (missing `g`):<br />
git describe --long | sed -r 's/-([0-9,a-g,A-G]{7}.*)//' | sed 's/-/./'<br />
should be:<br />
git describe --long | sed -r 's/-([0-9,a-g,A-G]{7}.*)//' | sed 's/-/./g'<br />
<br />
{{unsigned|05:58, 1 March 2018|Skimj}}<br />
<br />
== Suggest to use https instead of git protocol when possible ==<br />
A lot of public structures/companies block the default git port (9418). This problem is explained here : https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols#_the_cons_4<br />
Using {{ic|git+https://}} urls for sources is supported by most (if not all) git servers, and {{ic|https}} will most likely not be blocked.<br />
<br />
{{unsigned|10:39, 22 October 2018|Salamandar}}<br />
<br />
:+1, I'd also mention that it's a security issue because {{ic|git://}} and {{ic|http://}} aren't encrypted and vulnerable to MITM attacks. --[[User:Larivact|Larivact]] ([[User talk:Larivact|talk]]) 19:10, 22 October 2018 (UTC)<br />
<br />
::+1, That's gold for me, as I'm normally behind a proxy that blocks {{ic|git://}}, but allows {{ic|git+https://}}... -- [[User:Josephgbr|Josephgbr]] ([[User talk:Josephgbr|talk]]) 02:19, 16 April 2019 (UTC)<br />
<br />
:::I see this is done in "An example Git source array". How about the other two places that illustrate using git sources? (left of {{ic|vcs+}} bullet point in [[VCS package guidelines#VCS sources|VCS sources]], on two lines in the [[VCS package guidelines#Git submodules|Git submodules]] tip) [[User:Quequotion|quequotion]] ([[User talk:Quequotion|talk]]) 15:18, 5 June 2019 (UTC)<br />
<br />
== Proposal: Break "Guidelines" header into subsections ==<br />
<br />
Too many bullet points are a navigation hazard. To help users get to the information they need faster, we should reorganize this into a few subsections. [[User:Quequotion|quequotion]] ([[User talk:Quequotion|talk]]) 13:31, 4 March 2019 (UTC)<br />
<br />
=== Proposal: Package naming ===<br />
<br />
Suffix {{Ic|''pkgbase''}} with {{Ic|-cvs}}, {{Ic|-svn}}, {{Ic|-hg}}, {{Ic|-darcs}}, {{Ic|-bzr}}, {{Ic|-git}} etc. unless the package fetches a specific release.<br />
<br />
=== Proposal: Versioning ===<br />
<br />
If the resulting package is different after making any changes, increasing the {{Ic|pkgrel}} is mandatory. Changing the {{ic|pkgver}} is not.<br />
<br />
{{Tip|{{Ic|--holdver}} can be used to prevent [[makepkg]] from updating the {{ic|pkgver}} (see: [https://www.archlinux.org/pacman/makepkg.8.html makepkg(8)])}}<br />
<br />
=== Proposal: Conflicts and dependencies ===<br />
<br />
* Include the standard version of the package in {{ic|conflicts}} and {{ic|provides}} (e.g. for {{AUR|fluxbox-git}}: {{Ic|1=conflicts=('fluxbox')}} and {{Ic|1=provides=('fluxbox')}}).<br />
<br />
* {{Ic|replaces}} should be used only when a package ''deprecates'' another. (ie, the {{ic|''pkgbase''}} has changed and the previous version has been [[Arch User Repository#Deletion|deleted]])<br />
<br />
* Include the appropriate VCS tool in {{Ic|makedepends}} ({{pkg|cvs}}, {{pkg|subversion}}, {{pkg|git}}, ...).<br />
<br />
=== Proposal: Authentication and Security ===<br />
<br />
* When using the cvsroot, use {{Ic|anonymous:@}} rather than {{Ic|anonymous@}} to avoid having to enter a blank password or {{Ic|anonymous:password@}}, if one is required.<br />
<br />
* Because the sources are not static, skip the checksum in {{ic|md*sums()}} with the value {{ic|'SKIP'}}.<br />
<br />
== GitHub API usage ==<br />
<br />
Some git repos are really huge (ex. QGIS) and git-clone process takes a lot of time and space. So, here is an example how to use GH API to obtain pkgver:<br />
{{hc|<nowiki><br />
_orgname=foo<br />
_pkgname=bar<br />
_branch=master<br />
_gh_api_url="https://api.github.com/repos/${_orgname}/${_pkgname}"<br />
...<br />
makedepends=('jq')<br />
...<br />
source=("https://github.com/${_orgname}/${_pkgname}/archive/${_branch}.tar.gz")<br />
sha256sums=('SKIP')<br />
<br />
pkgver() {<br />
read -r tag_name tag_sha <<<$(curl -s "${_gh_api_url}/tags" | \<br />
jq -r '.[0]|[.name,.commit.sha]|@sh' | sed "s/'//g")<br />
head=$(curl -s "${_gh_api_url}/git/refs/heads/${_branch}" | \<br />
jq -r '.object.sha')<br />
count=$(curl -s "${_gh_api_url}/compare/${tag_sha}...${head}" | \<br />
jq -r '.total_commits')<br />
<br />
printf "%s.r%s.g%.8s" "${tag_name}" "${count}" "${head}"<br />
}</nowiki>|<br />
0.1.r7.g47de1a51<br />
}}</div>Sikmirhttps://wiki.archlinux.org/index.php?title=Nix&diff=573834Nix2019-05-24T10:27:58Z<p>Sikmir: Created page with "Category:Package management [https://nixos.org/nix/ Nix] is a purely functional package manager. See the [https://nixos.org/nix/manual/ Nix Package Manager Guide] for in..."</p>
<hr />
<div>[[Category:Package management]]<br />
<br />
[https://nixos.org/nix/ Nix] is a purely functional package manager.<br />
<br />
See the [https://nixos.org/nix/manual/ Nix Package Manager Guide] for information.<br />
<br />
== Installation ==<br />
<br />
Nix is available in the AUR as {{AUR|nix}}.</div>Sikmirhttps://wiki.archlinux.org/index.php?title=List_of_applications/Science&diff=573198List of applications/Science2019-05-14T17:55:58Z<p>Sikmir: Add OpenOrienteering Mapper</p>
<hr />
<div><noinclude><br />
[[Category:Science]]<br />
[[Category:Applications]]<br />
[[Category:Lists of software]]<br />
[[es:List of applications/Science]]<br />
[[it:List of applications/Science]]<br />
[[ja:アプリケーション一覧/サイエンス]]<br />
[[ru:List of applications/Science]]<br />
[[zh-hans:List of applications/Science]]<br />
[[zh-hant:List of applications/Science]]<br />
{{List of applications navigation}}<br />
</noinclude><br />
== Science ==<br />
<br />
{{Note|1=For possibly more up to date selection of scientific applications, try checking the [https://aur.archlinux.org/packages.php?O=0&do_Search=Go&detail=1&C=15&SeB=nd&SB=v&SO=d&PP=50 AUR 'science' category]}}<br />
<br />
=== Mathematics ===<br />
<br />
==== Calculator ====<br />
<br />
See also [[Wikipedia:Comparison of software calculators]].<br />
<br />
* {{App|[[Wikipedia:bc programming language|bc]]|Arbitrary precision calculator language.|https://www.gnu.org/software/bc/|{{Pkg|bc}}}}<br />
* {{App|calc|Arbitrary precision console calculator.|http://www.isthe.com/chongo/tech/comp/calc/|{{Pkg|calc}}}}<br />
* {{App|Deepin Calculator|Easy to use calculator for Deepin desktop.|https://www.deepin.org/en/original/deepin-calculator/|{{Pkg|deepin-calculator}}}}<br />
* {{App|Extcalc|Qt-based scientific graphical calculator.|http://extcalc-linux.sourceforge.net/|{{AUR|extcalc}}}}<br />
* {{App|FOX Calculator|Simple desktop calculator.|http://fox-toolkit.org/|{{Pkg|fox}}}}<br />
* {{App|galculator|GTK+ based scientific calculator.|http://galculator.mnim.org/|GTK+ 3: {{Pkg|galculator}}, GTK+ 2: {{pkg|galculator-gtk2}}}}<br />
* {{App|[[Wikipedia:Genius (mathematics software)|Genius]]|Advanced calculator including a mathematical programming language.|http://jirka.org/genius.html|{{Pkg|genius}}}}<br />
* {{App|[[Wikipedia:GNOME Calculator|GNOME Calculator]]|Scientific calculator included in the GNOME desktop.|https://wiki.gnome.org/Apps/Calculator|{{Pkg|gnome-calculator}}}}<br />
* {{App|[[Wikipedia:KAlgebra|KAlgebra]]|Calculator and 3D plotter. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/kalgebra/|{{Pkg|kalgebra}}}}<br />
* {{App|[[Wikipedia:KCalc|KCalc]]|Scientific calculator included in the KDE desktop.|https://www.kde.org/applications/utilities/kcalc/|{{Pkg|kcalc}}}}<br />
* {{App|Liri Calculator|Calculator for Liri.|https://github.com/lirios/calculator|{{Pkg|liri-calculator}}}}<br />
* {{App|MATE Calc|Calculator for the MATE desktop environment.|https://mate-desktop.org/|{{Pkg|mate-calc}}}}<br />
* {{App|Qalculate!|Calculator and equation solver with fault-tolerant parsing, constant recognition and units.|https://qalculate.github.io/|{{Pkg|qalculate-gtk}}}}<br />
* {{App|SpeedCrunch|Fast, high precision and powerful cross-platform calculator.|http://speedcrunch.org|{{Pkg|speedcrunch}}}}<br />
* {{App|[[Wikipedia:xcalc|xcalc]]|Scientific calculator for X with algebraic and reverse polish notation modes.|https://www.x.org/|{{Pkg|xorg-xcalc}}}}<br />
<br />
==== Computer algebra system ====<br />
<br />
See also [[Wikipedia:Comparison of computer algebra systems]].<br />
<br />
* {{App|[[Wikipedia:Axiom (computer algebra system)|AXIOM]]|FriCAS: derivative of the powerful AXIOM-CAS|http://fricas.sourceforge.net|{{AUR|fricas}}}}<br />
* {{App|[[Wikipedia:GAP (computer algebra system)|GAP]]|Computer algebra system for computational discrete algebra with particular emphasis on computational group theory.|http://www.gap-system.org|{{Pkg|gap}}}}<br />
* {{App|[[Maple]]|Famous commercial CAS. Often used in education.|https://www.maplesoft.com/products/maple/|}}<br />
* {{App|Mathics|A free CAS for symbolic mathematical computations which uses [[Python]] as its main language. It aims at achieving a Mathematica-compatible syntax and functions. It relies mostly on Sympy for most mathematical tasks and, optionally, Sage for more advanced functionality.|http://www.mathics.org/|{{AUR|mathics}}}} <br />
* {{App|[[Wikipedia:Mathomatic|Mathomatic]]|General purpose Computer Algebra System written in C.|http://www.mathomatic.org/|{{Pkg|mathomatic}}}}<br />
* {{App|[[Wikipedia:Maxima (software)|Maxima]]|[[Wikipedia:Maple (software)|Maple]]/[[Wikipedia:Wolfram Mathematica|Mathematica]]-like computer algebra system.|http://maxima.sourceforge.net/|{{Pkg|maxima}}}}<br />
* {{App|[[Wikipedia:PARI/GP|PARI/GP]]|Computer algebra system designed for fast computations in number theory.|http://pari.math.u-bordeaux.fr/|{{Pkg|pari}}}}<br />
* {{App|[[Wikipedia:Singular (software)|Singular]]|Computer algebra system for polynomial computations, with special emphasis on commutative and non-commutative algebra, algebraic geometry, and singularity theory.|https://www.singular.uni-kl.de/|{{Pkg|singular}}}}<br />
* {{App|wxMaxima|Graphical user interface for Maxima being a powerful computer algebra system.|http://andrejv.github.io/wxmaxima/|{{Pkg|wxmaxima}}}}<br />
* {{App|[[Wikipedia:Xcas|Xcas]]|User interface to Giac, a free, basic computer algebra system.|http://www-fourier.ujf-grenoble.fr/~parisse/giac.html|{{Pkg|xcas}}}}<br />
<br />
==== Scientific or technical computing ====<br />
<br />
See also [[Wikipedia:Comparison of numerical analysis software]].<br />
<br />
* {{App|[[Wikipedia:Cantor (software)|Cantor]]|Application that lets you use your favorite mathematical applications from within a nice KDE-integrated Worksheet Interface. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/cantor/|{{Pkg|cantor}}}}<br />
* {{App|EngLab|Cross-compile mathematical platform with a C like syntax.|http://englab.bugfest.net|{{AUR|englab}}}}<br />
* {{App|[[Wikipedia:FFTW|FFTW]]|A [[Wikipedia:Fast_Fourier_transform|Fast Fourier Transform]] library for computing discrete Fourier transforms. Used for a wide variety of numerical applications, which includes spectral methods.|https://www.fftw.org/ |{{Pkg|fftw}} {{AUR|fftw-mpi}} {{AUR|fftw-mpich}}}}<br />
* {{App|[[Wikipedia:FreeMat|FreeMat]]|Matlab-like program that supports many of its functions and features a codeless interface to external C, C++, and Fortran code, further parallel distributed algorithm development (via MPI), and 3D visualization capabilities.|http://freemat.sourceforge.net/|{{AUR|freemat}}}}<br />
* {{App|[[Wikipedia:GeoGebra|GeoGebra]]|Dynamic mathematics software with interactive graphics, algebra and spreadsheet|https://www.geogebra.org/|{{Pkg|geogebra}}}}<br />
* {{App|[[Wikipedia:Julia (programming language)|Julia]]|High-level, high-performance dynamic language for technical computing.|https://julialang.org/|{{Pkg|julia}}}}<br />
* {{App|[[Wikipedia:Kig (software)|Kig]]|Application for Interactive Geometry. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/kig/|{{Pkg|kig}}}}<br />
* {{App|[[Wikipedia:matplotlib|matplotlib (PyLab)]]|Collection of Python modules (pyplot, numpy, etc.) used for scientific calculations.|https://www.scipy.org/|{{Pkg|python-matplotlib}}}}<br />
* {{App|[[Octave]]|[[MATLAB]]-like language and interface for numerical computations.|https://www.gnu.org/software/octave/ |{{Pkg|octave}}}}<br />
* {{App|[[SageMath]]|Mathematics software system, that combines many existing open-source packages into a common Python interface. Alternative to Magma, Maple, Mathematica and Matlab.|http://www.sagemath.org|{{Pkg|sagemath}}}}<br />
* {{App|[[Wikipedia:Scilab|Scilab]]|Matlab alternative used for numerical computations. Its syntax is not equivalent to that of Matlab, but it can be easily converted.|http://www.scilab.org/|{{AUR|scilab}}, {{AUR|scilab-bin}}, {{AUR|scilab-git}}}}<br />
<br />
==== Statistics ====<br />
<br />
See also [[Wikipedia:Comparison of statistical packages]].<br />
<br />
* {{App|[[Wikipedia:Just another Gibbs sampler|JAGS]] (Just another Gibbs sampler)|Cross-platform program for analysis of Bayesian hierarchical models using Markov Chain Monte Carlo (MCMC) simulation.|http://mcmc-jags.sourceforge.net/|{{AUR|jags}}}}<br />
* {{App|jamovi|Statistics package, which is easy to use, and designed to be familiar to users of SPSS. Based on the [https://electronjs.org/ Electron] platform.|https://www.jamovi.org/|{{AUR|jamovi-git}}}}<br />
* {{App|[[Wikipedia:Pandas_(software)|Python Data Analysis Library (pandas)]]| Providing high-performance, easy-to-use data structures and data analysis tools with Python programming language.|http://pandas.pydata.org/|{{Pkg|python2-pandas}} {{Pkg|python-pandas}}}}<br />
* {{App|[[Wikipedia:PSPP|PSPP]]|Free SPSS implementation.|https://www.gnu.org/software/pspp/|{{AUR|pspp}}}}<br />
* {{App|[[R]]|Software environment for statistical computing and graphics.|https://cran.r-project.org/|{{Pkg|r}}}}<br />
* {{App|[[Wikipedia:RKWard|RKWard]]|Frontend for the statistical language R.|https://rkward.kde.org/|{{AUR|rkward}}}}<br />
* {{App|[[Wikipedia:RStudio|RStudio]]|A powerful and productive IDE for R written in Qt.|https://www.rstudio.com/|{{AUR|rstudio-desktop-bin}}}}<br />
<br />
==== Data analysis and plotting ====<br />
<br />
See also [[Wikipedia:List of information graphics software]].<br />
<br />
* {{App|Engauge Digitizer|Extracts data points from images of graphs.|https://markummitchell.github.io/engauge-digitizer/|{{AUR|engauge}}}}<br />
* {{App|[[Wikipedia:Fityk|Fityk]]|Curve fitting and data analysis application, predominantly used to fit analytical, bell-shaped functions to experimental data.|http://fityk.nieto.pl/|{{AUR|fityk}}}}<br />
* {{App|[[Wikipedia:gnuplot|Gnuplot]]|Command-line program that can generate 2D and 3D plots of functions, data, and data fits. |http://www.gnuplot.info/|{{Pkg|gnuplot}}}}<br />
* {{App|[[Wikipedia:Grace (plotting tool)|Grace]]|WYSIWYG 2D graph plotting tool.|http://plasma-gate.weizmann.ac.il/Grace/|{{AUR|grace}} {{AUR|qtgrace}} {{AUR|gracegtk}}}}<br />
* {{App|[[Wikipedia:KmPlot|KmPlot]]|Program to draw graphs, their integrals or derivatives. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/kmplot/|{{Pkg|kmplot}}}}<br />
* {{App|[[Wikipedia:LabPlot|LabPlot]]|Free software data analysis and visualization application, similar to SciDAVis.|https://labplot.kde.org/|{{Pkg|labplot}}}}<br />
* {{App|[[Wikipedia:QtiPlot|QtiPlot]]|Platform-independent application used for interactive scientific graphing and data analysis, similar to the proprietary [[Wikipedia:Origin (software)|Origin]] or [[Wikipedia:SigmaPlot|SigmaPlot]].|http://www.qtiplot.com/|{{AUR|qtiplot-git}}{{Broken package link|package not found}}}}<br />
* {{App|Rocs|Graph Theory IDE for everybody interested in designing and analyzing graph algorithms (e.g., lecturers, students, researchers). Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/rocs/|{{Pkg|rocs}}}}<br />
* {{App|[[Wikipedia:ROOT|ROOT]]|Data analysis program and library (originally for particle physics) developed by CERN.|https://root.cern.ch/|{{Pkg|root}}}}<br />
* {{App|[[Wikipedia:SciDAVis|SciDAVis]]|Fork of QtiPlot with the goal of being better documented and more user friendly.|http://scidavis.sourceforge.net/|{{AUR|scidavis}}}}<br />
See also [[List of applications/Documents#Spreadsheets]]<br />
<br />
==== Proof assistants ====<br />
<br />
See also [[Wikipedia:Proof assistant]].<br />
<br />
* {{App|[[Wikipedia:Agda (programming language)|Agda]]|Dependently typed functional programming language and proof assistant. It is an interactive system for writing and checking proofs.|http://wiki.portal.chalmers.se/agda/|{{Pkg|agda}}}}<br />
* {{App|[[Wikipedia:Coq|Coq]]|Formal proof management system. It provides a formal language to write mathematical definitions, executable algorithms and theorems together with an environment for semi-interactive development of machine-checked proofs.|https://coq.inria.fr/|CLI: {{Pkg|coq}}, GUI: {{Pkg|coqide}}}}<br />
* {{App|[[Wikipedia:Isabelle (proof assistant)|Isabelle]]|Generic proof assistant that allows mathematical formulas to be expressed in a formal language and provides tools for proving those formulas in a logical calculus.|https://www.cl.cam.ac.uk/research/hvg/Isabelle/|{{AUR|isabelle}}}}<br />
<br />
=== Physics ===<br />
<br />
==== Physics simulation ====<br />
<br />
* {{App|[[Wikipedia:Code_Aster|Code_Aster]]|Software package for Civil and Structural Engineering finite element analysis and numeric simulation in structural mechanics.|https://www.code-aster.org/V2/spip.php?rubrique2|{{AUR|aster}}}}<br />
* {{App|[[Wikipedia:EPANET|EPANET]]|EPANET performs extended period simulation of the water movement and quality behavior within pressurized pipe networks.|https://www.epa.gov/|{{AUR|epanet2-git}}}}<br />
* {{App|[[Wikipedia:Step (software)|Step]]|Two-dimensional physics simulation engine. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/step/|{{Pkg|step}}}}<br />
* {{App|[[Wikipedia:SWMM|SWMM]]|Storm Water Management Model is a dynamic rainfall-runoff-subsurface runoff simulation model used for simulation of the surface/subsurface hydrology quantity and quality.|https://www.epa.gov/|{{AUR|swmm5-git}}}}<br />
<br />
==== Unit conversion ====<br />
<br />
* {{App|ConvertAll|Unit conversion application that allows one to combine units in any way (e.g. inches per decade), even if it does not make sense.|http://convertall.bellz.org/|{{AUR|convertall}}}} <br />
* {{App|Gonvert|Conversion utility that allows conversion between many units like CGS, Ancient, Imperial with many categories like length, mass, numbers, etc.|http://www.unihedron.com/projects/gonvert/|{{AUR|gonvert}}}} <br />
* {{App|[[Wikipedia:GNU Units|Units]]|Command-line unit converter and calculator that can handle multiplicative scale changes, nonlinear conversions such as Fahrenheit to Celsius or wire gauge and others.|https://www.gnu.org/software/units/|{{Pkg|units}}}}<br />
<br />
=== Chemistry ===<br />
<br />
==== Molecules ====<br />
<br />
===== Viewers =====<br />
<br />
See also [[Wikipedia:List of molecular graphics systems]].<br />
<br />
* {{App|[[Wikipedia:Avogadro_(software)|Avogadro]]|Editor, viewer and simulator for 3D molecule structures (also supports downloading files from the [[Wikipedia:Protein Data Bank|Protein Data Bank]]).|http://avogadro.cc/|{{AUR|avogadro}}}}<br />
* {{App|BALLView|Standalone molecular modeling and visualization application, part of the [[Wikipedia:BALL|BALL]] framework.|http://www.ball-project.org/|{{AUR|ball}}}}<br />
* {{App|[[Wikipedia:Ghemical|Ghemical]]|Computational chemistry software package used to edit, view and simulate molecular structures.|http://bioinformatics.org/ghemical/ghemical/index.html|{{AUR|ghemical}}}}<br />
* {{App|[[Wikipedia:PyMOL|PyMOL]]|Open-source molecular visualization system that can produce high quality 3D images of small molecules and biological macromolecules, such as proteins.|https://pymol.org/|{{Pkg|pymol}}}}<br />
<br />
===== Drawing =====<br />
<br />
* {{App|[[Wikipedia:BKchem|BKChem]]|Practical and goodlooking skeletal formula molecule drawing program.|http://bkchem.zirael.org/|{{AUR|bkchem}}}}<br />
* {{App|[[Wikipedia:Chemtool|Chemtool]]|GTK+-based program for drawing chemical structural formulas.|http://ruby.chemie.uni-freiburg.de/~martin/chemtool/chemtool.html|{{Pkg|chemtool}}}}<br />
* {{App|EasyChem|Simple skeletal formula molecule drawing program with a focus on producing press-quality figures.|http://easychem.sourceforge.net/}}<br />
* {{App|[[Wikipedia:Gabedit|Gabedit]]|Graphical user interface to computational chemistry packages like [[Wikipedia:GAMESS (US)|GAMESS]], [[Wikipedia:Gaussian (software)|Gaussian]], [[Wikipedia:MOLCAS|MOLCAS]], [[Wikipedia:MOLPRO|MOLPRO]], [[Wikipedia:MPQC|MPQC]], [[Wikipedia:MOPAC|OpenMopac]], [[Wikipedia:PC GAMESS|Firefly]] (previously PC GAMESS) and [[Wikipedia:Q-Chem|Q-Chem]].|http://gabedit.sourceforge.net/|{{AUR|gabedit}}}}<br />
<br />
===== Modeling =====<br />
<br />
* {{App|[[GROMACS]] (GROningen MAchine for Chemical Simulations)|Versatile package to perform molecular dynamics, i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles.|http://www.gromacs.org|{{AUR|gromacs}}}} <br />
* {{App|[[Wikipedia:Quantum ESPRESSO|Quantum ESPRESSO]]|Integrated suite of applications for electronic-structure calculations and materials modeling at nanoscale. It is based on density-functional theory, plane waves, and pseudopotentials (both norm-conserving and ultrasoft).|http://www.quantum-espresso.org/|{{AUR|quantum-espresso}}}}<br />
<br />
==== Periodic table ====<br />
<br />
* {{App|eperiodique|A simple Periodic Table Of Elements viewer using the EFL.|http://eperiodique.sourceforge.net/|{{AUR|eperiodique}}}}<br />
* {{App|gElemental|Periodic table of the elements with additional information.|http://freecode.com/projects/gelemental|{{AUR|gelemental}}}}<br />
* {{App|Kalzium|Periodic table of the elements with molecule editor and equation solver. Part of {{Grp|kdeedu}}.|https://www.kde.org/applications/education/kalzium/|{{Pkg|kalzium}}}}<br />
<br />
=== Earth science ===<br />
<br />
==== Geography ====<br />
<br />
* {{App|BT747|The swiss army knife for MTK GPS dataloggers.|https://sourceforge.net/projects/bt747/|{{Pkg|bt747}}}}<br />
* {{App|FoxtrotGPS|Lightweight and fast mapping application.|https://www.foxtrotgps.org/|{{AUR|foxtrotgps}}}}<br />
* {{App|Gebabbel|Alternative GUI for GPSBabel.|http://gebabbel.sourceforge.net/|{{AUR|gebabbel}}}}<br />
* {{App|Geotag|Match date/time information from photos with location information from a GPS unit or from a map.|http://geotag.sourceforge.net/|{{Pkg|geotag}}}}<br />
* {{App|GNOME Maps|A simple map client for GNOME. Part of {{Grp|gnome-extra}}.|https://wiki.gnome.org/Apps/Maps|{{Pkg|gnome-maps}}}}<br />
* {{App|GottenGeography|Easy to use photo geotagging application for the GNOME desktop.|https://launchpad.net/gottengeography|{{Pkg|gottengeography}}}}<br />
* {{App|Gpredict|Real-time satellite tracking and orbit prediction application.|http://gpredict.oz9aec.net/|{{AUR|gpredict}}}}<br />
* {{App|GPSBabel|Reads, writes, and manipulates GPS waypoints in a variety of formats.|https://www.gpsbabel.org/|{{Pkg|gpsbabel}}}}<br />
* {{App|GPSCorrelate|Correlate (geotagging) digital camera photos with GPS data in GPX format.|https://github.com/freefoote/gpscorrelate|{{Pkg|gpscorrelate}}}}<br />
* {{App|[[Wikipedia:gpsd|gpsd]]|Service daemon that monitors one or more GPSes or AIS receivers attached to a host computer through serial or USB ports, making all data on the location/course/velocity of the sensors available to be queried on TCP port 2947 of the host computer.|http://catb.org/gpsd/|{{Pkg|gpsd}}}}<br />
* {{App|GpsPrune|View, edit and convert coordinate data from GPS systems.|https://activityworkshop.net/software/gpsprune/|{{Pkg|gpsprune}}}}<br />
* {{App|GPXSee|GPS log file viewer and analyzer.|http://www.gpxsee.org/|{{Pkg|gpxsee}}}}<br />
* {{App|GPX Viewer|Simple tool to visualize tracks and waypoints stored in a gpx file.|https://blog.sarine.nl/tag/gpxviewer/|{{Pkg|gpx-viewer}}}}<br />
* {{App|[[Wikipedia:GRASS GIS|GRASS GIS]]|Geospatial data management and analysis, image processing, graphics/maps production, spatial modeling and visualization.|https://grass.osgeo.org/|{{AUR|grass}}}}<br />
* {{App|[[Wikipedia:gvSIG|gvSIG]]| vSIG is a geographic information system (GIS), that is, a desktop application designed for capturing, storing, handling, analyzing and deploying any kind of referenced geographic information in order to solve complex management and planning problems. |http://www.gvsig.com/en| {{AUR|gvsig-desktop-bin}}}}<br />
* {{App|JOSM|An editor for OpenStreetMap written in Java.|http://josm.openstreetmap.de/|{{Pkg|josm}}}}<br />
* {{App|Mapton|Extensible desktop map and globe application written in Java.|https://mapton.org/|{{AUR|mapton}}}}<br />
* {{App|[[Wikipedia:Marble_(software)|Marble]]|Virtual Globe and World Atlas that can be used to learn more about the Earth. Part of {{Grp|kdeedu}}.|https://marble.kde.org/|KDE: {{Pkg|marble}}, Qt: {{Pkg|marble-qt}}}}<br />
* {{App|Merkaartor|OpenStreetMap editor.|http://merkaartor.be/|{{Pkg|merkaartor}}}}<br />
* {{App|Navit|Modular turn-by-turn car navigation system.|http://www.navit-project.org/|{{Pkg|navit}}}}<br />
* {{App|OffRoad|Offline vector map display ported from OsmAnd.|https://sourceforge.net/projects/offroadosm/|{{Pkg|offroad}}}}<br />
* {{App|OpenOrienteering Mapper|Orienteering mapmaking program.|https://www.openorienteering.org/apps/mapper/|{{AUR|openorienteering-mapper}}}}<br />
* {{App|QMapShack|Plan your next outdoor trip.|https://bitbucket.org/maproom/qmapshack|{{Pkg|qmapshack}}}}<br />
* {{App|QGIS|Geographic Information System (GIS) that supports vector, raster & database formats.|https://qgis.org/|{{Pkg|qgis}}}}<br />
* {{App|[[Wikipedia:Subsurface (software)|Subsurface]]|Diving logbook to keep track of your dives by logging dive locations (with GPS coordinates), weights and exposure protection used, divemasters and dive buddies, etc.|https://subsurface-divelog.org/|{{Pkg|subsurface}}}}<br />
* {{App|Viking|GTK+2 application to manage GPS data.|https://sourceforge.net/projects/viking/|{{Pkg|viking}}}}<br />
<br />
==== Meteorology ====<br />
<br />
* {{App|Gis Weather|Customizable weather forecast desktop widget.|https://sourceforge.net/projects/gis-weather/|{{AUR|gis-weather}}}}<br />
* {{App|GNOME Weather|Small application for GNOME that allows you to monitor the current weather conditions for your city, or anywhere in the world, and to access updated forecasts provided by various internet services.|https://wiki.gnome.org/Apps/Weather|{{Pkg|gnome-weather}}}}<br />
* {{App|meteo-qt|System tray application for weather status information.|https://github.com/dglent/meteo-qt|{{AUR|meteo-qt}}}}<br />
* {{App|wttr|A simple console application to check the weather, using data from http://wttr.in|https://github.com/AmirrezaFiroozi/wttr|{{AUR|wttr}}}}<br />
* {{App|Xfce Weather Panel Plugin|Weather forecast plugin for the Xfce4 panel.|https://goodies.xfce.org/projects/panel-plugins/xfce4-weather-plugin|{{Pkg|xfce4-weather-plugin}}}}<br />
<br />
=== Astronomy ===<br />
<br />
* {{App|[[Wikipedia:Celestia|Celestia]]|3D astronomy simulation program that allows users to travel through an extensive universe, modeled after reality, at any speed, in any direction and at any time in history.|https://celestiaproject.net/|{{Pkg|celestia}}}}<br />
* {{App|GIMP Astronomy Plugins|Set of GIMP plugins for astronomical image processing.|http://hennigbuam.de/georg/gimp.html|{{AUR|gimp-plugin-astronomy}}}}<br />
* {{App|GoQat|Camera acquisition software, especially for QSI cameras, that provides other features such as autoguiding, focusing help and others.|http://canburytech.net/GoQat/|{{AUR|goqat}}}}<br />
* {{App|[[Wikipedia:KStars|KStars]]|Planetarium application that provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. It is included in KDE Edu.|https://edu.kde.org/kstars/|{{Pkg|kstars}}}}<br />
* {{App|Qastrocam-g2|Webcam acquisition software for planetary imaging.|https://sourceforge.net/projects/qastrocam-g2/|{{AUR|qastrocam-g2}}}}<br />
* {{App|[[Wikipedia:Cartes du Ciel|Skychart / Cartes du Ciel]]|Planetarium that maps out and labels most of the constellations, planets, and objects you can see with a telescope. It can also download Digitized Sky Survey Charts and superimpose images over these charts.|https://www.ap-i.net/skychart/|{{AUR|skychart}}}}<br />
* {{App|StarPlot|3-dimensional star chart viewer.|http://starplot.org/|{{AUR|starplot}}}}<br />
* {{App|[[Wikipedia:Stellarium (computer program)|Stellarium]]|Beautiful 3D planetarium that uses OpenGL to render a realistic sky in real time.|http://www.stellarium.org/|{{Pkg|stellarium}}}}<br />
* {{App|Where Is M13|Application to visualize the locations and physical properties of deep sky objects.|http://www.thinkastronomy.com/M13/|{{AUR|where-is-m13}}}}<br />
* {{App|[[Wikipedia:XEphem|XEphem]]|Motif-based ephemeris and planetarium program.|http://www.clearskyinstitute.com/xephem/xephem.html|{{AUR|xephem}}}}<br />
<br />
=== Biology ===<br />
<br />
* {{App|[[Wikipedia:Gramps|Gramps]]|Genealogy program, which helps you track your family tree.|https://gramps-project.org/|{{Pkg|gramps}}}}<br />
<br />
====Computational biology and bioinformatics====<br />
<br />
See also [[Wikipedia:List of open source bioinformatics software]].<br />
<br />
* {{App|[[Wikipedia:BALL|BALL]] (Biochemical Algorithms Library)|Application framework in C++ that provides an extensive set of data structures as well as classes for molecular mechanics, advanced solvation methods, comparison and analysis of protein structures, file import/export, and visualization.|http://www.ball-project.org/|{{AUR|ball}}}}<br />
* {{App|[[Wikipedia:BioJava|BioJava]]|Set of Java tools for computational biology, as well as bioinformatics.|http://biojava.org|{{AUR|biojava}}}}<br />
* {{App|[[Wikipedia:Biopython|Biopython]]|Python package with tools for computational biology, as well as bioinformatics.|http://biopython.org/wiki/Biopython|{{Pkg|python-biopython}} {{Pkg|python2-biopython}}}}<br />
* {{App|[[Wikipedia:EMBOSS|EMBOSS]] (European Molecular Biology Open Software Suite)|Open source software analysis package specially developed for the needs of the molecular biology and bioinformatics user community.|http://emboss.sourceforge.net/|{{AUR|emboss}}}}<br />
* {{App|[[Wikipedia:MEGA, Molecular Evolutionary Genetics Analysis|MEGA]] (Molecular Evolutionary Genetics Analysis)|Integrated tool for conducting automatic and manual sequence alignment, inferring phylogenetic trees, mining web-based databases, estimating rates of molecular evolution, inferring ancestral sequences, and testing evolutionary hypotheses.|http://www.megasoftware.net/}}<br />
* {{App|[[Wikipedia:MUMmer|MUMmer]]|Bioinformatics software system for sequence alignment based on suffix trees.|http://mummer.sourceforge.net/|{{AUR|mummer}}}}<br />
* {{App|[[Wikipedia:Snapgene|Snapgene]]|Closed source molecular cloning application that offers a fast and easy way to plan, visualize, and document molecular biology procedures. Supports a wide range of cloning and PCR manipulations. The free version allows most common visualizations of a molecular biology workflow.|http://www.snapgene.com/|{{AUR|snapgene-viewer}}}}<br />
* {{App|[[Wikipedia:UGENE|UGENE]]|Application that integrates dozens of well-known biological tools and algorithms, providing both graphical user and command-line interfaces.|http://ugene.net/|{{AUR|ugene-bin}}}}<br />
<br />
==== Biochemistry ====<br />
<br />
* {{App|[[Wikipedia:Bioclipse|Bioclipse]]|Java-based visual platform for biochemistry that uses the Eclipse Rich Client Platform (RCP).|http://www.bioclipse.net/}}<br />
<br />
==== Image manipulation ====<br />
<br />
* {{App|[[Wikipedia:ImageJ|ImageJ]]|Java-based image processing and analysing program that provides extensibility via plugins and macros. It is widely used in microscopy (e.g. for cell counting).|https://imagej.nih.gov/ij/|{{AUR|imagej}}}}<br />
* {{App|[[Wikipedia:FIJI_(software)|Fiji]]|ImageJ distribution (and soon ImageJ2) with a lot of plugins organized into a coherent menu structure.|http://fiji.sc|{{AUR|fiji-binary}}}}<br />
<br />
==== [[Wikipedia:DICOM|DICOM]] viewers and volume rendering ====<br />
* {{App|aeskulap|Simple DICOM data viewer|http://www.nongnu.org/aeskulap/|{{AUR|aeskulap}}}}<br />
* {{App|weasis|Multipurpose DICOM viewer with a highly modular architecture|https://nroduit.github.io/en/|{{AUR|weasis-bin}}}}<br />
* {{App|aliza|Open 2D, 3D and 4D images in DICOM, MetaIO, Nifti, Nrrd and other formats, meshes in DICOM, VTK, STL and OBJ formats|https://www.aliza-dicom-viewer.com/|{{AUR|aliza}}}}<br />
* {{App|[[Wikipedia:Ginkgo CADx|Ginkgo CADx]]|Advanced DICOM viewer and dicomizer. Continuation of the now abandoned free version developed by MetaEmotion|https://github.com/gerddie/ginkgocadx|{{AUR|ginkgo-cadx}}}}<br />
* {{App|[[Wikipedia:3DSlicer|3DSlicer]]|Comprehensive [[Wikipedia:Magnetic resonance imaging|MRI]], [[Wikipedia:CT scan|CT]], [[Wikipedia:Laser scanning confocal microscopy|LSCM microscopy]] volume processing, segmentation and 3D-reconstruction|https://www.slicer.org/|{{AUR|3dslicer}}}}<br />
<br />
=== Engineering ===<br />
<br />
==== Computer-aided design ====<br />
<br />
See also [[Wikipedia:List of computer-aided design editors]].<br />
<br />
* {{App|[[Wikipedia:BRL-CAD|BRL-CAD]]|Constructive solid geometry (CSG) solid modeling computer-aided design (CAD) system that includes an interactive geometry editor, ray tracing support for graphics rendering and geometric analysis, computer network distributed framebuffer support, scripting, image-processing and signal-processing tools.|http://brlcad.org/|{{AUR|brlcad}}}}<br />
* {{App|DraftSight|Dassault Systemes' freeware 2D CAD application. DraftSight allows users to access DWG/DXF files, regardless of which CAD software was originally used to create them.|http://www.3ds.com/products-services/draftsight/overview/|{{AUR|draftsight}}}}<br />
* {{App|[[Wikipedia:FreeCAD|FreeCAD]]|CAD/CAE program, based on OpenCascade, Qt and Python with features such as macro recording, workbenches and the ability to run as server.|https://github.com/FreeCAD/FreeCAD|{{AUR|freecad}}}}<br />
* {{App|LeoCAD|CAD program for creating virtual LEGO models. It has an easy to use interface and currently includes over 6000 different pieces created by the LDraw community.|http://leocad.org|{{AUR|leocad}}}}<br />
* {{App|[[Wikipedia:LibreCAD|LibreCAD]]|Powerful 2D CAD application based on Qt. It has been forked from QCad Community Edition.|http://www.librecad.org/|{{Pkg|librecad}}}}<br />
* {{App|[[Wikipedia:OpenSCAD|OpenSCAD]]|Open source 2D/3D CAD using programmers approach.|http://www.openscad.org|{{Pkg|openscad}}}}<br />
* {{App|[[Wikipedia:QCad|QCAD]]|Powerful 2D CAD application that began in 1999. QCaD includes DFX standard file format and supports HPGL format.|http://www.qcad.org/|{{Pkg|qcad}}}}<br />
<br />
==== Electronics ====<br />
<br />
See also [[Wikipedia:Comparison of EDA software]].<br />
<br />
===== Digital logic =====<br />
<br />
Digital logic software are mainly simple educational tools that intended for only designing and simulating logic circuits.<br />
<br />
* {{App|glogic|An educational graphical logic circuit simulator, written in Python.|https://launchpad.net/glogic|{{AUR|glogic}}}}<br />
* {{App|GTKWave|Fully featured GTK+ based wave viewer which reads LXT, LXT2, VZT, FST, and GHW files as well as standard Verilog VCD/EVCD files and allows their viewing.|http://gtkwave.sourceforge.net/|{{Pkg|gtkwave}}}}<br />
* {{App|Logisim|Educational digital logic design and simulation software, written in Java, officially its development has stopped.|https://sourceforge.net/projects/circuit/|{{AUR|logisim}}}}<br />
* {{App|Logisim Evolution|Project which continue the development of the original Logisim with new features, written in Java.|https://github.com/reds-heig/logisim-evolution|{{AUR|logisim-evolution-git}}}}<br />
* {{App|PulseView|Logic analyzer, oscilloscope and MSO GUI.|https://sigrok.org/wiki/PulseView|{{Pkg|pulseview}}}}<br />
* {{App|SmartSim|Simple and beautiful digital logic circuit design and simulation software, mainly target teachers and students, very lightweight and cross platform, GPL licensed, written in Vala.|https://smartsim.org.uk|{{AUR|smartsim-git}}}}<br />
<br />
===== HDL =====<br />
<br />
Also see [[Wikipedia:Hardware description language]].<br />
<br />
* {{App|[[Altera Design Software]]|A set of design tools for Altera's FPGA chips that includes Quartus II and ModelSim-Altera.|https://www.altera.com/products/design-software/overview.html|see [[Altera Design Software]]}}<br />
* {{App|[[Xilinx ISE WebPACK]]|FPGA programmable logic design suit.|http://www.xilinx.com/products/design-tools/ise-design-suite/ise-webpack.html|see [[Xilinx ISE WebPACK]]}}<br />
<br />
===== MCU IDE =====<br />
<br />
* {{App|[[Arduino]]|Arduino prototyping platform SDK.|https://www.arduino.cc/en/Main/Software|{{Pkg|arduino}}}}<br />
<br />
===== Schematic capture editor =====<br />
<br />
* {{App|[[gEDA]]|Full suite and toolkit of Electronic Design Automation tools that are used for electrical circuit design, schematic capture, simulation, prototyping, and production.|http://www.geda-project.org/|{{Pkg|geda-gaf}}}}<br />
* {{App|[[gEDA]] PCB|Interactive printed circuit board editor.|http://pcb.geda-project.org/|{{Pkg|pcb}}}}<br />
* {{App|[[Wikipedia:KiCad|KiCad]]|Software suite for electronic design automation (EDA) that facilitates the design of schematics for electronic circuits and their conversion to PCB (printed circuit board).|http://kicad-pcb.org/|{{Pkg|kicad}}}}<br />
* {{App|[[Wikipedia:Oregano (software)|Oregano]]|Graphical software application for schematic capture and simulation of electrical circuits. The actual simulation is done by the [[Wikipedia:Ngspice|ngspice]] or [[Wikipedia:GNU Circuit Analysis Package|Gnucap]] engines.|https://github.com/drahnr/oregano|{{AUR|oregano}}}}<br />
* {{App|QElectroTech|Application used to draw advanced electrical circuits.|https://qelectrotech.org/|{{AUR|qelectrotech}}}}<br />
* {{App|[[Wikipedia:Quite Universal Circuit Simulator|Qucs]]|Electronics circuit simulator application that gives you the ability to set up a circuit with a graphical user interface and simulate its large-signal, small-signal and noise behaviour.|http://qucs.sourceforge.net/|{{AUR|qucs}}}}<br />
* {{App|[[Wikipedia:ngspice|ngspice]]|Application used to simulate circuits. Open source successor of [[Wikipedia:SPICE|spice3f5]]|http://ngspice.sourceforge.net/|{{Pkg|ngspice}}}}<br />
<br />
=== Telecommunication ===<br />
<br />
* {{App|CupCarbon|A Smart City & IoT Wireless Sensor Network Simulator.|http://cupcarbon.com/}}<br />
* {{App|[[GNU Radio]]|Software development toolkit that provides signal processing blocks to implement software radios.|https://www.gnuradio.org/|{{Pkg|gnuradio}}}}<br />
* {{App|Gqrx|Software defined radio receiver implemented using GNU Radio and the Qt GUI toolkit.|http://gqrx.dk/|{{Pkg|gqrx}}}}<br />
* {{App|Pothos|The Pothos project is a complete data-flow framework for creating topologies of interconnected processing blocks. |https://github.com/pothosware/PothosCore/wiki|{{AUR|pothos}}, {{AUR|pothos-git}}}}<br />
<br />
==== Amateur radio ====<br />
<br />
See the main article: [[Amateur radio#Software list]].<br />
<br />
See also [[Wikipedia:List of software-defined radios]].<br />
<br />
=== Simulation modeling ===<br />
<br />
* {{App|[[Wikipedia:Gephi|gephi]]|Gephi is an open-source network analysis and visualization software package written in Java.|http://gephi.org/|{{Pkg|gephi}}}}<br />
* {{App|golly|Golly is an open source, cross-platform application for exploring Conway's Game of Life and many other types of cellular automata.|http://golly.sourceforge.net/|{{AUR|golly}}}}<br />
* {{App|Netlogo|NetLogo is a multi-agent programmable modeling environment.|http://ccl.northwestern.edu/netlogo/|{{AUR|netlogo}}}}<br />
* {{App|[[Wikipedia:AnyLogic|AnyLogic]]|AnyLogic is a cross-platform proprietary multimethod simulation modeling tool, which is also available for personal use.|https://www.anylogic.com/|{{AUR|anylogic-ple}}, {{AUR|anylogic-university}}, {{AUR|anylogic-professional}}}}<br />
<br />
=== Computer science ===<br />
<br />
==== Artificial intelligence ====<br />
<br />
See also [[Wikipedia:Comparison of deep learning software]].<br />
<br />
* {{App|[[Wikipedia:Fast Artificial Neural Network|Fast Artificial Neural Network]]|Library for developing feedforward Artificial Neural Networks.|http://leenissen.dk/fann/wp/|{{AUR|fann}}}}<br />
* {{App|[[Wikipedia:Mycroft (software)|Mycroft]]|Intelligent personal assistant and knowledge navigator with speech recognition.|https://mycroft.ai/|{{AUR|mycroft-core}}}}<br />
* {{App|[[Wikipedia:Orange (software)|Orange]]|Data visualization, machine learning and data mining toolkit, accessible via visual programming and Python.|https://orange.biolab.si/|{{AUR|python-orange}}}}<br />
* {{App|[[Wikipedia:Torch (machine learning)|Torch]]|Machine learning library, scientific computing framework, and script language based on LuaJIT.|http://torch.ch/|{{AUR|torch7-git}}}}<br />
* {{App|[[Wikipedia:X Neural Switcher|X Neural Switcher]]|Automatic (intelligent) keyboard layout adaption.|https://xneur.ru/|{{AUR|xneur}}, {{AUR|gxneur}}}}</div>Sikmirhttps://wiki.archlinux.org/index.php?title=InterPlanetary_File_System&diff=554925InterPlanetary File System2018-11-12T21:18:45Z<p>Sikmir: Fix link</p>
<hr />
<div>[[Category:File systems]]<br />
[[Category:Peer-to-peer]]<br />
[[Category:Daemons]]<br />
[[ja:IPFS]]<br />
[[ru:IPFS]]<br />
{{Related articles start}}<br />
[[Daemons]]<br />
{{Related articles end}}<br />
<br />
From the [https://github.com/ipfs/ipfs IPFS README.md on GitHub]:<br />
:IPFS (the [[Wikipedia:IPFS|InterPlanetary File System]]) is a new hypermedia distribution protocol, addressed by content and identities. IPFS enables the creation of completely distributed applications. It aims to make the web faster, safer, and more open.<br />
<br />
:IPFS is a distributed file system that seeks to connect all computing devices with the same system of files. In some ways, this is similar to the original aims of the Web, but IPFS is actually more similar to a single BitTorrent swarm exchanging git objects.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{pkg|go-ipfs}} package or the {{AUR|go-ipfs-git}} package.<br />
<br />
To start using IPFS you must first issue<br />
<br />
$ ipfs init<br />
<br />
as a user. This creates a {{ic|~/.ipfs}} directory with all the necessary files in it.<br />
<br />
Now you can start the IPFS daemon:<br />
<br />
$ ipfs daemon<br />
<br />
This starts your node, available via the {{ic|ipfs}} cli, or the web interface on [http://localhost:5001/webui localhost:5001/webui]. Additionally, a local gateway goes up on localhost:8080 (the default port can be changed in {{ic|~/.ipfs/config}}).<br />
<br />
== Using a service to start the daemon ==<br />
<br />
For convenience you can automate the startup of [[IPFS]] daemon using a [[Systemd/User]] service. This ensures that the daemon starts when you log in, and that it is restarted if it crashes.<br />
<br />
{{hc|~/.config/systemd/user/ipfs.service|<nowiki><br />
[Unit]<br />
Description=IPFS daemon<br />
After=network.target<br />
<br />
[Service]<br />
ExecStart=/usr/bin/ipfs daemon<br />
Restart=on-failure<br />
<br />
[Install]<br />
WantedBy=default.target</nowiki>}}<br />
<br />
You can then enable and start the service unit:<br />
<br />
$ systemctl --user enable --now ipfs<br />
<br />
If you want the unit to keep working even after you have logged out, and start before you log in, you can enable lingering:<br />
<br />
# loginctl enable-linger ''username''<br />
<br />
== File sharing ==<br />
<br />
To share a file using IPFS you need the daemon to be running. <br />
<br />
$ ipfs add file<br />
<br />
returns a hash. If someone shared this file via IPFS before, the hash would match that previous upload, making you the second source of the file.<br />
<br />
To retrieve a file via the IPFS hash, use {{ic|ipfs cat}}:<br />
<br />
$ ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme<br />
<br />
You can pipe this into any other application, for example, to watch a video with [[mpv]]:<br />
<br />
$ ipfs cat QmWenbjgZnA6UguLtmUYayS6e7UQM7woB15zuEymSRRMoi | mpv -<br />
<br />
Or you can download the file:<br />
<br />
$ ipfs get QmWenbjgZnA6UguLtmUYayS6e7UQM7woB15zuEymSRRMoi<br />
<br />
There is also an {{AUR|ipget}} utility, which acts like [[wget]] for IPFS. In addition it includes a bootstrap node, so you won't have to have ipfs daemon running or installed in order to use it. To download a file: <br />
<br />
$ ipget QmWenbjgZnA6UguLtmUYayS6e7UQM7woB15zuEymSRRMoi<br />
<br />
You can share both files and folders. Folders should be shared recursively:<br />
<br />
$ ipfs add -r folder<br />
<br />
To view all the files and caches in a folder (if hash is a folder):<br />
<br />
$ ipfs ls QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG<br />
<br />
Every file shared with network is accessible via the IPFS gateway on {{ic|localhost:8080}} like this:<br />
<br />
<nowiki>http://localhost:8080/ipfs/QmWenbjgZnA6UguLtmUYayS6e7UQM7woB15zuEymSRRMoi</nowiki><br />
<br />
There are public gateways, allowing users with no IPFS node running to access files on the network. For example, the official [http://ipfs.io website]:<br />
<br />
http://ipfs.io/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG<br />
<br />
== Simple hosting with name resolution ==<br />
<br />
In IPFS files shared are never deleted, and with any change of a file its hash changes too. This makes such tasks as website hosting difficult, as any changes to a webpage, for example to an {{ic|index.html}}, would result in this webpage having a different hash, and the old webpage would be still accessible with the old hash. It is one of a network's goals to store all the content persistently with full history. IPFS offers a name service you can use to generate persistent caches - ipns. Ipns allows you to bind any hash to your node's unique id, generated at initialization.<br />
You can view your id like this:<br />
<br />
$ ipfs id<br />
<br />
And to bind any hash to it:<br />
<br />
$ ipfs name publish ''HASH''<br />
<br />
This would assign new hash generated by {{ic|ipfs add}} after file change to your node id, and hence make updated version of a folder/file accessible using the same address. <br />
<br />
Note that when using ipns the address would have an ipns prefix instead of ipfs:<br />
<br />
http://localhost:8080/ipns/QmPtMQErTfQMbZTMMpQh65cpk5y7D94WdYJurCeRqvXKmD/<br />
<br />
== See also ==<br />
<br />
* [https://ipfs.io IPFS Homepage]<br />
* [https://github.com/ipfs/website/tree/master/content/docs/examples IPFS Examples]<br />
* [https://github.com/ipfs/awesome-ipfs Awesome IPFS]<br />
* [https://github.com/ipfs/notes/issues/84 IPFS and pacman]</div>Sikmirhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=513654Synchronization and backup programs (Русский)2018-03-14T14:48:50Z<p>Sikmir: Add Mail.ru Cloud</p>
<hr />
<div>[[Category:Data compression and archiving (Русский)]]<br />
[[Category:System recovery (Русский)]]<br />
[[Category:Русский]]<br />
[[de:Backups]]<br />
[[en:Synchronization and backup programs]]<br />
[[ja:バックアッププログラム]]<br />
{{Related articles start (Русский)}}<br />
{{Related|Full system backup with rsync}}<br />
{{Related|Full system backup with tar}}<br />
{{Related|Клонирование диска}}<br />
{{Related|Snapper}}<br />
{{Related articles end}}<br />
{{TranslationStatus (Русский)|Backup programs|2 октября 2015|402619}}<br />
<br />
== Введение ==<br />
<br />
Эта статья содержит информацию о различных программах, предназначенных для резервного архивирования данных. Хорошая практика - использовать регулярные бекапы важной информации, особенно конфигурационных файлов ({{ic|/etc/*}}) и локальной базы данных pacman'а (обычно {{ic|/var/lib/pacman/local/*}}).<br />
<br />
Несколько слов для окончаня введения: перед тем, как начать пробовать эти программы, подумайте о том, что именно вам нужно; например, решите следущие вопросы:<br />
* Какой носитель данных у меня есть для хранения бекапов?<br />
** cd / dvd<br />
** удаленный сервер (По какому доступу? Ssh? Могу ли я устанавливать какие-нибудь программы на нем (необходимые, например, для решений, основанных на rsync)?)<br />
** внежний жесткий диск<br />
* Как часто я собираюсь делать бекап?<br />
** ежедневно?<br />
** еженедельно?<br />
** еще реже?<br />
* Какие преимущества я ожидаю от выбранного способа архивирования данных?<br />
** сжатие? (по каким алгоритмам?)<br />
** кодирование? (gpg или что-то более простое?)<br />
* Самое главное: как я планирую восстанавливать бекапы когда это понадобится?<br />
<br />
Ладно, с этим разобрались, давайте посмотрим варианты!<br />
<br />
== Нарастающие бекапы (Incremental backups) ==<br />
<br />
Основная особенность этого способа резервного копирования состоит в том, что в начале сохраняется полная копия (зеркало) данных, которые вы хотите резервировать. А далее сохраняется только то, что было изменено, так называемые различия('diffs'). <br />
Если вы хотите часто делать бекапы, это - лучший вариант. Обычно файлы резервных копий не сжимаются и не шифруются, по этому всегда можно быстро получить рабочую копию данных. Но такой подход затрудняет записи архива на CD / DVD ..<br />
<br />
=== Резервное копирование Rsync-типа ===<br />
<br />
Основной характеристикой данного типа резервного копирования, является то, что он сохраняет копию каталога, чтобы сохранить резервную копию в традиционном образе "зеркала".<br />
<br />
Обознеаченные программы Rsync-типа также делают снимок резервного копирования путем сохранения файлов, которые описывают, какое содержимое файлов и папок изменено с момента последнего резервного копирования (так называемые 'diffs'). Следовательно они по существу инкрементальные (нарастающие), но обычно они в своём арсенале не имеют сжатия или шифрования. С другой стороны, рабочая копия сразу же доступна, - нет нееобходимости в распаковке/расшифровании. Камень предкновения програм rsync-типа это то, что они не могут легко записать и восстановить с CD или DVD.<br />
<br />
==== Интерфейс командной строки (Консоль) ====<br />
* {{App|[[rsync]]|Программа передачи данных, предназначенная для синхронизации файлов на удалённом доступе. <br />
** Rsync почти всегда создает зеркало исходных данных.<br />
** It is possible to restore a full backup before the most recent backup if hardlinks are allowed in the backup file system. See [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup Back up your data with rsync] for more information.<br />
** If hard links are not allowed, it is impossible to restore a full backup before the most recent backup (but you can use --backup to keep old versions of the files).<br />
** Входит в стандартный набор пакетов всех дистрибутивов Linux.<br />
** Может работать через SSH (порт 22) или родной протокол rsync (порт 873).<br />
** Доступна версия под Win32.<br />
|http://rsync.samba.org/|{{Pkg|rsync}}}}<br />
<br />
* {{App|[[Wikipedia:Rsync#Variations|rdiff-backup]]|Утилита для локального/удалённого зеркального и инкрементного бекапа.<br />
** Сохраняет последнюю резервную копию, как обычные файлы.<br />
** Чтобы вернуться к более старым версиям, примените Diff-файлы, чтобы создать старые версии.<br />
** Создаёт покрупичные инкрементальные (дельта резервное копирование) бекапы, - сохраняет только изменения в файле; не будет создавать новую копию файла при изменении.<br />
** Доступна версия Win32.<br />
|http://www.nongnu.org/rdiff-backup/|{{Pkg|rdiff-backup}}}}<br />
<br />
* {{App|[[rsnapshot]]| Утилита удалённого снимка файловой системы.<br />
** Не хранит "diffs", вместо этого он копирует целые файлы, если они изменились.<br />
** Создает жесткие ссылки между серией резервируемых путей (снимков).<br />
** It is differential in that the size of the backup is only the original backup size plus the size of all files that have changed since the last backup.<br />
** Destination filesystem must support hard links.<br />
** Доступна версия Win32.<br />
|http://www.rsnapshot.org/|{{Pkg|rsnapshot}}}}<br />
<br />
* {{App|SafeKeep|Клиент/сервер система резервного копирования, которая использует rdiff-бекап.<br />
** Integrates with Linux LVM and databases to create consistent backups.<br />
** Bandwidth throttling.<br />
|http://safekeep.sourceforge.net/|{{AUR|safekeep}}}}<br />
<br />
* {{App|Link-Backup|Утилита похожая на основу Rsync-скриптов, но не использует Rsync. ПРИМЕЧАНИЕ: не разрабатывается с 2008. <br />
** Creates hard links between a series of backed-up trees (snapshots).<br />
** Intelligently handles renames, moves, and duplicate files without additional storage or transfer.<br />
** The backup directory contains {{ic|.catalog}}, a catalog of all unique file instances; backup trees hard-link to this catalog.<br />
** Transfer occurs over standard I/O locally or remotely between a client and server instance of this script.<br />
** It copies itself to the server; it does not need to be installed on the server.<br />
** Requires SSH for remote backups.<br />
** It resumes stopped backups; it can even be told to run for an arbitrary number of minutes.<br />
|http://www.scottlu.com/Content/Link-Backup.html|{{AUR|link-backup}}}}<br />
<br />
* {{App|[[Wikipedia:Unison (file synchronizer)|Unison]]|A program that synchronizes files between two machines over network (LAN or Inet) using a smart diff method + rsync. Allows the user to interactively choose which changes to push, pull, or merge.|http://www.cis.upenn.edu/~bcpierce/unison/|{{Pkg|unison}}}}<br />
<br />
* {{App|rsync-snapshot.sh|Another rsync shellscript with smart rotation (non-linear distribution) of backups. Integrity protection, Quotas, Rules and many more features.|http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/}}<br />
<br />
* {{App|osync.sh|Osync is a robust bidirectional file synchronization tool written in bash and based on rsync. It works on local and / or remote directories via ssh tunnels. It's mainly targeted to be launched as cron task, with features turned towards automation among:<br />
** Execution time control<br />
** Fault tolerance with possibility to resume on error<br />
** Soft deletion, on-conflict backups with automatic cleanup<br />
** Alert notifications via email<br />
** Before and /or after time controlled local and / or remote command execution<br />
** File monitor mode<br />
|http://www.netpower.fr/osync}}<br />
<br />
* {{App|gutbackup|The simplest [[rsync]] wrapper for backup Linux system.|https://github.com/gutenye/gutbackup|{{AUR|gutbackup}}}}<br />
<br />
* {{App|trinkup|A 60-lines bash script which holds specified amount of incremental backups using [[rsync]] and {{ic|cp -al}} to minimize amount of disk operations.|https://gist.github.com/ei-grad/7610406/raw/trinkup|{{AUR|trinkup}}{{Broken package link (Русский)|{{aur-mirror (Русский)|trinkup}}}}}}<br />
<br />
* {{App|keepconf|Is a wrapper over [[rsync]] and [[git]], easy and simple to use|https://github.com/rfrail3/keepconf}}<br />
<br />
==== С графическим интерфейсом ====<br />
* {{App|[[Wikipedia:ru:Areca Backup|Areca Backup]]|Простое и надёжное решение для использования резервного копирования Linux и Windows.<br />
** Написана на Java.<br />
** Прежде всего основана на архивном бекапе (zip), но может делать файл-бекапы.<br />
** Поддерживается резервное копирование Дельта (сохраняет только изменения).<br />
|http://areca.sourceforge.net/|{{AUR|areca}}}}<br />
<br />
* {{App|[[BackupPC]]|Высокопроизводительная, корпоративного класса система, для резервного копирования Unix, Linux, Windows, и Mac OS X настольных ПК и ноутбуков на удаленный сервер.<br />
** Дедупликация: идентичные файлы на нескольких резервных копиях одних и тех же или разных компьютерах хранятся только один раз, в результате значительная экономия дискового пространства и дискового ввода / вывода.<br />
** Optional compression support further reducing disk storage.<br />
** Не требуется программа для клиентской части.<br />
** Простой, но мощный веб-интерфейс.<br />
|http://backuppc.sourceforge.net/index.html|{{Pkg|backuppc}}}}<br />
<br />
* {{App|[[Back In Time]]|Простой инструмент резервного копирования для Linux вдохновленный проектами [[Wikipedia:FlyBack|FlyBack]] и [https://wiki.ubuntu.com/TimeVault/ TimeVault].<br />
** Создает жесткие ссылки между серий резервируемых деревьев (снимки).<br />
** На самом деле это всего лишь оболочка для {{ic|rsync}}, {{ic|diff}}, {{ic|cp}}.<br />
** Новый снимок создается, только если что-то изменилось с момента последнего снимка.<br />
|http://backintime.le-web.org/|{{AUR|backintime}} или в виде пакета prebuild из [http://arch.coderkun.de/ coderkun's repo]}}<br />
<br />
* {{App|[[Wikipedia:FlyBack|FlyBack]]|клон Apple'овской [[Wikipedia:ru:Time Machine (программа)|программы Time Machine]], резервного копирования для Mac OS X.|http://www.flyback-project.org/|{{AUR|flyback}}{{Broken package link (Русский)|{{aur-mirror (Русский)|flyback}}}}}}<br />
<br />
* {{App|Free File Sync|Free File Sync помогает синхронизировать файлы и папки для синхронизации Windows, Linux и Mac OS X. It is designed to save your time setting up and running backup jobs while having nice visual feedback along the way.<br />
|http://freefilesync.sourceforge.net/|{{AUR|freefilesync}}}}<br />
<br />
* {{App|Grsync|GTK+ интерфейс rsync|http://www.opbyte.it/grsync/|{{Pkg|grsync}}}}<br />
<br />
* {{App|[[Wikipedia:LuckyBackup|luckyBackup]]|Легкая программа для резервного копирования и синхронизации файлов.<br />
** Написана на Qt и C++.<br />
** Включает синхронизацию, резервное копирование (с опциями включить/исключить) и возможность восстановления.<br />
** Может делать резервные копии удаленных соединений, резервное копирование по графику.<br />
** Режим командной строки.<br />
|http://luckybackup.sourceforge.net/index.html|{{AUR|luckybackup}}}}<br />
<br />
* {{App|syncBackup|Интерфейс для rsync. Утилита синхронизации и резервного копирования данных. Позволяет быстро синхронизировать содержимое папок, выборочно (по маске) удалять файлы. Возможен запуск из командной строки.<br />
Можно задействовать сохранение резервных копий изменяемых и удаляемых файлов.<br />
|http://www.darhon.com/syncbackup|{{AUR|syncbackup}}{{Broken package link (Русский)|{{aur-mirror (Русский)|syncbackup}}}}}}<br />
<br />
* {{App|TimeShift|TimeShift это утилита системного восстановления, которая принимает дополнительные снимки системы с помощью ''rsync'' и жёстких ссылок. Эти снимки могут быть восстановлены на более поздний срок, чтобы отменить все изменения, внесенные в систему после создания снимка. <br />
Снимки могут быть сделаны вручную или через равные промежутки времени с использованием запланированных заданий.<br />
|https://launchpad.net/timeshift|{{AUR|timeshift}}}}<br />
<br />
=== Другие способы бэкапа ===<br />
<br />
Большинство других приложений резервного копирования, как правило, для создания (больших) архивных файлов и (конечно) для отслеживания содержимого архива. В создании {{ic|.tar.bz2}} или {{ic|.tar.gz}} архивов, есть преимущество, что вы можете извлечь резервные копии только с tar/bzip2/gzip, так что вам не нужно иметь программу для резервного копирования.<br />
<br />
==== Консоль ====<br />
* {{App|Arch Backup|Тривиальный скрипт резервного копирования с простой настройкой.<br />
** Настраиваемый метод сжатия.<br />
** Множественные цели резервного копирования.<br />
|http://code.google.com/p/archlinux-stuff/|{{AUR|arch-backup}}}}<br />
<br />
* {{App|hdup|Очень простой инструмент резервного копирования, с использованием командной строки.<br />
** Создаёт tar.gz или tar.bz2 архивы.<br />
** Поддержка шифрования gpg.<br />
** Поддержка SSH.<br />
** Множественные цели резервного копирования.<br />
|http://miek.nl/projects/hdup2/ {{Dead link|2016|7|11}}|{{AUR|hdup}}}}<br />
<br />
* {{App|rdup|Платформа для создания резервных копий, снабжённая скриптами для облегченного резервного копирования и шифрования, сжатия, передачи и упаковки для других утилит в истинном Unix-пути.<br />
** Создание tar.gz архивов или копий rsync-типа.<br />
** Шифрование (gpg, blowfish и другие); относится также и к копированию rsync-типа.<br />
** Сжатие (также доступно для копий rsync-типа).<br />
|http://miek.nl/projects/rdup {{Dead link|2016|7|11}}|{{AUR|rdup}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over FTP, SSH, rsync, WebDAV, WebDAVs, HSi and Amazon S3 or local filesystem.<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Wikipedia:DAR (Disk Archiver)|DAR]]|A full-featured command-line backup tool, short for Disk ARchive.<br />
** It uses its own format for archives (so you need to have it around when you want to restore).<br />
** Supports splitting backups into more files by size.<br />
** Makefile-type config files, some custom scripts are available along with it.<br />
** Supports basic encryption.<br />
** Automatic backup using [[cron]] is possible with {{AUR|sarab}}{{Broken package link (Русский)|{{aur-mirror (Русский)|sarab}}}}.<br />
|http://dar.linux.free.fr/|{{AUR|dar}} {{AUR|kdar}}{{Broken package link (Русский)|{{aur-mirror (Русский)|kdar}}}} (frontend)}}<br />
<br />
* {{App|Manent|An algorithmically strong backup and archival program. NOTE: no upstream activity since 2009.<br />
** Efficient backup to anything that looks like a storage.<br />
** Works well over a slow and unreliable network.<br />
** Offers online access to the contents of the backup.<br />
** Backed up storage is completely encrypted.<br />
** Several computers can use the same storage for backup, automatically sharing data.<br />
** Not reliant on timestamps of the remote system to detect changes.<br />
** Cross-platform support for Unicode file names.<br />
|http://code.google.com/p/manent/|{{AUR|manent}}{{Broken package link (Русский)|{{aur-mirror (Русский)|manent}}}}}}<br />
<br />
* {{App|btar|tar-compatible archiver<br />
** Fast archive creation (multicore compression or ciphering)<br />
** Arbitrary chain of compression/ciphers (calls any compression/ciphering programs)<br />
** Indexed archive retrieval or listing<br />
** Redundancy<br />
** Serialization through pipes (and only one file per backup)<br />
** Can be extracted or checked with gnutar<br />
** Differential backups of multiple levels<br />
** Optional encoding of big files with ''rsync''-differences<br />
|http://viric.name/cgi-bin/btar|{{AUR|btar}}{{Broken package link (Русский)|{{aur-mirror (Русский)|btar}}}}}}<br />
<br />
* {{App|burp|a network backup and restore program<br />
** Uses librsync in order to save network traffic and to save on the amount of space that is used by each backup. <br />
** It also uses VSS (Volume Shadow Copy Service) to make snapshots when backing up Windows computers.<br />
** deduplication<br />
** SSL/TLS connections<br />
** automation the process of generating SSL certificates<br />
** data encryption<br />
** security models [http://burp.grke.org/txt/security-models.txt]<br />
|http://burp.grke.org|{{AUR|burp-backup}}}}<br />
<br />
* {{App|obnam|Easy, secure backup program<br />
** Snapshot backups. Every generation looks like a complete snapshot.<br />
** Data chunk de-duplication, across files, and backup generations. This results in incremental backups.<br />
** Optionally encrypted backups, using GnuPG.<br />
** FUSE mountable backup repository.<br />
|http://liw.fi/obnam/|{{AUR|obnam}}}}<br />
<br />
* {{App|System Tar & Restore|Backup and Restore your system using tar or Transfer it with rsync<br />
** CLI and Dialog interfaces<br />
** Easy backup and restore wizards<br />
** Creates ''.tar.gz'', ''.tar.bz2'', ''.tar.xz'' or ''.tar'' archives<br />
** Supports openssl / gpg encryption<br />
** Uses rsync to transfer a running system<br />
** Supports Grub2 and Syslinux<br />
|https://github.com/tritonas00/system-tar-and-restore|{{AUR|system-tar-and-restore}}}}<br />
<br />
* {{App|Packrat|A simple, modular backup system using [[Wikipedia:ru:DAR (программное обеспечение)|DAR]]<br />
** Full or incremental backups stored locally, on a remote system via [[Secure Shell (Русский)|SSH]], or on Amazon S3<br />
|http://www.zeroflux.org/projects|{{AUR|packrat}}{{Broken package link (Русский)|{{aur-mirror (Русский)|packrat}}}}}}<br />
<br />
* {{App|Attic|A deduplicating backup program for efficient and secure backups.<br />
** Space efficient storage: Variable block size deduplication is used to reduce the number of bytes stored by detecting redundant data.<br />
** Optional data encryption: All data can be protected using 256-bit AES encryption and data integrity and authenticity is verified using HMAC-SHA256.<br />
** Off-site backups: Any data can be stored on any remote host accessible over SSH (as long as Attic is installed).<br />
** Backups mountable as filesystems: Backup archives are mountable as userspace filesystems for easy backup verification and restores.<br />
|https://github.com/jborg/attic/|{{AUR|attic}}{{Broken package link (Русский)|package not found}}}}<br />
<br />
* {{App|Snebu|File-level deduplicating snapshot backup with SQLite3 catalog db.<br />
** Functionally similar to rsync/snapshot style backups, however does not use hardlinks in the filesystem.<br />
** Backed up files are stored in lzop-compatible files, in the designated "vault" directory.<br />
** Metadata stored in SQLite3 db, linking backup sets to file metadata to compressed files in the vault.<br />
** Supports arbitrary retention schedules (such as daily/weekly/monthly) which can be individually expired<br />
|http://www.snebu.com|{{AUR|snebu}}{{Broken package link (Русский)|{{aur-mirror (Русский)|snebu}}}}}}<br />
<br />
* {{App|ZBackup|A globally-deduplicating backup tool, based on the ideas found in ''rsync''.<br />
** Parallel LZMA or LZO compression of the stored data<br />
** Built-in AES encryption of the stored data<br />
** Possibility to delete old backup data<br />
** Use of a 64-bit rolling hash, keeping the amount of soft collisions to zero<br />
** Repository consists of immutable files. No existing files are ever modified<br />
** Possibility to exchange data between repos without recompression<br />
|http://zbackup.org/|{{AUR|zbackup}}}}<br />
<br />
==== Графические ====<br />
* {{App|Backerupper|Простая программа для резервного копирования выбранных каталогов в локальной сети. Главная задача, резервное копирование персональных данных пользователя.<br />
** Создаёт {{ic|.tar.gz}} архивы.<br />
** Настраиваемая частота резервного копирования, время резервного копирования и 'max' копии.<br />
|http://sourceforge.net/projects/backerupper/|{{AUR|backerupper}}{{Broken package link (Русский)|{{aur-mirror (Русский)|backerupper}}}}}}<br />
<br />
* {{App|[[Duplicity|Déjà Dup]]|Простая [[GTK+ (Русский)|GTK+]] программа резервного копирования. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses ''duplicity'' as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Synkron|Инструмент синхронизации данных каталогов.<br />
** Syncs multiple folders.<br />
** Can exclude files from sync based on wildcards.<br />
** Restores files.<br />
** Cross-platform support.<br />
|http://synkron.sourceforge.net/|{{AUR|synkron}}}}<br />
<br />
==== Консольные и графические ====<br />
<br />
* {{App|[[Wikipedia:ru:Bacula|Bacula]]|кроссплатформенное клиент-серверное программное обеспечение, позволяющее управлять резервным копированием, восстановлением, и проверкой данных по сети для компьютеров и операционных систем различных типов.<br />
** Can be run on a single machine or used to back up an entire network.<br />
** Supports Linux, UNIX, Windows, and Mac OS X backup clients.<br />
** Supports a variety of backup devices, including tape libraries.<br />
** Can be used to backup to multiple removable storage devices.<br />
** Provides or supports command line console, GUI, and web interfaces.<br />
** The back-end is a catalog stored in MySQL, PostgreSQL, or SQLite.<br />
** Provides extensive documentation.<br />
** Appears to be the most downloaded open source backup solution<br />
|http://www.bacula.org|{{AUR|bacula-common}}}}<br />
<br />
== Облачные сервисы резервного копирования ==<br />
<br />
Смотрите также [[Wikipedia:Comparison of online backup services]].<br />
<br />
* {{App|[[Wikipedia:Barracuda_Networks#Products|Copy]]|A fair solution to shared folders.<br />
** Бесплатно 15GB.<br />
** Shared folders size are split between people.<br />
** Daemon to sync files between the cloud and the computer.<br />
** Almost any platform supported.<br />
** Предложено шифрование AES-256.<br />
|https://www.copy.com/home/|{{AUR|copy-agent}}{{Broken package link (Русский)|{{aur-mirror (Русский)|copy-agent}}}}}}<br />
<br />
* {{App|[[CrashPlan]]|Онлайн/не зависящее от сайта, резервное копирование.<br />
** Неограниченное онлайн-пространство за очень разумную цену.<br />
** Автоматические и дополнительные резервные копии нескольким адресатам.<br />
** Интуитивный графический интерфейс.<br />
** Предложено шифрование и де-дублирование.<br />
** Программное обеспечение является бесплатным для локального применения.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|Популярный сервис обмена файлами.<br />
** Демон контролирует указанный каталог, и загружает дополнительные изменения в dropbox.com. <br />
** Изменения автоматически отображаются на ваших других компьютерах. <br />
** Включает в себя совместное использование файлов и общественных каталогов. <br />
** Вы можете восстановить удаленные файлы. <br />
** Написанные сообществом дополнения. <br />
** На бесплатном аккаунте предоставлено 2 Гб.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|Хранилище файлов и сервис синхронизации, предоставляемый Google.<br />
** Обеспечивает облачное хранилище, совместное использование и совместное редактирование файлов.<br />
** Доступно несколько клиентов.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (бесплатный), {{AUR|drive}} (бесплатный), {{AUR|insync}} (non-free)}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|Интерактивный инструмент резервного копирования, который хранит свои данные в Amazon S3 или Rackspace Cloud Files.<br />
** Файл-расширение для GNOME.<br />
** Доступны только платные варианты.<br />
|http://www.jungledisk.com/|{{AUR|nautilus-jungledisk}}{{Broken package link (Русский)|{{aur-mirror (Русский)|nautilus-jungledisk}}}}}}<br />
<br />
* {{App|[[Wikipedia:Облако_Mail.Ru|Облако Mail.Ru]]|Облачное хранилище данных российской компании Mail.Ru Group.<br />
|https://cloud.mail.ru/|{{AUR|mailru-cloud}}}}<br />
<br />
* {{App|[[Wikipedia:ru:Mega|MEGA]]|Преемник сервиса обмена данными MegaUpload.<br />
** На бесплатном аккаунте предоставлено 50GB, воспользуйтесь платным чтобы получить больше места.<br />
** Шифрование и де-дубликация данных.<br />
** Обычный доступ через веб-интерфейс, но существуют и другие инструменты.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse}}{{Broken package link (Русский)|{{aur-mirror (Русский)|megafuse}}}}}}<br />
<br />
* {{App|Nutstore|Облачный сервис, который позволяет синхронизировать и обмениваться файлами повсюду.<br />
** Multiple file folders sync.<br />
** Сервис для Китайских пользователей.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Доступны бесплатные и платные верси.<br />
** Бесплатный аккаунт на 2GB.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak}}{{Broken package link (Русский)|{{aur-mirror (Русский)|spideroak}}}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Обеспечивает единый доступ к многочисленным сервисам облачных систем хранения данных, а также к собственному хранилищу.<br />
** Доступны бесплатные и платные версии.<br />
** Бесплатный аккаунт имеет 5 Гб и позволяет получить доступ до трех других облачных систем хранения данных.<br />
** Поддержка локальных каталогов через fuse, а так же через веб-доступ.<br />
** Поддерживает множество облачных сервисов хранения, таких как Box, Dropbox, Google Drive, Onedrive, и другие.<br />
|http://storagemadeeasy.com/|{{AUR|smestorage}}{{Broken package link (Русский)|{{aur-mirror (Русский)|smestorage}}}}}}<br />
<br />
* {{App|[[Wikipedia:Tahoe-LAFS|Tahoe-LAFS]]|Tahoe Least-Authority Filesystem is a free and open, secure, decentralized, fault-tolerant, peer-to-peer distributed data store and distributed file system.<br />
|https://tahoe-lafs.org/|{{AUR|tahoe-lafs}}}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|Безопасный онлайн-сервис резервного копирования для BSD, Linux, OS X, Solaris и Windows (через Cygwin).<br />
** Сжатые, зашифрованные резервные копии на серверах Amazon S3.<br />
** Автоматизация с помощью [[cron]].<br />
** Инкрементный бэкап.<br />
** Бэкап любых файлов и каталогов.<br />
** Клиент только в командной строке.<br />
** Вы платите только за использование (пропускной способности и места хранения). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Универсальный онлайн бекап.<br />
** Несколько устройства резервного копирования.<br />
** Онлайн синхронизация файлов. <br />
** Резервное копирование в режиме реального времени. <br />
** Резервное копирование и доступ с мобильных устройств. <br />
** Дистанционное Управление. <br />
** Нет графического интерфейса для Linux, на основе командной строки. Сценарий оболочки можно сделать проще используя<br />
|https://www.idrive.com/|{{AUR|idevsutil}}{{Broken package link (Русский)|{{aur-mirror (Русский)|idevsutil}}}}, {{AUR|idrive-wrapper}}{{Broken package link (Русский)|{{aur-mirror (Русский)|idrive-wrapper}}}}}}<br />
<br />
* {{App|CloudBacko|Корпоративная утилита облачного резервирования для Linux, Mac и Windows.<br />
** Закрытый код. Бесплатная, доступны версии Lite и Pro.<br />
** Написана на Java.<br />
** Зашифрованное резервное копирование на несколько облачных направлений. <br />
** Поддержка нескольких облачных направлений объединеных в один пул хранения.<br />
** Не требует установки в бесплатной версии.<br />
** Графический интерфейс для Linux в версии Pro.<br />
** В версии Pro доступно резервное копирование виртуальной машины.<br />
|http://www.cloudbacko.com/}}<br />
<br />
== Cooperative storage cloud backups ==<br />
<br />
A [[Wikipedia:Cooperative_storage_cloud|cooperative storage cloud]] is a decentralized model of networked online storage where data is stored on multiple computers, hosted by the participants cooperating in the cloud. <br />
<br />
* {{App|[http://www.symform.com Symform]| A peer-to-peer cloud backup service.<br />
** Unlimited free backup in exchange for 2:1 storage space contribution with an always-connected device (at least 80% uptime).<br />
** [http://www.symform.com/our-solutions/pricing/ Payment options exist].<br />
** First 10GB of backup storage is free (no contribution needed).<br />
** In addition to paid support, support plans in exchange for extended contribution (300GB+) exist.<br />
** Automatic and incremental backups.<br />
** Data is encrypted before leaving the computer, though keys are also stored on the Symform's servers.[http://virtualserverguy.com/blog/2012/12/19/symform-security-analysis]<br />
** Customizable limits for bandwidth consumption.<br />
** Ability to have a local copy ("Hot Copy") of the backed up data on a different disk or computer.<br />
** Ability to have synchronized folders between nodes (Dropbox-like).<br />
** Closed source, using mono. Windows clients available.<br />
|http://www.symform.com/|{{AUR|symform}}{{Broken package link (Русский)|{{aur-mirror (Русский)|symform}}}}}}<br />
<br />
== Non-incremental backups ==<br />
Another type of backups are those used in case of a disaster. These include application that allow easy backup of entire filesystems and recovery in case of failure, usually in the form of a Live CD or USB drive. The contains complete system images from one or more specific points in time and are frequently used by to record known good configurations.<br />
<br />
* {{App|Q7Z|P7Zip GUI for Linux, which attempts to simplify data compression and backup. It can create the following archive types: 7z, BZip2, Zip, GZip, Tar.<br />
** Updates existing archives quickly.<br />
** Backup multiple folders to a storage location.<br />
** Create or extract protected archives.<br />
** Lessen effort by using archiving profiles and lists.<br />
|http://k7z.sourceforge.net/|{{AUR|q7z}}}}<br />
<br />
* {{App|[[Partclone]]|A tool that can be used to back up and restore a partition while considering only used blocks.<br />
** Supports ext2, ext3, hfs+, reiser3.5, reiser3.6, reiser4, ext4 and btrfs.<br />
** Supports compression.<br />
|http://partclone.org/|{{Pkg|partclone}}}}<br />
<br />
* {{App|[[Wikipedia:Redo Backup and Recovery|Redo Backup and Recovery]]|A backup and disaster recovery application that runs from a bootable Linux CD image.<br />
** Is capable of bare-metal backup and recovery of disk partitions.<br />
** Uses [http://www.xpud.org/ xPUD] and [[Partclone]] for the backend.<br />
|http://www.redobackup.org/}}<br />
<br />
* {{App|[[Wikipedia:Clonezilla|Clonezilla]]|A disaster recovery, disk cloning, disk imaging and deployment solution.<br />
** Boots from live CD, USB flash drive, or PXE server.<br />
** Supports ext2, ext3, ext4, reiserfs, reiser4, xfs, jfs, btrfs FAT32, NTFS, HFS+ and others.<br />
** Uses Partclone (default), Partimage (optional), ntfsclone (optional), or dd to image or clone a partition.<br />
** Multicasting server to restore to many machines at once.<br />
|http://clonezilla.org/|{{Pkg|clonezilla}}}}<br />
<br />
* {{App|[[Wikipedia:Partimage|Partimage]]|A disk cloning utility for Linux/UNIX environments.<br />
** Has a Live CD.<br />
** Supports the most popular filesystems on Linux, Windows and Mac OS.<br />
** Compression.<br />
** Saving to multiple CDs or DVDs or across a network using Samba/NFS.<br />
|http://www.partimage.org/Main_Page|{{Pkg|partimage}}}}<br />
<br />
* {{App|FSArchiver|A safe and flexible file-system backup and deployment tool<br />
** Support for basic file attributes (permissions, owner, ...).<br />
** Support for multiple file-systems per archive.<br />
** Support for extended attributes (they are used by SELinux).<br />
** Support the basic file-system attributes (label, uuid, block-size) for all linux file-systems.<br />
** Support for [http://www.fsarchiver.org/Cloning-ntfs ntfs filesystems] (ability to create flexible clones of a Windows partitions).<br />
** Checksumming of everything which is written in the archive (headers, data blocks, whole files).<br />
** Ability to restore an archive which is corrupt (it will just skip the current file).<br />
** Multi-threaded lzo, gzip, bzip2, lzma compression.<br />
** Support for splitting large archives into several files with a fixed maximum size.<br />
** Encryption of the archive using a password. Based on blowfish from libcrypto from [[OpenSSL]].<br />
** Support backup of a mounted root filesystem (-A option).<br />
|http://www.fsarchiver.org/Main_Page|{{Pkg|fsarchiver}}}}<br />
<br />
* {{App|[[Wikipedia:Mondo Rescue|Mondo Rescue]]|A disaster recovery solution to create backup media that can be used to redeploy the damaged system.<br />
** Image-based backups, supporting Linux/Windows.<br />
** Compression rate is adjustable.<br />
** Can backup live systems (without having to halt it).<br />
** Can split image over many files.<br />
** Supports booting to a Live CD to perform a full restore.<br />
** Can backup/restore over NFS, from CDs, tape drives and and other media.<br />
** Can verify backups.<br />
|http://www.mondorescue.org/|{{AUR|mondo}}}}<br />
<br />
== Versioning systems ==<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
=== Version control systems ===<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|http://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|http://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|http://mercurial.selenic.com/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Wikipedia:Bazaar (software)|Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|http://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|[[Wikipedia:Darcs|Darcs]]|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
=== VCS-based backups ===<br />
<br />
* {{App|Gibak|A backup system based on [[Git]].<br />
** Supports binary diffs.<br />
** Uses all of Git's features (such as {{ic|.gitignore}} for filtering files).<br />
** Uses Git's hook system to save information that Git does not (permissions, mtime, empty directories, etc).<br />
|https://github.com/pangloss/gibak|{{AUR|gibak}}{{Broken package link (Русский)|{{aur-mirror (Русский)|gibak}}}}}}<br />
* {{App|bup|A fledgling Git-based backup solution written in [[Python (Русский)|python]] and C.<br />
** Uses a rolling checksum algorithm (similar to ''rsync'') to split large files into chunks.<br />
** Can back up directly to a remote bup server.<br />
** Has an improved index format to allow you to track many files.<br />
|https://github.com/bup/bup|{{Pkg|bup}} {{AUR|bup-git}}}}<br />
* {{App|ColdStorage|Another backup tool using Git at its core, written in [[Qt (Русский)|Qt]].|http://gitorious.org/coldstorage|{{AUR|coldstorage-git}}{{Broken package link (Русский)|{{aur-mirror (Русский)|coldstorage-git}}}}}}<br />
<br />
== Смотрите также ==<br />
<br />
* [http://habrahabr.ru/company/centosadmin/blog/220555/ Краткий обзор open source средств резервного копирования]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]</div>Sikmirhttps://wiki.archlinux.org/index.php?title=Synchronization_and_backup_programs&diff=513652Synchronization and backup programs2018-03-14T14:42:43Z<p>Sikmir: Add Mail.ru Cloud</p>
<hr />
<div>[[Category:Data compression and archiving]]<br />
[[Category:System recovery]]<br />
[[de:Backups]]<br />
[[ja:バックアッププログラム]]<br />
[[ru:Backup programs]]<br />
{{Related articles start}}<br />
{{Related|System backup}}<br />
{{Related|Disk cloning}}<br />
{{Related|List of applications#File sharing}}<br />
{{Related|System maintenance#Backup}}<br />
{{Related|Dotfiles#Version control}}<br />
{{Related|File recovery}}<br />
{{Related articles end}}<br />
<br />
This page lists and compares applications that synchronize data between two or more locations, and those that build on top of such functionality to make incremental copies of important data for backup purposes. Because of their relationship, the two groups share several traits that justify describing them in the same article.<br />
<br />
== Backup overview ==<br />
<br />
Having backups of important data is a necessary measure to take, since human and machine processing errors are very likely to generate corruption as time passes, and also the physical media where the data is stored is inevitably destined to fail. In order to choose the best program for one's own needs, the following aspects should be considered:<br />
<br />
* The type of backup medium that is going to store the data, e.g. CD, DVD, remote server, external hard drive, etc.<br />
* The planned frequency of backups, e.g. daily, weekly, monthly, etc.<br />
* The features expected from the backup solution, e.g. compression, encryption, handles renames, etc.<br />
* The planned method to restore backups if needed.<br />
<br />
== Data synchronization ==<br />
<br />
These applications simply keep directories synchronized between multiple locations/machines, in a "mirror" fashion. Nonetheless, most of them still allow storing and reverting to old revisions of modified or deleted files.<br />
<br />
See also [[Wikipedia:Comparison of file synchronization software]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the ArchWiki article or the official website.<br />
* '''Installation''': a link to the package.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over the network.<br />
* '''FS metadata''': file system permissions and attributes are synchronized.<br />
* '''Resumable''': the synchronization can be resumed if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice. It typically means that a checksum of files or its chunks is computed.<br />
* '''Version control''': the old version of files are backed up ('''reverse incremental backup''').<br />
* '''Change propagation''': specifies in how many directions changes can be propagated.<br />
** ''unidirectional'' means one-way synchronization of two locations,<br />
** ''bidirectional'' means two-way synchronization of two locations and<br />
** ''multidirectional'' means full synchronization of more than two locations.<br />
* '''Conflict resolution''': the application handles file conflicts, either automatically or interactively, i.e. it does not silently discard conflicting files. This attribute does not apply to applications that only propagate changes in one direction.<br />
* '''FS monitoring''': the application listens to file system events to trigger the synchronization.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''License''': the license of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Resumable<br />
! Handles renames<br />
! Version control<br />
! Change propagation<br />
! Conflict resolution<br />
! FS monitoring<br />
! CLI<br />
! Other interfaces<br />
! License<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [[Resilio Sync]]<br />
| {{aur|rslsync}}<br />
| ? (closed source)<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| Proprietary freemium<br />
| FreeBSD, Windows, macOS, Android, iOS, Windows Phone, Amazon Kindle Fire<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [https://www.freefilesync.org/ FreeFileSync]<br />
| {{AUR|freefilesync}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| {{G|SFTP [http://www.freefilesync.org/faq.php#features]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://www.freefilesync.org/faq.php#features]}}<br />
| {{G|1=Yes [http://www.freefilesync.org/manual.php?topic=versioning]}}<br />
|'''uni'''directional / '''multi'''directional<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPL<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://git-annex.branchable.com/ git-annex]<br />
| {{Pkg|git-annex}}<br />
| Haskell, git<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| {{G|rsync [http://git-annex.branchable.com/transferring_data/]}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| '''multi'''directional; with git remotes [http://git-annex.branchable.com/sync/]<br />
| {{G|renames conflicting files [http://git-annex.branchable.com/automatic_conflict_resolution/]}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|[http://git-annex.branchable.com/assistant/ git-annex assistant]}}<br />
| GPLv3<br />
| macOS, Android<br />
| {{Yes}}<br />
| Manage files with git<br />
|-<br />
| [http://www.netpower.fr/osync osync.sh]<br />
| {{AUR|osync}}<br />
| Bash, based on rsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| '''bi'''directional<br />
| {{G|keeps multiple versions of a file [http://www.netpower.fr/sites/default/files/soft/html-doc/osync_v1.2.html#toc-Subsubsection-1.3.1]}}<br />
| {{G|optional [https://github.com/deajan/osync#daemon-mode]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| BSD<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/rdiff-backup/ rdiff-backup]<br />
| {{Pkg|rdiff-backup}}<br />
| Python 2, librsync<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPL<br />
| Win32<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [[rsync]]<br />
| {{pkg|rsync}}<br />
| C<br />
| {{Yes}}<br />
| {{G|SSH or native protocol}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|<br />
* {{ic|--link-dest}} with hard links [http://www.ibm.com/developerworks/aix/library/au-spunix_rsync/index.html#backup]<br />
* {{ic|--backup}}<br />
}}<br />
|colspan="2"| '''uni'''directional<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|[[Rsync#Front-ends]]}}<br />
| GPLv3<br />
| Win32<br />
| {{Yes}}<br />
| Standard tool present on all Linux distributions.<br />
|-<br />
| [https://sparkleshare.org/ SparkleShare]<br />
| {{Pkg|sparkleshare}}<br />
| C#, git<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| GPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Syncthing]]<br />
| {{pkg|syncthing}}<br />
| Go<br />
| {{G|Yes [http://docs.syncthing.net/users/faq.html#is-synchronization-fast]}}<br />
| {{G|Yes [http://docs.syncthing.net/users/security.html]}}<br />
| {{Y|partial [http://docs.syncthing.net/users/faq.html#what-things-are-synced]}}<br />
| {{G|Yes }}<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://docs.syncthing.net/users/versioning.html]}}, previous versions moved to archive folder<br />
| '''multi'''directional<br />
| {{G|renames one file [https://docs.syncthing.net/users/faq.html#what-if-there-is-a-conflict]}}<br />
| {{G|Yes}}<br />
| {{Yes}}<br />
| {{G|Web, GTK}}<br />
| MPL v2<br />
| BSD, Windows, macOS, Android, Kindle Paperwhite<br />
| {{Yes}}<br />
| P2P sync<br />
|-<br />
| [http://synkron.sourceforge.net/ Synkron]<br />
| {{AUR|synkron}}<br />
| C++<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| Windows, macOS<br />
| {{R|[https://sourceforge.net/projects/synkron/ No]}}<br />
|<br />
|-<br />
| [[taskd]]<br />
| {{aur|taskd}}<br />
| C++, Python<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| '''multi'''directional<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| Android<br />
| {{Yes}}<br />
|<br />
|-<br />
| [[Unison]]<br />
| {{pkg|unison}}<br />
| OCaml<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Y|partial [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#perms]}}<br />
| {{G|optional [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#speeding]}}<br />
| {{No}}<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#backups]}}<br />
| '''bi'''directional<br />
| {{G|interactive}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK2}}<br />
| GPL<br />
| FreeBSD, Windows, macOS, Android<br />
| {{G|Yes [http://www.cis.upenn.edu/~bcpierce/unison/status.html]}}<br />
|<br />
|}<br />
<br />
== Incremental backups ==<br />
<br />
Applications that can do incremental backups remember and take into account what data has been backed up during the last run (so-called "diffs") and eliminate the need to have duplicates of unchanged data. Restoring the data to a certain point in time would require locating the last full backup and all the incremental backups from then to the moment when it is supposed to be restored. This sort of backup is useful for those who do it very often.<br />
<br />
See also [[Dotfiles#Version control]].<br />
<br />
'''Legend:'''<br />
<br />
* '''Name''': the application name, linking to the official website.<br />
* '''Installation''': a link to the main ArchWiki article, if existing, or directly to the package pages.<br />
* '''Implementation''': the programming language, library, or utility that the application is based on.<br />
* '''Compressed storage''': compression is used for storage.<br />
* '''Encrypted storage''': encryption is used for storage.<br />
* '''Delta transfer''': only the modified ''parts'' of files are transferred.<br />
* '''Encrypted transfer''': data is encrypted by default when transferred over a network.<br />
* '''FS metadata''': file system permissions and attributes are backed up.<br />
* '''Easy access''': the backup is stored plainly in the file system, or is mountable as such.<br />
* '''Resumable''': the backup can be resumed without restarting it if interrupted.<br />
* '''Handles renames''': moved/renamed files are detected and not stored or transferred twice; it typically means that a checksum is computed for files or chunks thereof.<br />
* '''CLI''': the application is command-line driven, i.e. it is scriptable.<br />
* '''Other interfaces''': the application has the specified user interfaces, e.g. GUI, TUI, or web-based.<br />
* '''Licence''': the licence of the server and client applications.<br />
* '''Other platforms''': supported operating systems other than Linux.<br />
* '''Specificity''': brief notes about special features that notably set the application apart from the others.<br />
<br />
=== Single machine ===<br />
<br />
These applications are aimed at backing up data from the machine they are installed on, although the backup destination can be located on an external machine or storage media.<br />
<br />
==== Chunk-based increments ====<br />
<br />
If a file is modified, these applications store only its changed ''parts'' at the next snapshot. Compared to [[#File-based increments]] applications, these are more space-efficient, especially when large files receive small modifications; on the other hand, the archived snapshots have to be opened with the backup application that created them, since the files have to be reconstructed from the stored binary diffs.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://areca.sourceforge.net/ Areca Backup]<br />
| {{AUR|areca}}<br />
| Java<br />
| {{G|Zip, Zip64}}<br />
| {{G|AES128, AES256}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPLv2<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://borgbackup.readthedocs.org/en/stable/ BorgBackup]<br />
| {{Pkg|borg}}<br />
| Python, C (Cython)<br />
| {{G|lz4, zlib, lzma, zstd}}<br />
| {{G|AES256}}<br />
| {{Yes}}<br />
| {{G|SSH}}<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#which-file-types-attributes-etc-are-preserved]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/usage.html#borg-mount]<br />
| {{Yes}}[http://borgbackup.readthedocs.org/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| BSD<br />
| *BSD, macOS<br />
| {{Yes}}<br />
| Deduplication based on variable length chunks; support both local and SSH-based remote backup destination<br />
|-<br />
| [http://viric.name/cgi-bin/btar btar]<br />
| {{AUR|btar}}{{Broken package link|{{aur-mirror|btar}}}}<br />
| C<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Redundancy, indexed extraction, multicore compression, input and output serialisation, tolerance to partial archive errors. <br />
|-<br />
| [https://bup.github.io/ bup]<br />
| {{Pkg|bup}} {{AUR|bup-git}}<br />
| C, Python, git<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}[https://bup.github.io/man/bup-fuse.html]<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|third party}}<br />
| GPLv2<br />
| NetBSD, Windows, macOS<br />
| {{Yes}}<br />
| Same storage format as git<br />
|-<br />
| [https://github.com/emersion/bups bups]<br />
| {{AUR|bups}}<br />
| bup frontend<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{G|pick up where you left off [https://github.com/bup/bup/blob/master/README.md#reasons-bup-is-awesome]}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|GTK 3}}<br />
| MIT<br />
|<br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://launchpad.net/deja-dup Déjà Dup]<br />
| [[Déjà Dup]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|GTK+}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Integrated into [[GNOME Files]].<br />
|-<br />
| [http://www.duplicati.com/ Duplicati]<br />
| {{AUR|duplicati-latest}}<br />
| C#<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|scheduled for 2.0 release}}<br />
| {{No}}<br />
| {{Y|Pausing only}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| LGPL<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.nongnu.org/duplicity/ Duplicity]<br />
| [[Duplicity]]<br />
| librsync<br />
| {{G|gzip}}<br />
| {{G|gpg}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{G|Déjà Dup}}<br />
| GPL<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://www.duply.net/ Duply]<br />
| [[Duply]]<br />
| duplicity front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://kde-apps.org/content/show.php/Kup+Backup+System?content=147465 Kup Backup System]<br />
| {{Pkg|kup}}<br />
| rsync, bup front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{G|Immature}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|bup}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://liw.fi/obnam/ obnam]<br />
| {{AUR|obnam}}<br />
| Python<br />
| {{Yes}}<br />
| {{G|GnuPG}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{G|checkpoints every 100MB}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| <br />
|-<br />
| [https://restic.github.io/ restic]<br />
| {{AUR|restic}} {{AUR|restic-git}}<br />
| Go<br />
| {{No}} [https://github.com/restic/restic/issues/21]<br />
| {{G|AES-256}} [https://github.com/restic/restic/blob/master/doc/Design.md]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}[https://restic.readthedocs.io/en/stable/manual.html#mount-a-repository]<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| BSD<br />
| <br />
| {{Yes}}<br />
| <br />
|-<br />
| [http://zbackup.org/ ZBackup]<br />
| {{AUR|zbackup}}<br />
| C++<br />
| {{G|LZMA, LZO}}<br />
| {{G|AES}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{R|planned [https://github.com/zbackup/zbackup#improvements]}}<br />
| {{No}}<br />
| {{Y|Kinda through tar}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
| Repository consists of immutable files.<br />
|}<br />
<br />
==== File-based increments ====<br />
<br />
If a file is modified, these applications store its new version entirely at the next snapshot. Compared to [[#Chunk-based increments]] applications, these are less space-efficient, especially when large files receive small modifications; on the other hand, often the archived snapshots can be opened without the need to have the backup application installed.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Hard links''': whether unmodified files are stored as hard links to previous versions.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Hard links<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [https://github.com/bit-team/backintime Back In Time]<br />
| [[Back In Time]]<br />
| Python, rsync, diff<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|Yes [http://backintime.le-web.org/documentation/]}}<br />
| {{Yes}}<br />
| {{G|Qt}}<br />
| GPLv2<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dar.linux.free.fr/ DAR] (Disk ARchive)<br />
| {{AUR|dar}}<br />
| C++<br />
| {{G|special archive format}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{Yes}}<br />
| {{G|DarGUI}}<br />
| GPL<br />
| FreeBSD, NetBSD, Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://dargui.sourceforge.net/ DarGUI]<br />
| {{AUR|dargui}}<br />
| DAR front-end<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{R|No [http://dar.linux.free.fr/doc/Features.html]}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPL<br />
| Windows<br />
| style="text-align:center;" | ?<br />
|<br />
|-<br />
| [http://miek.nl/projects/hdup2/ hdup]{{Dead link|2016|07|11}}<br />
| {{Aur|hdup}}<br />
| C<br />
| {{G|bzip, gzip, lzop}}<br />
| {{G|gpg}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
|<br />
| {{No}}<br />
| Multiple backup targets.<br />
|-<br />
| [http://www.scottlu.com/Content/Link-Backup.html Link-Backup]<br />
| {{AUR|link-backup}}<br />
| Python<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{R|No [http://www.scottlu.com/Content/Link-Backup.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| MIT<br />
| <br />
| {{No}}<br />
| It copies itself to the server.<br />
|-<br />
| [https://github.com/miekg/rdup rdup]<br />
| {{AUR|rdup}}<br />
| C<br />
| {{G|tar.gz}}<br />
| {{G|gpg, blowfish and others}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| {{No}}<br />
| Set of command-line tools.<br />
|-<br />
| [http://www.rsnapshot.org/ rsnapshot]<br />
| [[rsnapshot]]<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{G|Yes [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html]}}<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv2<br />
| Win32<br />
| {{Yes}}<br />
| <br />
|-<br />
| [https://launchpad.net/sbackup sbackup]<br />
| {{AUR|sbackup}}<br />
| Python<br />
| {{G|gzip, bzip2}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{G|SSH}}<br />
| style="text-align:center;" | ?<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
|<br />
|-<br />
| [https://github.com/teejee2008/timeshift TimeShift]<br />
| {{AUR|timeshift}}<br />
| rsync<br />
| {{No}}<br />
| {{No}}<br />
| {{G|rsync}}<br />
| {{G|rsync}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{G|GTK}}<br />
| GPLv3<br />
| Designed for full-system backups to dedicated devices.<br />
| {{Yes}}<br />
|<br />
|}<br />
<br />
=== Network oriented ===<br />
<br />
These applications have been designed to centralize the backup of several machines connected to a network, through a server-client model. In general they are more complicated to deploy, compared to [[#Single machine]] solutions.<br />
<br />
'''Specific legend:'''<br />
<br />
* '''Control direction''': Pull: server logs into client. Push: client initiates backup session.<br />
* '''Increment type''': the strategy used to reduce used space by deduplicating data (i.e., besides compression).<br />
** '''file-based''': if a file is modified, the entire new version is stored at each snapshot.<br />
*** '''hard-links''': whether unmodified files are stored as hard links to previous versions.<br />
** '''chunk-based''': only the modified ''parts'' of files are stored at each snapshot.<br />
<br />
{| class="wikitable sortable"<br />
! Name<br />
! Installation<br />
! Implementation<br />
! Control direction<br />
! Compressed storage<br />
! Encrypted storage<br />
! Delta transfer<br />
! Encrypted transfer<br />
! FS metadata<br />
! Easy access<br />
! Resumable<br />
! Handles renames<br />
! Increment type<br />
! CLI<br />
! Other interfaces<br />
! Licence<br />
! Other platforms<br />
! Maintained<br />
! Specificity<br />
|-<br />
| [http://backuppc.sourceforge.net/index.html BackupPC]<br />
| [[BackupPC]]<br />
| Perl<br />
| Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based, hard links [http://backuppc.sourceforge.net/faq/BackupPC.html#Backup-basics]<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv2<br />
| Any (no client needed)<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once.<br />
|-<br />
| [http://www.bacula.org Bacula]<br />
| [https://aur.archlinux.org/packages/?K=bacula bacula*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| file-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|GUI, Web}}<br />
| AGPLv3<br />
| Windows, macOS<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://burp.grke.org burp]<br />
| {{AUR|burp-backup}}<br />
| librsync<br />
| Push<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://burp.grke.org/why.html]<br />
| {{Yes}}<br />
| {{G|[https://git.ziirish.me/ziirish/burp-ui burp-ui]}}<br />
| AGPLv3<br />
| Windows<br />
| {{Yes}}<br />
|<br />
|-<br />
| [http://safekeep.sourceforge.net/ SafeKeep]<br />
| {{AUR|safekeep}}<br />
| rdiff-backup<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| chunk-based [http://safekeep.sourceforge.net/safekeep.html]<br />
| {{Yes}}<br />
| {{Yes}}<br />
| GPL<br />
| <br />
| {{No}}<br />
| Integrates with [[LVM]] and databases to create consistent backups. Bandwidth throttling.<br />
|-<br />
| [http://www.snebu.com Snebu]<br />
| {{AUR|snebu}}{{Broken package link|{{aur-mirror|snebu}}}}<br />
| C<br />
| Push or Pull<br />
| {{Yes}}<br />
| {{No}}<br />
| style="text-align:center;" | ?<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| file-based [http://www.snebu.com/#_concepts]<br />
| {{Yes}}<br />
| {{No}}<br />
| GPLv3<br />
| <br />
| style="text-align:center;" | ?<br />
| Supports arbitrary retention schedules.<br />
|-<br />
| [http://www.initzero.it/portal/soluzioni/software-open-source/synbak-universal-backup-system_2623.html Synbak]<br />
| {{Pkg|synbak}}<br />
| Multitool wrapper<br />
| ?<br />
| {{Yes}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| style="text-align:center;" | ?<br />
| ?<br />
| {{No}}<br />
| {{G|Web}}<br />
| GPLv3<br />
| <br />
| {{Yes}}<br />
| Unifies several backup methods.<br />
|-<br />
| [https://www.urbackup.org UrBackup]<br />
| [https://aur.archlinux.org/packages/?K=urbackup urbackup*] in [[AUR]]<br />
| C++<br />
| Pull<br />
| {{No}}<br />
| {{No}}<br />
| {{Yes}}<br />
| {{Y|Internet transfers only}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| {{Yes}}<br />
| file-based,hard-links and symlinks[http://blog.urbackup.org/156/symbolically-linking-directories-during-incremental-file-backups]/chunk-based CoW-Snapshots[http://blog.urbackup.org/83/file-backup-storage-with-btrfs-snapshots]<br />
| {{Yes}} (client)<br />
| {{G|GUI, Web}}<br />
| AGPLv3+<br />
| Windows, macOS<br />
| {{Yes}}<br />
| Identical files across backups of the same or different clients are stored only once. Integrates with LVM, dattobd and btrfs for file system snapshots.<br />
|}<br />
<br />
== Cloud storage ==<br />
<br />
=== Third-party services ===<br />
<br />
{{Merge|List of applications#File sharing|Remove the extra bullet points: the Wikipedia comparison table, and the respective webpages and Wikipedia articles do a better job at describing them.}}<br />
<br />
See also [[Wikipedia:Comparison of online backup services]] and [[List of applications#Cloud synchronization clients]].<br />
<br />
{{Tip|{{aur|cryptomator}} is an open-source, multi-platform program designed to add client-side transparent encryption on cloud-shared files.}}<br />
<br />
* {{App|Amazon S3|Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web service interface to store and retrieve any amount of data from anywhere on the web. With Amazon S3, you pay only for the storage you actually use. There is no minimum fee and no setup cost.|http://aws.amazon.com/s3/|{{Pkg|s3cmd}} (high-level operations), {{Pkg|python-boto3}} (low-level API)}}<br />
<br />
* {{App|[[CrashPlan]]|An online/offsite backup solution.<br />
** Unlimited online space for very reasonable pricing.<br />
** Automatic and incremental backups to multiple destinations.<br />
** Intuitive GUI.<br />
** Offers encryption and de-duplication.<br />
** Software is free for local use.<br />
** Restore prevents simultaneous backing up<br />
|http://www.crashplan.com/|{{AUR|crashplan}}}}<br />
<br />
* {{App|[[Dropbox]]|A popular file-sharing service.<br />
** A daemon monitors a specified directory, and uploads incremental changes to dropbox.com. <br />
** Changes automatically show up on your other computers. <br />
** Includes file sharing and a public directory. <br />
** You can recover deleted files. <br />
** Community written add-ons. <br />
** Free accounts have 2GB storage.<br />
|http://www.dropbox.com|{{AUR|dropbox}} {{AUR|nautilus-dropbox}}}}<br />
<br />
* {{App|[[Wikipedia:Google Drive|Google Drive]]|A file storage and synchronization service provided by Google.<br />
** Provides cloud storage, file sharing and collaborative editing.<br />
** Multiple clients are available.<br />
|https://drive.google.com|{{AUR|google-drive-ocamlfuse}} (free), {{AUR|drive}} (free), {{AUR|grive}} (free), {{AUR|gdrivefs}} (free), [[insync]] (non-free)}}, {{AUR|gdrive}} (free), {{AUR|drivesync-git}} (free)<br />
<br />
* {{App|[[Wikipedia:IDrive_Inc.|iDrive]]|Universal Online Backup.<br />
** Multiple Device Backup.<br />
** Online File Sync. <br />
** Real-Time Backup. <br />
** Backup and Access from Mobile Devices. <br />
** Remote Manage. <br />
** No GUI Front end for Linux, command line based. A wrapper script is available to make it easier to use.<br />
|https://www.idrive.com/|}}<br />
<br />
* {{App|[[Wikipedia:Jungle Disk|Jungle Disk]]|An online backup tool that stores its data in Amazon S3 or Rackspace Cloud Files.<br />
** A GNOME Files extension.<br />
** Only paid plans available.<br />
|http://www.jungledisk.com/|}}<br />
<br />
* {{App|[[Wikipedia:Mail.Ru|Mail.ru Cloud]]|Free cloud storage service created by Mail.ru.|https://cloud.mail.ru/|{{AUR|mailru-cloud}}}}<br />
<br />
* {{App|[[Wikipedia:Mega (website)|MEGA]]|Successor to the MegaUpload file-sharing service.<br />
** Free accounts are 50GB with paid plans available for more space.<br />
** Offers encryption and de-duplication.<br />
** Usually accessed through its web interface but other tools exist.<br />
|https://mega.co.nz|{{AUR|megatools}}, {{AUR|megasync}}, {{AUR|megafuse-git}}}}<br />
<br />
* {{App|Nutstore|A cloud service that lets you sync and share files anywhere.<br />
** Multiple file folders sync.<br />
** Service for Chinese users.<br />
|http://jianguoyun.com/|{{AUR|nutstore}}}}<br />
<br />
* {{App|OneDrive|Microsoft cloud service.<br />
|https://onedrive.com|{{AUR|onedrive-git}}}}<br />
<br />
* {{App|rsync.net|Cloud storage for offsite backups.<br />
** ZFS filesystem, accessible with any SSH/SFTP/SCP/rsync tool, running on a UNIX system with [http://www.rsync.net/resources/howto/remote_commands.html jailed shell access].<br />
** Simple rsync synchronization with daily automatic ZFS snapshots.<br />
** Native support for Attic and {{Pkg|borg}} clients: http://rsync.net/products/attic.html<br />
|http://www.rsync.net/|[[rsync]]/[[SSH]], {{Pkg|borg}}}}<br />
<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]]|An online backup tool for Windows, Mac and Linux users to back up, share, sync, access and store their data.<br />
** Free account holds 2GB as a 60-day trial.<br />
** Includes file sharing and a public directory.<br />
** Incremental backup and sync are both supported.<br />
|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
<br />
* {{App|[[Wikipedia:Storage Made Easy|Storage Made Easy]]|Provides unified access to numerous cloud storage services, as well as its own storage.<br />
** Free and paid version available.<br />
** Free account holds 5GB and allows access to up to three other cloud storage providers.<br />
** Supports local directory via fuse, as well as web access.<br />
** Supports many cloud storage services, such as Box, Dropbox, Google Drive, Onedrive, and others.<br />
|http://storagemadeeasy.com/|}}<br />
<br />
* {{App|[[Wikipedia:Tarsnap|Tarsnap]]|A secure online backup service for Linux, BSD, macOS and Windows (through Cygwin).<br />
** Compressed encrypted backups to Amazon S3 Servers.<br />
** Automate via [[cron]].<br />
** Incremental backups.<br />
** Backup any files or directories.<br />
** Command line only client.<br />
** Pay only for usage (bandwidth and storage). <br />
|http://www.tarsnap.com|{{Pkg|tarsnap}}}}<br />
<br />
* {{App|[[Yandex Disk]]|Free cloud storage service created by Yandex.ru that gives you access to your photos, videos and documents from any internet-enabled device.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== Multi-service clients ====<br />
<br />
* {{App|[[Déjà Dup]]|A simple GTK+ backup program. It hides the complexity of doing backups the 'right way' (encrypted, off-site, and regular) and uses duplicity as the backend.<br />
** Automatic, timed backup configurable in GUI.<br />
** Restore wizard.<br />
** Integrated into the GNOME Files file manager.<br />
** Inherits several features of duplicity.<br />
|https://launchpad.net/deja-dup|{{Pkg|deja-dup}}}}<br />
<br />
* {{App|Duplicati|Backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with Amazon S3, Windows Live SkyDrive, Google Drive (Google Docs), Rackspace Cloud Files or WebDAV, SSH, FTP (and many more). Duplicati is open source and free.|http://www.duplicati.com/|{{AUR|duplicati-latest}}}}<br />
<br />
* {{App|[[Duplicity]]|A simple command-line utility which allows encrypted compressed incremental backup to nearly any storage.<br />
** Supports gpg encryption and signing.<br />
** Supports gzip compression.<br />
** Supports full or incremental backups, incremental backup stores only difference between new and old file.<br />
** Supports pushing over [http://duplicity.nongnu.org/duplicity.1.html#sect7 many protocols].<br />
|http://www.nongnu.org/duplicity/|{{Pkg|duplicity}}}}<br />
<br />
* {{App|[[Duply]]|Front-end for duplicity which simplifies running it by:<br />
** keeping recurring settings in profiles per backup job;<br />
** automated import/export of keys between profile and keyring;<br />
** enabling batch operations eg. backup_verify_purge;<br />
** executing pre/post scripts;<br />
** precondition checking for flawless duplicity operation.<br />
|http://www.duply.net/|{{AUR|duply}}}}<br />
<br />
* {{App|rclone|Rclone is a command line program to sync files and directories to and from Google Drive, Amazon S3, Openstack Swift / Rackspace cloud files / Memset Memstore, Dropbox, Google Cloud Storage and The local filesystem.|http://rclone.org/|{{Pkg|rclone}}}}<br />
<br />
* {{App|Syncany|Cloud storage and filesharing application with a focus on security and abstraction of storage.|https://www.syncany.org/|{{AUR|syncany}}}}<br />
<br />
=== Custom infrastructure ===<br />
<br />
See [[List of applications/Internet#Cloud storage servers]]<br />
<br />
== Version control systems ==<br />
<br />
{{Merge|List_of_applications#Work_environment|Also drop the extra bullets, the Wikipedia comparison table is much better than this.}}<br />
<br />
These are traditionally used for keeping track of software development; but if you want to have a simple way to manage your config files in one directory, it might be a good solution.<br />
<br />
See also [[Wikipedia:Comparison of revision control software]].<br />
<br />
* {{App|[[Bazaar]]|A distributed version control system that helps you track project history over time and to collaborate easily with others.<br />
** Similar commands to Subversion.<br />
** Supports working with or without a central server.<br />
** Support for working with some other revision control systems<br />
** Complete Unicode support.<br />
|https://bazaar.canonical.com/en/|{{Pkg|bzr}}}}<br />
<br />
* {{App|Darcs|A distributed revision control system that was designed to replace traditional, centralized source control systems such as CVS and Subversion.<br />
** Offline mode.<br />
** Easy branching and merging.<br />
** Written in Haskell.<br />
** Not very fast.<br />
|http://darcs.net/|{{Pkg|darcs}}}}<br />
<br />
* {{App|[[Git]]|A distributed revision control and source code management system with an emphasis on speed.<br />
** Very easy creation, merging, and deletion of branches.<br />
** Nearly all operations are performed locally, giving it a huge speed advantage on centralized systems.<br />
** Has a "staging area" or "index", this is an intermediate area where commits can be formatted and reviewed before completing the commit.<br />
** Does not handle binary files very well.<br />
|https://git-scm.com/|{{Pkg|git}}}}<br />
<br />
* {{App|[[Mercurial]]|A distributed version control system written in Python and similar in many ways to Git.<br />
** Platform independent.<br />
** Support for [http://mercurial.selenic.com/wiki/UsingExtensions extensions].<br />
** A set of commands consistent with Subversion.<br />
** Supports tags.<br />
|https://www.mercurial-scm.org/|{{Pkg|mercurial}}}}<br />
<br />
* {{App|[[Subversion]]|A full-featured centralized version control system originally designed to be a better CVS.<br />
** Renamed/copied/moved/removed files retain full revision history.<br />
** Native support for binary files, with space-efficient binary-diff storage.<br />
** Costs proportional to change size, not to data size.<br />
** Allows arbitrary metadata ("properties") to be attached to any file or directory. <br />
|https://subversion.apache.org/|{{Pkg|subversion}}}}<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:List of backup software]]<br />
* [[Wikipedia:Comparison of backup software]]<br />
* [https://github.com/restic/others Exhaustive list of backup solutions for Linux]<br />
* [http://www.halfgaar.net/backing-up-unix Backing up Linux and other Unix(-like) systems]<br />
* [http://www.askapache.com/security/mirror-using-rsync-ssh.html Mirroring an Entire Site using Rsync over SSH]<br />
* [http://www.si-journal.org/index.php/JSI/article/view/205 Performance comparison of five remote incremental backup tools: Rsync, Rdiff-backup, Duplicity, Areca and Link-Backup]<br />
* [http://blog.pointsoftware.ch/index.php/howto-local-and-remote-snapshot-backup-using-rsync-with-hard-links/ rsync-snapshot.sh] — Local and remote snapshot backup using rsync with hard links</div>Sikmirhttps://wiki.archlinux.org/index.php?title=Ranger&diff=478527Ranger2017-05-28T15:35:44Z<p>Sikmir: Update list of available color schemes</p>
<hr />
<div>{{DISPLAYTITLE:ranger}}<br />
[[Category:File managers]]<br />
[[ar:Ranger]]<br />
[[fr:ranger]]<br />
[[ja:Ranger]]<br />
[[zh-hans:Ranger]]<br />
{{Related articles start}}<br />
{{Related|Midnight Commander}}<br />
{{Related|vifm}}<br />
{{Related articles end}}<br />
[http://ranger.nongnu.org/ ranger] is a text-based file manager written in Python. Directories are displayed in one pane with three columns. Moving between them is accomplished with keystrokes, bookmarks, the mouse or the command history. File previews and directory contents show automatically for the current selection.<br />
<br />
Features include: vi-style key bindings, bookmarks, selections, tagging, tabs, command history, the ability to make symbolic links, several console modes, and a task view. ''ranger'' has customizable commands and key bindings, including bindings to external scripts. The closest competitor is [[Vifm]], which has two panes and vi-style key bindings, but fewer features overall.<br />
<br />
== Installation ==<br />
[[Install]] the {{Pkg|ranger}} package, or {{AUR|ranger-git}} for the development version.<br />
<br />
== Usage ==<br />
<br />
To start ranger, launch a [[List of applications#Terminal emulators|terminal]] and run {{ic|ranger}}.<br />
<br />
{| class="wikitable"<br />
|+<br />
! Key !! Command<br />
|-<br />
| {{ic|?}} || Open the manual or list keybindings, commands and settings<br />
|-<br />
| {{ic|l}}, {{ic|Enter}} || Launch files<br />
|}<br />
<br />
== Configuration ==<br />
<br />
After startup, ''ranger'' creates a directory {{ic|~/.config/ranger}}. To copy the default configuration to this directory issue the following command:<br />
<br />
ranger --copy-config=all<br />
<br />
* {{ic|rc.conf}} - startup commands and key bindings<br />
* {{ic|commands.py}} - commands which are launched with {{ic|:}}<br />
* {{ic|rifle.conf}} - applications used when a given type of file is launched.<br />
<br />
{{ic|rc.conf}} only needs to include changes from the default file as both are loaded. For {{ic|commands.py}}, if you do not include the whole file, put this line at the top:<br />
<br />
from ranger.api.commands import *<br />
<br />
To add a keybind that moves files to a created directory {{ic|~/.Trash/}} with {{ic|DD}}, add to {{ic|~/.config/ranger/rc.conf}}:<br />
<br />
map DD shell mv -t /home/${USER}/.Trash %s<br />
<br />
See [http://ranger.nongnu.org/ranger.1.html man ranger] for general configuration.<br />
<br />
=== Defining commands ===<br />
<br />
Continuing the above example, add the following entry to {{ic|~/.config/ranger/commands.py}} to empty the trash directory {{ic|~/.Trash}}.<br />
<br />
{{bc|<nowiki><br />
class empty(Command):<br />
""":empty<br />
<br />
Empties the trash directory ~/.Trash<br />
"""<br />
<br />
def execute(self):<br />
self.fm.run("rm -rf /home/myname/.Trash/{*,.[^.]*}")<br />
</nowiki>}}<br />
<br />
To use it, type {{ic|:empty}} and {{ic|Enter}} with tab completion as desired.<br />
<br />
{{Warning|{{ic|[^.]}} is an essential part of the above command. Without it, all files and directories of the form {{ic|..*}} will be deleted, wiping out everything in your home directory.}}<br />
<br />
=== Color schemes ===<br />
<br />
Ranger comes with four color schemes: {{ic|default}}, {{ic|jungle}}, {{ic|snow}} and {{ic|solarized}}.<br />
You can change your color scheme using:<br />
<br />
set colorscheme ''scheme''<br />
<br />
Custom color schemes can be placed in {{ic|~/.config/ranger/colorschemes}}.<br />
<br />
=== File association ===<br />
<br />
Ranger uses its own file opener called {{ic|rifle}}.<br />
It's configured in {{ic|~/.config/ranger/rifle.conf}}. Run {{ic|1=ranger --copy-config=rifle}} if it does not exist. For example, the following line <br />
makes {{Pkg|kile}} the default program for tex files:<br />
<br />
ext tex = kile "$@"<br />
<br />
To open all files with {{Pkg|xdg-utils}}:<br />
<br />
has xdg-open, flag f = xdg-open "$1"<br />
<br />
== Tips and tricks ==<br />
<br />
{{Template:Poor writing|}}<br />
<br />
=== Archives ===<br />
<br />
These commands use {{Pkg|atool}} to perform archive operations.<br />
<br />
==== Archive extraction ====<br />
<br />
The following command implements archive extraction by copying (yy) one or more archive files and then executing {{ic|:extracthere}} on the desired directory.<br />
<br />
{{bc|<nowiki><br />
import os<br />
from ranger.core.loader import CommandLoader<br />
<br />
class extracthere(Command):<br />
def execute(self):<br />
""" Extract copied files to current directory """<br />
copied_files = tuple(self.fm.copy_buffer)<br />
<br />
if not copied_files:<br />
return<br />
<br />
def refresh(_):<br />
cwd = self.fm.get_directory(original_path)<br />
cwd.load_content()<br />
<br />
one_file = copied_files[0]<br />
cwd = self.fm.thisdir<br />
original_path = cwd.path<br />
au_flags = ['-X', cwd.path]<br />
au_flags += self.line.split()[1:]<br />
au_flags += ['-e']<br />
<br />
self.fm.copy_buffer.clear()<br />
self.fm.cut_buffer = False<br />
if len(copied_files) == 1:<br />
descr = "extracting: " + os.path.basename(one_file.path)<br />
else:<br />
descr = "extracting files from: " + os.path.basename(one_file.dirname)<br />
obj = CommandLoader(args=['aunpack'] + au_flags \<br />
+ [f.path for f in copied_files], descr=descr)<br />
<br />
obj.signal_bind('after', refresh)<br />
self.fm.loader.add(obj)<br />
</nowiki>}}<br />
<br />
==== Compression ====<br />
<br />
The following command allows the user to compress several files on the current directory by marking them and then calling {{ic|:compress ''package name''}}. It supports name suggestions by getting the basename of the current directory and appending several possibilities for the extension. You need to have {{pkg|atool}} installed. Otherwise you will see an error message when you create the archive.<br />
<br />
{{bc|<nowiki><br />
import os<br />
from ranger.core.loader import CommandLoader<br />
<br />
class compress(Command):<br />
def execute(self):<br />
""" Compress marked files to current directory """<br />
cwd = self.fm.thisdir<br />
marked_files = cwd.get_selection()<br />
<br />
if not marked_files:<br />
return<br />
<br />
def refresh(_):<br />
cwd = self.fm.get_directory(original_path)<br />
cwd.load_content()<br />
<br />
original_path = cwd.path<br />
parts = self.line.split()<br />
au_flags = parts[1:]<br />
<br />
descr = "compressing files in: " + os.path.basename(parts[1])<br />
obj = CommandLoader(args=['apack'] + au_flags + \<br />
[os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr)<br />
<br />
obj.signal_bind('after', refresh)<br />
self.fm.loader.add(obj)<br />
<br />
def tab(self):<br />
""" Complete with current folder name """<br />
<br />
extension = ['.zip', '.tar.gz', '.rar', '.7z']<br />
return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension]<br />
</nowiki>}}<br />
<br />
=== External drives ===<br />
<br />
External drives can be automatically mounted with [[udev]] or [[udisks]]. Drives mounted under {{ic|/media}} can be easily accessed by pressing {{ic|gm}} (go, media).<br />
<br />
=== Image mounting ===<br />
<br />
The following command assumes you are using [[CDemu]] as your image mounter and some kind of system like [[autofs]] which mounts the virtual drive to a specified location ('/media/virtualrom' in this case). '''Do not forget to change mountpath to reflect your system settings'''.<br />
<br />
To mount an image (or images) to a cdemud virtual drive from ranger you select the image files and then type ':mount' on the console. The mounting may actually take some time depending on your setup (in mine it may take as long as one minute) so the command uses a custom loader that waits until the mount directory is mounted and then opens it on the background in tab 9.<br />
<br />
{{bc|<nowiki><br />
import os, time<br />
from ranger.core.loader import Loadable<br />
from ranger.ext.signals import SignalDispatcher<br />
from ranger.ext.shell_escape import *<br />
<br />
class MountLoader(Loadable, SignalDispatcher):<br />
"""<br />
Wait until a directory is mounted<br />
"""<br />
def __init__(self, path):<br />
SignalDispatcher.__init__(self)<br />
descr = "Waiting for dir '" + path + "' to be mounted"<br />
Loadable.__init__(self, self.generate(), descr)<br />
self.path = path<br />
<br />
def generate(self):<br />
available = False<br />
while not available:<br />
try:<br />
if os.path.ismount(self.path):<br />
available = True<br />
except:<br />
pass<br />
yield<br />
time.sleep(0.03)<br />
self.signal_emit('after')<br />
<br />
class mount(Command):<br />
def execute(self):<br />
selected_files = self.fm.thisdir.get_selection()<br />
<br />
if not selected_files:<br />
return<br />
<br />
space = ' '<br />
self.fm.execute_command("cdemu -b system unload 0")<br />
self.fm.execute_command("cdemu -b system load 0 " + \<br />
space.join([shell_escape(f.path) for f in selected_files]))<br />
<br />
mountpath = "/media/virtualrom/"<br />
<br />
def mount_finished(path):<br />
currenttab = self.fm.current_tab<br />
self.fm.tab_open(9, mountpath)<br />
self.fm.tab_open(currenttab)<br />
<br />
obj = MountLoader(mountpath)<br />
obj.signal_bind('after', mount_finished)<br />
self.fm.loader.add(obj)<br />
</nowiki>}}<br />
<br />
=== New tab in current folder ===<br />
<br />
You may have noticed there are two shortcuts for opening a new tab in home ({{ic|g}}{{ic|n}} and {{ic|Ctrl+n}}). Let us rebind {{ic|Ctrl+n}}:<br />
{{hc|rc.conf|<nowiki><br />
map <c-n> eval fm.tab_new('%d')<br />
</nowiki>}}<br />
<br />
=== PDF file preview ===<br />
You can preview PDF files in ranger by first converting the PDF file to an image. Ranger will store the image previews in {{ic|~/.cache/ranger/}}.<br />
<br />
First, ensure image preview is enabled:<br />
<br />
{{hc|~/.config/ranger/rc.conf|<nowiki><br />
# Use one of the supported image preview protocols<br />
set preview_images true<br />
</nowiki>}}<br />
<br />
Ranger can preview images using, for example, {{Pkg|w3m}}; see {{ic|~/.config/ranger/rc.conf}} for all available preview methods.<br />
<br />
Finally, add the following pdf preview command:<br />
<br />
{{hc|~/.config/ranger/scope.sh|<nowiki><br />
# Image previews, if enabled in ranger.<br />
if [ "$preview_images" = "True" ]; then<br />
case "$mimetype" in<br />
application/pdf)<br />
pdftoppm -jpeg -singlefile "$path" "${cached//.jpg}" && exit 6;;<br />
esac<br />
fi<br />
</nowiki>}}<br />
<br />
In this example the {{ic|pdftoppm}} utility from {{Pkg|poppler}} is used to create the image preview. Other (usually slower) options are available, for example {{Pkg|ghostscript}} or {{Pkg|imagemagick}}.<br />
<br />
=== Shell tips ===<br />
<br />
==== Synchronize path ====<br />
<br />
''ranger'' provides a shell [[Bash/Functions|function]] {{ic|/usr/share/doc/ranger/examples/bash_automatic_cd.sh}}. Running {{ic|ranger-cd}} instead of {{ic|ranger}} will automatically ''cd'' to the last browsed folder.<br />
<br />
If you launch ranger from a graphical launcher (such as {{ic|$TERMCMD -e ranger}}, where TERMCMD is an X terminal), you cannot use {{ic|ranger-cd}}. Create an executable script:<br />
<br />
{{hc|ranger-launcher.sh|<nowiki><br />
#!/bin/sh<br />
export RANGERCD=true<br />
$TERMCMD<br />
</nowiki>}}<br />
<br />
and add at the ''very end'' of your shell configuration:<br />
<br />
{{hc|.''shell''rc|<nowiki><br />
$RANGERCD && unset RANGERCD && ranger-cd<br />
</nowiki>}}<br />
<br />
This will launch {{ic|ranger-cd}} only if the {{ic|RANGERCD}} variable is set. It is important to unset this variable again, otherwise launching a subshell from this terminal will automatically relaunch {{ic|ranger}}.<br />
<br />
==== Start a shell from ranger ====<br />
<br />
With the previous method you can switch to a shell in last browsed path simply by leaving ranger. However you may not want to quit ranger for several reasons (numerous opened tabs, copy in progress, etc.).<br />
You can start a shell from ranger ({{ic|S}} by default) without losing your ranger session. Unfortunately, the shell will not switch to the current folder automatically. Again, this can be solved with an executable script:<br />
<br />
{{hc|shellcd|<nowiki><br />
#!/bin/sh<br />
export AUTOCD="$(realpath "$1")"<br />
<br />
$SHELL<br />
</nowiki>}}<br />
<br />
and - as before - add this to at the very end of your shell configuration:<br />
<br />
{{hc|shellrc|<nowiki><br />
cd "$AUTOCD"<br />
</nowiki>}}<br />
<br />
Now you can change your shell binding for ranger:<br />
<br />
{{hc|rc.conf|<br />
map S shell shellcd %d<br />
}}<br />
<br />
Alternatively, you can make use of your shell history file if it has any. For instance, you could do this for [[zsh#Dirstack|zsh]]:<br />
<br />
{{hc|shellcd|<nowiki><br />
## Prepend argument to zsh dirstack.<br />
BUF="$(realpath "$1")<br />
$(grep -v "$(realpath "$1")" "$ZDIRS")"<br />
echo "$BUF" > "$ZDIRS"<br />
<br />
zsh<br />
</nowiki>}}<br />
<br />
Change ZDIRS for your dirstack.<br />
<br />
===== A simpler solution =====<br />
<br />
{{hc|rc.conf|<nowiki><br />
map S shell bash -c "cd %d; bash"<br />
</nowiki>}}<br />
This could probably be adapted to other shells as well.<br />
Instead of just running a shell (like the default config), this will run {{ic|cd}} in a shell, then execute a interactive shell which will not immediately exit so that you can continue with what you wanted.<br />
<br />
==== Preventing nested ranger instances ====<br />
<br />
You can start a shell in the current directory with {{ic|S}}, when you exit the shell you get back to your ranger instance.<br />
<br />
When you however forget that you already are in a ranger shell and start ranger again you end up with ranger running a shell running ranger.<br />
<br />
To prevent this you can create the following function in your [[Autostarting#Shells|shell's startup file]]:<br />
<br />
ranger() {<br />
if [ -z "$RANGER_LEVEL" ]; then<br />
/usr/bin/ranger "$@"<br />
else<br />
exit<br />
fi<br />
}<br />
<br />
== Troubleshooting ==<br />
<br />
=== Artifacts in image preview ===<br />
<br />
Borderless columns may cause stripes in image previews. [https://bbs.linuxdistrocommunity.com/showthread.php?tid=1051] In {{ic|~/.config/ranger/rc.conf}} set:<br />
<br />
set draw_borders true<br />
<br />
== See also ==<br />
<br />
* [https://bbs.archlinux.org/viewtopic.php?id=93025 BBS thread]<br />
* [http://dotshare.it/category/fms/ranger/ DotShare.it configurations]<br />
* [https://github.com/hut/ranger GitHub]<br />
* [https://www.digitalocean.com/community/tutorials/installing-and-using-ranger-a-terminal-file-manager-on-a-ubuntu-vps Installing and using ranger]<br />
* [https://lists.nongnu.org/mailman/listinfo/ranger-users Mailing list]<br />
* [https://bloerg.net/2012/10/17/ranger-file-manager.html Ranger tutorial]</div>Sikmir