cannot create directory '/usr/share/chinese-calendar': Permission denied


#1

在虛擬機裏面編譯 出現了
cannot create directory ‘/usr/share/chinese-calendar’: Permission denied
rpmbuild -ba 沒有這個問題 不知道是哪裏的權限問題

[30s] g++ -m64 -Wl,-O1 -o chinese-calendar qtsingleapplication.o qtlocalpeer.o main.o dateitem.o datemaskwidget.o chine
secalendar.o ccbo.o cnote.o aboutdialog.o moc_qtsingleapplication.o moc_qtlocalpeer.o moc_dateitem.o moc_datemaskwidget.o
moc_chinesecalendar.o moc_cnote.o moc_aboutdialog.o qrc_chinese-calendar.o -L/usr/lib64 -lQtSvg -L/usr/lib64 -L/usr/X11
R6/lib -lQtSql -lQtGui -lQtNetwork -lQtCore -lpthread
[30s] + exit 0
30s] Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.z9xjdO
[30s] + umask 022
[30s] + cd /home/abuild/rpmbuild/BUILD
[30s] + cd chinese-calendar-1.0.3
[30s] + make install DESTDIR=/home/abuild/rpmbuild/BUILDROOT/chinese-calendar-1.0.3-0.x86_64
[30s] mkdir: cannot create directory '/usr/share/chinese-calendar': Permission denied
[30s] make: *** [Makefile:393: install_inst] Error 1
[30s] error: Bad exit status from /var/tmp/rpm-tmp.z9xjdO (%install)
[30s] RPM build errors:
[30s]   Bad exit status from /var/tmp/rpm-tmp.z9xjdO (%install)
[30s] suse failed "build chinese-calendar.spec" at Mon Dec 24 23:33:34 UTC 2018.

specfile

#
# spec file for package chinese-calendar
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


Name:           chinese-calendar
Version:       	1.0.3 
Release:        0
Summary:        優客農曆
License:        GPL-3.0
Group:         	Amusements/Toys/Other 
Url:           	https://launchpad.net/chinese-calendar 
Source0:        chinese-calendar-1.0.3.tar.xz
%if %0{?suse_version}
BuildRequires: 	libqt4-devel
Requires:	gnome-themes 
Requires:	gnome-themes-extras
%else
BuildRequires:	qt-devel
%endif
BuildRequires:	gtk2-devel	


BuildRoot:      %{_tmppath}/%{name}-%{version}-build

%description
"Chinese calendar" is a Chinese traditional calendar for Ubuntu Kylin. You can find festivals and solar terms for China. In line with the Chinese using habit, it can help users to query date easily.

%lang_package

%prep
%setup -q

%build

# 在BUILD目錄下生成Linux平臺的Makefile
qmake -spec linux-g++-64
make %{?_smp_mflags}

%install
%make_install

#創建安裝目錄
mkdir -p %{buildroot}%{_datadir}/%{name}-%{version}
mkdir -p %{buildroot}%{_datadir}/%{name}-%{version}/db
mkdir -p %{buildroot}%{_datadir}/pixmaps
mkdir -p %{buildroot}%{_sysconfdir}/xdg/autostart/
mkdir -p %{buildroot}%{_prefix}/bin/
mkdir -p %{buildroot}%{_datadir}/%{name}-%{version}/skin/{default,blue,black}
mkdir -p %{buildroot}/.local/share/chinese-calendar

#讓系統發現要打包的文件
cp -f %{_builddir}/%{name}-%{version}/KylinLunar.db %{buildroot}%{_datadir}/%{name}-%{version}/db
cp -f %{_builddir}/%{name}-%{version}/img/chinesecalendar-64.png %{buildroot}%{_datadir}/pixmaps
# cp -f %{_builddir}/%{name}-%{version}/chinese-calendar-autostart.desktop %{_sysconfdir}/xdg/autostart/
cp -f %{_builddir}/%{name}-%{version}/chinese-calendar-autostart.desktop %{buildroot}%{_sysconfdir}/xdg/autostart/
cp -f %{_builddir}/%{name}-%{version}/chinese-calendar-autostart %{buildroot}%{_prefix}/bin/

cp -f %{_builddir}/%{name}-%{version}/skin/default/*.png %{buildroot}%{_datadir}/%{name}-%{version}/skin/default/
cp -f %{_builddir}/%{name}-%{version}/skin/blue/*.png %{buildroot}%{_datadir}/%{name}-%{version}/skin/blue/
cp -f %{_builddir}/%{name}-%{version}/skin/black/*.png %{buildroot}%{_datadir}/%{name}-%{version}/skin/black/

cp -f %{_builddir}/%{name}-%{version}/skin/default-skin.qss %{buildroot}%{_datadir}/%{name}-%{version}/skin/
cp -f %{_builddir}/%{name}-%{version}/skin/blue-skin.qss %{buildroot}%{_datadir}/%{name}-%{version}/skin/
cp -f  %{_builddir}/%{name}-%{version}/skin/black.qss %{buildroot}%{_datadir}/%{name}-%{version}/skin/
cp -f  %{_builddir}/%{name}-%{version}/skin/README.md %{buildroot}%{_datadir}/%{name}-%{version}/skin/
cp -f  %{_builddir}/%{name}-%{version}/chinese-calendar %{buildroot}%{_bindir}/

%postun
%desktop_database_postun
%icon_theme_cache_postun

rm -f -r %{_datadir}/%{name}-%{version}/db/KylinLunar.db
rmdir %{_datadir}/%{name}-%{version}/db/ 
rm -f -r %{_datadir}/pixmaps/chinesecalendar-64.png
rm -f -r %{_datadir}/applications/chinese-calendar.desktop
rm -f -r %{_sysconfdir}/xdg/autostart/chinese-calendar-autostart.desktop
rm -f -r %{_bindir}chinese-calendar-autostart
rm -f -r %{_datadir}/%{name}-%{version}/skin/default/chinesecalendarBGyellow.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/default/no.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/default/note.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/default/ok.png
rmdir %{_datadir}/%{name}-%{version}/skin/default/ 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/yijibg.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/left-1.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/left-2.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/right-1.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/right-2.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/normaldate.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/corner1.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/corner2.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/corner3.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue/corner4.png
rmdir %{_datadir}/%{name}-%{version}/skin/blue/ 
rm -f -r %{_datadir}/%{name}-%{version}/skin/black/chinesecalendar.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/black/no.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/black/no-hover.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/black/ok.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/black/ok-hover.png 
rm -f -r %{_datadir}/%{name}-%{version}/skin/black/note.png
rmdir %{_datadir}/%{name}-%{version}/skin/black/ 
rm -f -r %{_datadir}/%{name}-%{version}/skin/default-skin.qss 
rm -f -r %{_datadir}/%{name}-%{version}/skin/blue-skin.qss 
rm -f -r %{_datadir}/%{name}-%{version}/skin/black.qss
rm -f -r %{_datadir}/%{name}-%{version}/skin/*
rmdir %{_datadir}/%{name}-%{version}/skin/
rm -f -r %{_datadir}/%{name}-%{version}/skin/README.md
rmdir %{_datadir}/%{name}-%{version}/skin/ 
rm -f %{_bindir}/chinese-calendar

%files
%defattr(-,root,root)

%dir %{_datadir}/%{name}-%{version}/db/
%{_datadir}/%{name}-%{version}/db/KylinLunar.db

%dir %{_datadir}/pixmaps
%{_datadir}/pixmaps/chinesecalendar-64.png

%dir %{_sysconfdir}/xdg
%dir %{_sysconfdir}/xdg/autostart/
%{_sysconfdir}/xdg/autostart/chinese-calendar-autostart.desktop

%dir %{_bindir}
%{_bindir}/chinese-calendar-autostart
%{_bindir}/chinese-calendar

%dir %{_datadir}/%{name}-%{version}/
%dir %{_datadir}/%{name}-%{version}/skin
%dir %{_datadir}/%{name}-%{version}/skin/black
%dir %{_datadir}/%{name}-%{version}/skin/blue

%{_datadir}/%{name}-%{version}/skin/README.md
%{_datadir}/%{name}-%{version}/skin/black.qss
%{_datadir}/%{name}-%{version}/skin/black/chinesecalendar.png
%{_datadir}/%{name}-%{version}/skin/black/no-hover.png
%{_datadir}/%{name}-%{version}/skin/black/no.png
%{_datadir}/%{name}-%{version}/skin/black/note.png
%{_datadir}/%{name}-%{version}/skin/black/ok-hover.png
%{_datadir}/%{name}-%{version}/skin/black/ok.png
%{_datadir}/%{name}-%{version}/skin/blue-skin.qss
%{_datadir}/%{name}-%{version}/skin/blue/close-1.png
%{_datadir}/%{name}-%{version}/skin/blue/close-2.png
%{_datadir}/%{name}-%{version}/skin/blue/close-3.png
%{_datadir}/%{name}-%{version}/skin/blue/corner.png
%{_datadir}/%{name}-%{version}/skin/blue/corner1.png
%{_datadir}/%{name}-%{version}/skin/blue/corner2.png
%{_datadir}/%{name}-%{version}/skin/blue/corner3.png
%{_datadir}/%{name}-%{version}/skin/blue/corner4.png
%{_datadir}/%{name}-%{version}/skin/blue/empty.png
%{_datadir}/%{name}-%{version}/skin/blue/holiday-1.png
%{_datadir}/%{name}-%{version}/skin/blue/hoverdate.png
%{_datadir}/%{name}-%{version}/skin/blue/left-1.png
%{_datadir}/%{name}-%{version}/skin/blue/left-2.png
%{_datadir}/%{name}-%{version}/skin/blue/normaldate.png
%{_datadir}/%{name}-%{version}/skin/blue/nowdate.png
%{_datadir}/%{name}-%{version}/skin/blue/right-1.png
%{_datadir}/%{name}-%{version}/skin/blue/right-2.png
%{_datadir}/%{name}-%{version}/skin/blue/travel.png
%{_datadir}/%{name}-%{version}/skin/blue/yijibg.png
%{_datadir}/%{name}-%{version}/skin/blue/yijibtn.png
%{_datadir}/%{name}-%{version}/skin/blue/yijidetail.png
%{_datadir}/%{name}-%{version}/skin/default-skin.qss
%{_datadir}/%{name}-%{version}/skin/default/chinesecalendarBGyellow.png
%{_datadir}/%{name}-%{version}/skin/default/no.png
%{_datadir}/%{name}-%{version}/skin/default/note.png
%{_datadir}/%{name}-%{version}/skin/default/ok.png

%doc

%changelog


#2

是不是忘了用sudo编译?
用root用户试试看?


#3

就是用的root登录虚拟机里面的Tumbleweed系统 估计是osc对权限设置的原因
解决办法就是在deepin平台编译出二进制文件及其他文件 然后rm 掉其他所有的源代码
最后打包重写了specfile 。。。


#4

这个平台要源码编译不闪退得改源码 以前看有人改过 估计是苏 我是看不懂直接打包二进制文件了。。。。


#5

@liangzi

解决你标题里的问题,不要用 %make_install,它是 make install %{_smp_mflags} DESTDIR=%{buildroot} 的缩写,主要针对 autotools 风格的软件,也就是 ./configure && make && make install 这样的安装的软件。

chinese-calendar 这个软件有点特殊,用 make install INSTALL_ROOT=%{buildroot}。因为它的 Makefile 是 qmake 生成的。qt 生成的 Makefile 里面的 DESTDIR 都是 INSTALL_ROOT。


#6

另外你的 specfile 还有这些问题:

# Summary 不要用中文,即使真的想用,也要有一个 Summary 是英文,中文的写到 Summary(zh_CN) 里面。
Summary:        優客農曆
# 我感觉这个 Group 是不对的,System/GUI/Other 更适合一些。另外这个项不是乱写的:
# https://en.opensuse.org/openSUSE:Package_group_guidelines
Group:         	Amusements/Toys/Other 
# 你这些 BuildRequires 对吗?它已经支持 Qt5 了...另外你依赖 gnome-themes 是要干嘛?
# 另外几乎除了输入法,很少有既是 Qt 程序又是 GTK 2.0+ 程序的了。
%if %0{?suse_version}
BuildRequires: 	libqt4-devel
Requires:	gnome-themes 
Requires:	gnome-themes-extras
%else
BuildRequires:	qt-devel
%endif
BuildRequires:	gtk2-devel	

# 这家伙你已经知道是中国农历了,没必要再拆个 lang 包了吧 :-) 
%lang_package

# 你的 mkdir 和 cp 用的没有意义,make install 已经把工作全干了。
mkdir -p %{buildroot}%{_datadir}/%{name}-%{version}
mkdir -p %{buildroot}%{_datadir}/%{name}-%{version}/db
mkdir -p %{buildroot}%{_datadir}/pixmaps
mkdir -p %{buildroot}%{_sysconfdir}/xdg/autostart/
mkdir -p %{buildroot}%{_prefix}/bin/
mkdir -p %{buildroot}%{_datadir}/%{name}-%{version}/skin/{default,blue,black}
# 还是那句话,不要打包隐藏文件夹。另外你这个会出现在 /.local/share,是任何人都不会用到的文件夹。
mkdir -p %{buildroot}/.local/share/chinese-calendar

# 在 %postun 里 rm 和 rmdir 是没有意义的,因为是在软件包卸载后执行,这时候如果你的 %files 写的对
# 的话,这些文件早就已经不存在了。
%postun
rm -f -r %{_datadir}/%{name}-%{version}/db/KylinLunar.db
rmdir %{_datadir}/%{name}-%{version}/db/ 


%files
%defattr(-,root,root)
# 在这里写标准文件夹是不对的,它们只能被一个包提供就是 filesystem。
%dir %{_datadir}/pixmaps
%dir %{_sysconfdir}/xdg
%dir %{_sysconfdir}/xdg/autostart/
%dir %{_bindir}
# %doc 是必须后面跟文件的,单独写没有意义
%doc

#7

另外,这个软件我之前在 home:opensuse_zh 源里面也有打包一个,我把它更新到了最新版 1.0.4。

但是有一个问题,就是启动之后看不到界面。


#8

我在TW 和Leap15.0上用Qt4编译(Qt5编译要改的地方太多 而且源码我也看不太懂 )之后可以启动 问题就是点击哪里都闪退 然而同样的源码到了Deepin里面用Qt4编译之后就没有问题 而且 spec里面的gonme包就是在deepin下面启动测试的时候安装上去的 没有他们 软件启动不了。。。。。我不确定嗯rpm系列的包下面需不虚所以就加上了

Group的问题 我看了看文档里面的分类 没找到太合适的就选择上面那个了 不过你这个分类感觉更合适。。。。。