[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7853":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},7853,"oxidized","ytti\u002Foxidized","ytti","Oxidized is a network device configuration backup tool. It's a RANCID replacement!","",null,"Ruby",3408,1040,119,42,0,3,6,49,9,74.95,"Apache License 2.0",false,"master",true,[27,28,29,30],"backup","network","nms","rancid","2026-06-12 04:00:36","# Oxidized\n\n[![Build Status](https:\u002F\u002Fgithub.com\u002Fytti\u002Foxidized\u002Factions\u002Fworkflows\u002Fruby.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fytti\u002Foxidized\u002Factions\u002Fworkflows\u002Fruby.yml)\n[![Gem Version](https:\u002F\u002Fbadge.fury.io\u002Frb\u002Foxidized.svg)](http:\u002F\u002Fbadge.fury.io\u002Frb\u002Foxidized)\n[![Join the chat at https:\u002F\u002Fgitter.im\u002Foxidized\u002FLobby](https:\u002F\u002Fbadges.gitter.im\u002Foxidized\u002FLobby.svg)](https:\u002F\u002Fgitter.im\u002Foxidized\u002FLobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\nOxidized is a network device configuration backup tool. It's a RANCID replacement!\n\nIt is light and extensible and supports over 130 operating system types.\n\nFeature highlights:\n\n* Automatically adds\u002Fremoves threads to meet configured retrieval interval\n* Restful API to a move node immediately to head-of-queue (GET\u002FPUT \u002Fnode\u002Fnext\u002F[NODE])\n* Syslog udp+file example to catch config change events (IOS\u002FJunOS) and trigger a config fetch\n  * Will signal which IOS\u002FJunOS user made the change, can then be used by output modules (via POST)\n  * The `git` output module uses this info - 'git blame' will show who changed each line\n* Restful API to reload list of nodes (GET \u002Freload)\n* Restful API to fetch configurations (\u002Fnode\u002Ffetch\u002F[NODE] or \u002Fnode\u002Ffetch\u002Fgroup\u002F[NODE])\n* Restful API to show list of nodes (GET \u002Fnodes)\n* Restful API to show list of version for a node (\u002Fnode\u002Fversion[NODE]) and diffs\n\nCheck out the [Oxidized TREX 2014 presentation](http:\u002F\u002Fyoutu.be\u002FkBQ_CTUuqeU?t=3h) video on YouTube!\n\n> :warning: [Maintainer Wanted!](#help-needed) :warning:\n>\n> Is your company using Oxidized and has Ruby developers on staff? I'd love help from an extra maintainer!\n\n## Index\n\n1. [Supported OS Types](docs\u002FSupported-OS-Types.md)\n2. [Installation](#installation)\n    * [Debian and Ubuntu](#debian-and-ubuntu)\n    * [Rocky Linux, Red Hat Enterprise Linux](#rocky-linux-red-hat-enterprise-linux)\n    * [FreeBSD](#freebsd)\n    * [Build from Git](#build-from-git)\n    * [Docker & Podman](docs\u002FDocker.md)\n3. [Initial Configuration](#configuration)\n4. [Configuration](docs\u002FConfiguration.md)\n    * [Debugging](docs\u002FConfiguration.md#debugging)\n    * [Privileged mode](docs\u002FConfiguration.md#privileged-mode)\n    * [Disabling SSH exec channels](docs\u002FConfiguration.md#disabling-ssh-exec-channels)\n    * [Sources](docs\u002FSources.md)\n      * [Source: CSV](docs\u002FSources.md#source-csv)\n      * [Source: SQL](docs\u002FSources.md#source-sql)\n      * [Source: SQLite](docs\u002FSources.md#source-sqlite)\n      * [Source: Mysql](docs\u002FSources.md#source-mysql)\n      * [Source: HTTP](docs\u002FSources.md#source-http)\n    * [Outputs](docs\u002FOutputs.md)\n      * [Output: GIT](docs\u002FOutputs.md#output-git)\n      * [Output: GIT-Crypt](docs\u002FOutputs.md#output-git-crypt)\n      * [Output: HTTP](docs\u002FOutputs.md#output-http)\n      * [Output: File](docs\u002FOutputs.md#output-file)\n      * [Output types](docs\u002FOutputs.md#output-types)\n    * [Advanced Configuration](docs\u002FConfiguration.md#advanced-configuration)\n    * [Advanced Group Configuration](docs\u002FConfiguration.md#advanced-group-configuration)\n    * [Hooks](docs\u002FHooks.md)\n      * [Hook: exec](docs\u002FHooks.md#hook-type-exec)\n      * [Hook: githubrepo](docs\u002FHooks.md#hook-type-githubrepo)\n      * [Hook: awssns](docs\u002FHooks.md#hook-type-awssns)\n      * [Hook: slackdiff](docs\u002FHooks.md#hook-type-slackdiff)\n      * [Hook: xmppdiff](docs\u002FHooks.md#hook-type-xmppdiff)\n      * [Hook: ciscosparkdiff](docs\u002FHooks.md#hook-type-ciscosparkdiff)\n5. [Creating and Extending Models](docs\u002FCreating-Models.md)\n6. [Help](#help)\n7. [Help Needed](#help-needed)\n8. [Ruby API](docs\u002FRuby-API.md#ruby-api)\n    * [Input](docs\u002FRuby-API.md#input)\n    * [Output](docs\u002FRuby-API.md#output)\n    * [Source](docs\u002FRuby-API.md#source)\n    * [Model](docs\u002FRuby-API.md#model)\n\n## Installation\n\n### Debian and Ubuntu\nDebian 12 \"bookworm\" or newer and Ubuntu 22.04 (Jammy Jellyfish) or newer are recommended. On Ubuntu, begin by enabling the `universe`\nrepository (required for libssh2-1-dev):\n\n```shell\nadd-apt-repository universe\n```\n\nInstall the dependencies:\n\n```shell\napt install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++ libyaml-dev libzstd-dev\n```\n\nFinally, install Oxidized:\n\n```shell\ngem install oxidized\n```\n\nYou can also install one or both of the optional gems. They are not required\nto run Oxidized:\n```shell\ngem install oxidized-web    # Web interface and rest API\ngem install oxidized-script # Script-based input\u002Foutput extensions\n```\n\n### Rocky Linux, Red Hat Enterprise Linux\nThese instructions has been verified on Rocky Linux 9, Rocky Linux 10 and Fedora.\n\nOn Rocky Linux 9, you need to install\u002Fenable EPEL, CRB and Ruby 3.1:\n```shell\ndnf install epel-release\ndnf config-manager --set-enabled crb\ndnf module enable ruby:3.1\n```\n\nThen you need the required packages for oxidized:\n```shell\ndnf -y install ruby ruby-devel sqlite-devel openssl-devel pkgconf-pkg-config  cmake libssh-devel libicu-devel zlib-devel gcc-c++ libyaml-devel which\n```\n\nFinally, install Oxidized:\n\n```shell\ngem install oxidized\n```\n\nYou can also install one or both of the optional gems. They are not required\nto run Oxidized:\n```shell\ngem install oxidized-web    # Web interface and rest API\ngem install oxidized-script # Script-based input\u002Foutput extensions\n```\n\n### FreeBSD\n> :warning: These installation instructions have been tested on FreeBSD 14.2, but\noxidized itself has not been tested on it.\n\nFirst install ruby and rubyXX-gems (Find out the name of the package with `pkg search gems`):\n```shell\npkg instal ruby\npkg instal ruby32-gems\n```\n\nThen install the dependencies of oxidized an oxidized-web:\n```shell\npkg install ruby ruby-gems git sqlite3 libssh2 cmake pkgconf gmake\npkg install libyaml icu   # Dependencies for oxidized-web\n```\n\nFinally, install Oxidized:\n\n```shell\ngem install oxidized\n```\n\nYou can also install one or both of the optional gems. They are not required\nto run Oxidized:\n```shell\ngem install oxidized-web    # Web interface and rest API\ngem install oxidized-script # Script-based input\u002Foutput extensions\n```\n\nOxidized is also available via [FreeBSD ports](https:\u002F\u002Fports.freebsd.org\u002Fcgi\u002Fports.cgi?query=oxidized):\n\n```shell\npkg install rubygem-oxidized rubygem-oxidized-script rubygem-oxidized-web\n```\n\n### Build from Git\n\n```shell\ngit clone https:\u002F\u002Fgithub.com\u002Fytti\u002Foxidized.git\ncd oxidized\u002F\ngem install bundler\nrake install\n```\n\n### Running with Docker or Podman\nSee [docs\u002FDocker.md](docs\u002FDocker.md)\n\n## Configuration\n\nOxidized configuration is in YAML format. Configuration files are subsequently sourced from `\u002Fetc\u002Foxidized\u002Fconfig` then `~\u002F.config\u002Foxidized\u002Fconfig`. The hashes will be merged, this might be useful for storing source information in a system wide file and  user specific configuration in the home directory (to only include a staff specific username and password). Eg. if many users are using `oxs`, see [Oxidized::Script](https:\u002F\u002Fgithub.com\u002Fytti\u002Foxidized-script).\n\nIt is recommended practice to run Oxidized using its own username.  This username can be added using standard command-line tools:\n\n```shell\nuseradd -s \u002Fbin\u002Fbash -m oxidized\n```\n\n> It is recommended __not__ to run Oxidized as root. After creating a dedicated user, switch to the oxidized user using su oxidized to ensure that Oxidized is run under the correct user context.\n\nTo initialize a default configuration in your home directory `~\u002F.config\u002Foxidized\u002Fconfig`, simply run `oxidized` once. If you don't further configure anything from the output and source sections, it'll extend the examples on a subsequent `oxidized` execution. This is useful to see what options for a specific source or output backend are available.\n\nYou can set the env variable `OXIDIZED_HOME` to change its home directory.\n\n```shell\nOXIDIZED_HOME=\u002Fetc\u002Foxidized\n\n$ tree -L 1 \u002Fetc\u002Foxidized\n\u002Fetc\u002Foxidized\u002F\n├── config\n├── log-router-ssh\n├── log-router-telnet\n├── pid\n├── router.db\n└── repository.git\n```\n\n## Source\n\nOxidized supports [CSV](docs\u002FConfiguration.md#source-csv),  [SQLite](docs\u002FConfiguration.md#source-sqlite), [MySQL](docs\u002FConfiguration.md#source-mysql) and [HTTP](docs\u002FConfiguration.md#source-http) as source backends. The CSV backend reads nodes from a rancid compatible router.db file. The SQLite and MySQL backends will fire queries against a database and map certain fields to model items. The HTTP backend will fire queries against a http\u002Fhttps url. Take a look at the [Configuration](docs\u002FConfiguration.md) for more details.\n\n## Outputs\n\nPossible outputs are either [File](docs\u002FConfiguration.md#output-file), [GIT](docs\u002FConfiguration.md#output-git), [GIT-Crypt](docs\u002FConfiguration.md#output-git-crypt) and [HTTP](docs\u002FConfiguration.md#output-http). The file backend takes a destination directory as argument and will keep a file per device, with most recent running version of a device. The GIT backend (recommended) will initialize an empty GIT repository in the specified path and create a new commit on every configuration change. The GIT-Crypt backend will also initialize a GIT repository but every configuration push to it will be encrypted on the fly by using `git-crypt` tool. Take a look at the [Configuration](docs\u002FConfiguration.md) for more details.\n\nMaps define how to map a model's fields to model [model fields](https:\u002F\u002Fgithub.com\u002Fytti\u002Foxidized\u002Ftree\u002Fmaster\u002Flib\u002Foxidized\u002Fmodel). Most of the settings should be self explanatory, log is ignored if `use_syslog` is set to `true`.\n\nFirst create the directory where the CSV `output` is going to store device configs and start Oxidized once.\n\n```shell\nmkdir -p ~\u002F.config\u002Foxidized\u002Fconfigs\noxidized\n```\n\nNow tell Oxidized where it finds a list of network devices to backup configuration from. You can either use CSV or SQLite as source. To create a CSV source add the following snippet:\n\n```yaml\nsource:\n  default: csv\n  csv:\n    file: ~\u002F.config\u002Foxidized\u002Frouter.db\n    delimiter: !ruby\u002Fregexp \u002F:\u002F\n    map:\n      name: 0\n      model: 1\n```\n\nNow lets create a file based device database (you might want to switch to SQLite later on). Put your routers in `~\u002F.config\u002Foxidized\u002Frouter.db` (file format is compatible with rancid). Simply add an item per line:\n\n```text\nrouter01.example.com:ios\nswitch01.example.com:procurve\nrouter02.example.com:ios\n```\n\nRun `oxidized` again to take the first backups.\n\n## Extra\n\n### Ubuntu init setup\n\nThe systemd service assumes that you have a user named 'oxidized' and that oxidized is in one of the following paths:\n\n```text\n\u002Fsbin\n\u002Fbin\n\u002Fusr\u002Fsbin\n\u002Fusr\u002Fbin\n\u002Fusr\u002Flocal\u002Fbin\n```\n\n1. Copy systemd service file from extra\u002F folder to \u002Fetc\u002Fsystemd\u002Fsystem\n\n```shell\nsudo cp extra\u002Foxidized.service \u002Fetc\u002Fsystemd\u002Fsystem\n```\n\n2. Setup `\u002Fvar\u002Frun\u002F`\n\n```shell\nmkdir \u002Frun\u002Foxidized\nchown oxidized:oxidized \u002Frun\u002Foxidized\n```\n\n3. Make oxidized start on boot\n\n```shell\nsudo systemctl enable oxidized.service\n```\n\n## Help\n\nIf you need help with Oxidized then we have a few methods you can use to get in touch.\n\n* [Gitter](https:\u002F\u002Fgitter.im\u002Foxidized\u002FLobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - You can join the Lobby on gitter to chat to other Oxidized users.\n* [GitHub](https:\u002F\u002Fgithub.com\u002Fytti\u002Foxidized\u002F) - For help and requests for code changes \u002F updates.\n* [Forum](https:\u002F\u002Fcommunity.librenms.org\u002Fc\u002Fhelp\u002Foxidized) - A user forum run by [LibreNMS](https:\u002F\u002Fgithub.com\u002Flibrenms\u002Flibrenms) where you can ask for help and support.\n\n## Help Needed\n\nAs things stand right now, `oxidized` is maintained by very few people.\nWe would appreciate more individuals and companies getting involved in Oxidized.\n\nBeyond software development, documentation or maintenance of Oxidized, you could\nbecome a model maintainer, which can be done with little burden and would be a\nbig help to the community.\n\nInterested? Have a look at [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License and Copyright\n\n          Copyright\n          2013-2015 Saku Ytti \u003Csaku@ytti.fi>\n          2013-2015 Samer Abdel-Hafez \u003Csam@arahant.net>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n  http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","Oxidized 是一个网络设备配置备份工具，旨在替代RANCID。它使用Ruby语言编写，轻量且可扩展，支持超过130种操作系统类型。该工具具备自动调整线程以满足设定的检索间隔、通过RESTful API实现节点管理与配置获取、以及通过Syslog UDP+文件方式捕捉配置变更事件并触发配置抓取等核心功能。特别地，其`git`输出模块能够利用变更信息，使得`git blame`可以显示每行更改的具体用户。Oxidized适用于需要定期或按需对网络设备配置进行备份的企业环境，尤其是在网络规模较大、设备种类繁多的情况下，能有效提高运维效率和安全性。",2,"2026-06-11 03:14:44","top_language"]