2014-12-07 30 views
2

我是CouchDB的新手,遇到了一個奇怪的問題。我可以創建一個數據庫,但不能刪除它。CouchDB不會刪除現有的數據庫

我建立了一個測試框架,它將在開始時創建數據庫的測試版本,並在測試運行結束時將其刪除,但我並不想讓框架SSH作爲建議的服務器在這個答案Delete couchDB databases

我的設置是在Virtual Box 4.3中運行的CentOS 7(來自發布的最小圖像)。我從EPEL存儲庫安裝了CouchDB,版本報告爲1.6.1。我可以用蒲團管理數據庫來創建數據庫,添加和刪除文檔。在蒲團中刪除數據庫會掛起。用curl刪除返回404找不到。

$ curl -X PUT http://dbserver:5984/test 
{"ok":true} 
$ curl -X DELETE http://dbserver:5984/test 
{"error":"not_found","reason":"missing"} 

基於CouchDB的文檔,這是正確的URL刪除的數據庫上。我禁用了SELinux,但沒有任何效果。沒有啓用CouchDB安全性,所有設置都保留默認設置。

爲什麼我不能刪除數據庫?

+0

嘗試對報告CouchDB的,當你創建它添加/一個錯誤。舊文檔聲明:「數據庫必須以全部小寫字母(a-z),數字(0-9)或任何_ $()+ - /字符命名,並且必須在URL中以斜線結尾。」我不是,如果這能解決你的問題,但這是我在我的圖書館做的。有時候可能會發生,當你創建並刪除同一個數據庫的速度太快,出現錯誤。 – noun 2014-12-07 23:10:58

+0

不幸的是,這並沒有奏效。我也將PUT/DELETE命令隔開30秒以上。在兩個命令上都使用和不使用斜線。同樣的迴應。我也嘗試了兩次連續的PUT,第二次產生了DB已經存在的響應。然後DELETE說它沒有。 – 2014-12-08 01:14:19

+0

你測試了你的安裝嗎? http:// dbserver:5984/_utils/verify_install.html – 2014-12-11 06:55:01

回答

2

這個問題似乎是一個缺少SELinux政策。

Permissive模式下運行SELinux,使「驗證安裝」檢查適用於我。 (CentOS 7,通過yum從EPEL存儲庫安裝的couchdb 1.6.1)。

展望/var/audit/audit.log顯示:

type=AVC msg=audit(1422956916.341:371): avc: denied { create } for pid=2188 comm="beam" name=".test_suite_db_design" scontext=system_u:system_r:rabbitmq_beam_t:s0 tcontext=system_u:object_r:couchdb_var_lib_t:s0 tclass=dir 

因此,SELinux的否認CouchDB的過程中創建的目錄。

使用audit2allow工具之一可能創造出可以使用semodule命令啓用缺少的規則:

grep couchdb /var/log/audit/audit.log | audit2allow -M couchdbvarlib 
semodule -i couchdbvarlib.pp 

here

有已經在Fedora中#1098802

+0

太棒了!謝謝! (爲什麼我沒有想到這一點?;-))對於有這個問題的任何人的幾個筆記。 1)'setenforce 0'設置SELinux爲允許,'setenforce 1'設置SELinux強制執行。 2)在你搞砸SELinux之後,你必須重新啓動CouchDB才能生效。 3)'audit2allow'不在最小安裝,但它在'policycoreutils-python'包中。 – 2015-02-03 16:03:25

+0

另一個需要注意的地方是:經過一番更多的調整之後,我發現還有其他一些東西:1)看起來添加第二個管理員用戶有一些SELinux問題(可能是第一個做了,我錯過了,我不確定)。這意味着當SELinux處於寬容模式時,您需要創建管理員。 2)同樣,在許可模式下創建一個運行視圖來捕獲這些錯誤。 3)'grep couchdb'對搜索來說太嚴格了(換句話說,在'couchjs'中沒有看到錯誤'grep couch'。 – 2015-02-03 18:52:36

相關問題