Debian 8 をバックアップする
まず、使用している Debian 8 をバックアップします。
Mondo RescueなどのツールやVPSなどのレンタルサーバにおけるサービスでイメージファイルの作成ができる場合は、作成してバックアップとしてISOファイルなどで管理できていればOKです。
最悪の場合に備えて、そのイメージファイルでもとに戻せる環境を作っておきましょう。
イメージファイルが作成できない環境にある方は、
とりあえず、設定ファイルなど、最低限必要なファイルをDebian 8から退避させておきましょう。
この時、もとに戻すための全ファイルをバックアップしておく必要がありますので、少し手間ですが、
最悪の場合に備えて、必ず、実施しておきましょう。
Debian 8 の現状のパッケージをチェックする
Debian 9 へのアップグレードに支障がないか、現在インストールされているパッケージを確認します。
Debian 8 の 正式なDebian リポジトリ以外のリポジトリを削除する
基本的に正式な Debian 8 のリポジトリパッケージ以外は、Debian 9 へアップグレードした際に動作保証はありません。
むしろ、その他のリポジトリの対応で、Debian 9 への対応が無いのであれば、ここで削除する以外にありません。
ここでは、一旦、Debian 8 のリポジトリパッケージ以外は、コメントアウトしておきます。
$ vi /etc/apt/sources.list
...
...
$ apt-get update
...
|
Debian 8 に apt ピンが設定されていないかチェックする
aptピンによる更新条件が設定されていると、正しくアップグレードできない場合があります。
基本的に、aptピンが設定されている場合(/etc/apt/preferences および /etc/apt/preferences.d/ファイル )は、全削除します。
$ rm -f /etc/apt/preferences
$ rm -f /etc/apt/preferences.d/*
$
|
Debian 8 にサードパーティーのパッケージが含まれていないかチェックする
使用している Debian 8 にサードパーティーのパッケージが含まれていないかチェックします。
いわゆる Debian の正式なリポジトリ以外からのパッケージがインストールされていないかチェックしておきます。
これは、Debian の正式なリポジトリ以外のパッケージは、Debian 9 になって動かなくなる可能性が大きいからです。
Debianのバージョンアップグレードで保証されている範囲は、あくまで正式なリポジトリからインストールされているパッケージで、
かつ、バージョンアップ後に削除されないパッケージに限ります。
それ以外のパッケージは、動作が保証されていませんし、そのインストール元のリポジトリが、新しいバージョンに対応していない場合は、
動作しない可能性が非常に高いです。
ここでは、まずは、確認し、Debian の正式なリポジトリのパッケージへ変更できるのであれば変更するか、
一旦、削除し、バージョンアップ後に再インストールすることをおすすめします。
$ apt-forktracer | sort
dh-php (0.21-1~dotdeb+8.1)
libnginx-mod-http-auth-pam (1.12.1-1~dotdeb+http2+8.1) [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2]
libnginx-mod-http-geoip (1.12.1-1~dotdeb+http2+8.1) [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2]
libnginx-mod-http-image-filter (1.12.1-1~dotdeb+http2+8.1) [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2]
libnginx-mod-http-xslt-filter (1.12.1-1~dotdeb+http2+8.1) [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2]
libnginx-mod-mail (1.12.1-1~dotdeb+http2+8.1) [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2]
libnginx-mod-stream (1.12.1-1~dotdeb+http2+8.1) [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2]
libpcre16-3 (2:8.39-1~dotdeb+8.1)
libpcre3 (2:8.39-1~dotdeb+8.1) [Debian: 2:8.35-3.3+deb8u4]
libpcre3-dev (2:8.39-1~dotdeb+8.1) [Debian: 2:8.35-3.3+deb8u4]
libpcre32-3 (2:8.39-1~dotdeb+8.1)
libpcrecpp0v5 (2:8.39-1~dotdeb+8.1)
libssl-dev (1.0.2l-1~bpo8+1) [Debian Backports: 1.0.2l-1~bpo8+1] [Debian: 1.0.1t-1+deb8u6 1.0.1t-1+deb8u6]
libssl1.0.0 (1.0.2l-1~bpo8+1) [Debian Backports: 1.0.2l-1~bpo8+1] [Debian: 1.0.1t-1+deb8u6 1.0.1t-1+deb8u6]
nginx (1.12.1-1~dotdeb+http2+8.1) [nginx: 1.12.1-1~jessie 1.12.0-1~jessie 1.10.3-1~jessie 1.10.2-1~jessie 1.10.1-1~jessie 1.10.0-1~jessie 1.8.1-1~jessie 1.8.0-1~jessie] [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2] [Debian: 1.6.2-5+deb8u5 1.6.2-5+deb8u4]
nginx-common (1.12.1-1~dotdeb+http2+8.1) [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2] [Debian: 1.6.2-5+deb8u5 1.6.2-5+deb8u4]
nginx-full (1.12.1-1~dotdeb+http2+8.1) [packages.dotdeb.org: 1.12.1-1~dotdeb+http2+8.1 1.12.0-1~dotdeb+http2+8.1 1.10.3-1~dotdeb+http2+8.1 1.10.2-2~dotdeb+http2+8.2 1.10.2-2~dotdeb+http2+8.1 1.10.2-1~dotdeb+http2+8.1] [Debian Backports: 1.10.3-1+deb9u1~bpo8+2] [Debian: 1.6.2-5+deb8u5 1.6.2-5+deb8u4]
php-common (1:42-1~dotdeb+8.1)
php-readline (1:7.0+42-1~dotdeb+8.1)
php7.0 (7.0.22-1~dotdeb+8.1)
php7.0-cgi (7.0.22-1~dotdeb+8.1)
php7.0-cli (7.0.22-1~dotdeb+8.1)
php7.0-common (7.0.22-1~dotdeb+8.1)
php7.0-curl (7.0.22-1~dotdeb+8.1)
php7.0-dev (7.0.22-1~dotdeb+8.1)
php7.0-fpm (7.0.22-1~dotdeb+8.1)
php7.0-gd (7.0.22-1~dotdeb+8.1)
php7.0-json (7.0.22-1~dotdeb+8.1)
php7.0-mbstring (7.0.22-1~dotdeb+8.1)
php7.0-mysql (7.0.22-1~dotdeb+8.1)
php7.0-opcache (7.0.22-1~dotdeb+8.1)
php7.0-readline (7.0.22-1~dotdeb+8.1)
php7.0-sqlite3 (7.0.22-1~dotdeb+8.1)
php7.0-tidy (7.0.22-1~dotdeb+8.1)
php7.0-xmlrpc (7.0.22-1~dotdeb+8.1)
|
ここでは、dotdeb と Debian Backports からのインストールパッケージが出力されました。
ここで出力されている php7.0, nginx および libssl1.0.0 は、
Debian 8 にて HTTP/2 を動作させるためにインストールしたものです。
Debian 9 の正式なリポジトリのそれぞれのパッケージで同じ機能は果たせますから、
ここでは、phpおよびnginx については、一旦、削除し、Debian 9 アップグレード後に再インストールすることにしました。
また、ライブラリパッケージは他の依存パッケージがあるので、ここでは、Debian 8 のバージョンへダウングレードしました。
ここで出力されるパッケージは、何らかの理由で別のリポジトリからインストールされているものです。
その理由のほとんどは、バージョンによるところが大きいのではないでしょうか?
もし、バージョンに起因するのであれば、アップグレードの前にDebian 9 になった場合のバージョンを確認し、
必要な機能が満たされるか否かを必ず確認しましょう。
せっかく、アップグレードしても意味がないかもしれませんからね。
$ tar cfz ~/nginx_conf.tar.gz /etc/nginx
$ tar cfz ~/php_conf.tar.gz /etc/php
$ apt-get -y remove php7.0 php7.0-fpm php7.0-cgi php7.0-common libapache2-mod-php7.0 php-common nginx
...
$ apt-get autoremove
...
$ apt-cache show libssl1.0.0
Package: libssl1.0.0
Status: install ok installed
Priority: important
Section: libs
Installed-Size: 3509
Maintainer: Debian OpenSSL Team
Architecture: amd64
Multi-Arch: same
Source: openssl
Version: 1.0.2l-1~bpo8+1
Depends: libc6 (>= 2.14), debconf (>= 0.5) | debconf-2.0
Pre-Depends: multiarch-support
Description-ja: Secure Sockets Layer ツールキット - 共有ライブラリ
このパッケージは、インターネット上で安全な通信をするための暗号プロトコル
SSL および TLS の OpenSSL プロジェクトによる実装の一部です。
.
libssl および libcrypto 共有ライブラリを提供します。
Description-md5: 88547c6206c7fbc4fcc7d09ce100d210
Package: libssl1.0.0
Source: openssl
Version: 1.0.1t-1+deb8u6
Installed-Size: 3075
Maintainer: Debian OpenSSL Team
Architecture: amd64
Depends: libc6 (>= 2.14), debconf (>= 0.5) | debconf-2.0
Pre-Depends: multiarch-support
Description-ja: Secure Sockets Layer ツールキット - 共有ライブラリ
このパッケージは、インターネット上で安全な通信をするための暗号プロトコル
SSL および TLS の OpenSSL プロジェクトによる実装の一部です。
.
libssl および libcrypto 共有ライブラリを提供します。
Description-md5: 88547c6206c7fbc4fcc7d09ce100d210
Multi-Arch: same
Tag: implemented-in::c, role::shared-lib
Section: libs
Priority: important
Filename: pool/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u6_amd64.deb
Size: 1046556
MD5sum: 088e32effb654d683eb76be647c4bc6d
SHA1: 0ca71b5318c514ff705742569b9f0ea0cd4df947
SHA256: 0fc777d9242fd93851eb49c4aafd22505048b7797c0178f20c909ff918320619
...
$ apt-get install libssl1.0.0=1.0.1t-1+deb8u6
...
以下のパッケージは「ダウングレード」されます:
libssl1.0.0
...
続行しますか? [Y/n] Y
...
$ apt-cache show libpcre3
Package: libpcre3
Status: install ok installed
Priority: important
Section: libs
Installed-Size: 703
Maintainer: Guillaume Plessis
Architecture: amd64
Multi-Arch: same
Source: pcre3
Version: 2:8.39-1~dotdeb+8.1
Depends: libc6 (>= 2.14)
Pre-Depends: multiarch-support
Breaks: approx (<< 4.4-1~), cduce (<< 0.5.3-2~), cmigrep (<< 1.5-7~), galax (<< 1.1-7~), libpcre-ocaml (<< 6.0.1~), liquidsoap (<< 0.9.2-3~), ocsigen (<< 1.3.3-1~)
Conflicts: libpcre3-dev (<= 4.3-3)
Description: Old Perl 5 Compatible Regular Expression Library - runtime files
This is a library of functions to support regular expressions whose syntax
and semantics are as close as possible to those of the Perl 5 language.
.
New packages should use the newer pcre2 packages, and existing
packages should migrate to pcre2.
.
This package contains the runtime libraries.
Description-md5: 554ac784f7314cb2c59649814e330d34
Package: libpcre3
Source: pcre3
Version: 2:8.35-3.3+deb8u4
Installed-Size: 618
Maintainer: Mark Baker
Architecture: amd64
Depends: libc6 (>= 2.14)
Pre-Depends: multiarch-support
Conflicts: libpcre3-dev (<= 4.3-3)
Breaks: approx (<< 4.4-1~), cduce (<< 0.5.3-2~), cmigrep (<< 1.5-7~), galax (<< 1.1-7~), libpcre-ocaml (<< 6.0.1~), liquidsoap (<< 0.9.2-3~), ocsigen (<< 1.3.3-1~)
Description-ja: Perl 5 互換正規表現ライブラリ - ランタイムファイル
構文と意味をできるだけ Perl 5 のものに似せた正規表現に対応するための関数の
ライブラリです。
.
本パッケージには、ランタイムライブラリが含まれています。
Description-md5: ab0ea99159dc866cd24051e8eda806df
Multi-Arch: same
Tag: implemented-in::c, role::shared-lib
Section: libs
Priority: required
Filename: pool/main/p/pcre3/libpcre3_8.35-3.3+deb8u4_amd64.deb
Size: 322022
MD5sum: 4f4748509a9b6bb8ccc5ed6a5bc8fd15
SHA1: 6e9c8106e8353e30bbc8a6e5dcb04e3e0eeaa6b3
SHA256: f513a611c0ba9b8496fe5b8bc5bd9a39c924e134d5230801dd92e429d77e204e
$ apt-get install libpcre3=2:8.35-3.3+deb8u4
...
以下のパッケージは「ダウングレード」されます:
libpcre3
...
続行しますか? [Y/n] Y
...
$ apt-forktracer | sort
$
|
基本的に、Debianの基本パッケージに存在するものは、ダウングレードしましょう。
ここでは、明らかに 削除しても良いような(後でインストールできる)パッケージのみを削除しています。
それ以外のパッケージは、基本的にダウングレードをしている点に注意してください。
無防備に削除してしまうと、思いもよらないサービスやツール類が動かなくなることがあります。
autoremove で消えないパッケージは、なにかしら依存関係があることに注意してください。
Debian 8 に自前でインストールしたものがあればバックアップする
上記はあくまでリポジトリで検索したにすぎません。
その他の特殊なリポジトリや自前でビルド・インストールしたものがあれば、それは、アップグレードの対象外です。
それらは、先の正式なリポジトリ以外の対処と同じように、
一旦、後の再インストール時に必要なファイル等々をバックアップし、パッケージは削除しましょう。
また、Debian 9 へアップグレードの後に再インストール(ビルド)しましょう。
Debian 8 に不要なパッケージがあれば削除する
パッケージの削除を行うと、
依存の問題で一緒にインストールされたけれども、今となっては、不要となったパッケージがあるかもしれません。
無駄にインストールしたままでは、アップグレード時に、それらの無駄なパッケージもアップグレードします。
そのため、それらを一斉に削除しておきます。
$ apt-get autoremove
...
|
このコマンドで、依存関係のない不要なパッケージを一掃してくれます。
Debian 8 を最新にする
Debian 9 へのアップグレードは、基本的に Debian 8 の最新版からのアップグレードとなります。
ここでは、Debian 8 を最新版にします。
Debian 8 の現在のバージョンを確認しておく
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.8 (jessie)
Release: 8.8
Codename: jessie
|
Debian 8 を最新版へアップグレードする
$ apt-get update
...
$ apt-get dist-upgrade
...
|
一般的には、upgrade を指定し、パッケージ構成を変えない範囲でより安全にアップグレードしますが、
ここでは、dist-upgrade を指定し、
パッケージ構成の変更に追随してアップグレードすることに注意してください。
再度、Debian 8 の現在のバージョンを確認しておく
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.9 (jessie)
Release: 8.9
Codename: jessie
|
とりあえず、現在(2017.08)の最新版になったようです。
Debian 9 へアップグレードする
いよいよ Debian 9 へのアップグレードです。
Debian 9 の 正式なDebian リポジトリを追加する
基本的に正式な Debian 8 のリポジトリパッケージ以外は、Debian 9 へアップグレードした際に動作保証はありません。
むしろ、その他のリポジトリの対応で、Debian 9 への対応が無いのであれば、ここで削除する以外にありません。
ここでは、一旦、Debian 8 のリポジトリパッケージ以外は、コメントアウトしておきます。
$ vi /etc/apt/sources.list
...
deb http://ftp.jp.debian.org/debian/ stretch main contrib
deb-src http://ftp.jp.debian.org/debian/ stretch main contrib
deb http://security.debian.org/ stretch/updates main contrib
deb-src http://security.debian.org/ stretch/updates main contrib
...
$ apt-get update
...
|
ここでは、
一応、
main contrib を指定しています。
それぞれの意味を記載しておきます。
- main : Debian システムを構成します。
- contrib : Debian ディストリビューションで利用するための追加ソフトウェアで、ビルドや動作にディストリビューション外のソフトウェアを必要とするものが収録されます。
- non-free : Debian ディストリビューションで利用することを意図してはいますが、DFSG に準拠しない、または配布に問題があるような他の問題をもつパッケージが収録されています。
DFSGとは、
Debian フリーソフトウェアガイドラインのことで、
Debianが定義するフリーソフトのことです。
つまり、
contrib には、基幹パッケージ(main)以外のDFSG準拠パッケージが収録されており、
non-free には、基幹パッケージ(main)以外のDFSG準拠しないパッケージが収録されています。
Debian 9 へ アップグレードする
Debian では、バージョンをまたぐアップグレード時には、一気に dist-upgrade を実行するのでなく
upgrade を実行した後に、dist-upgrade を実行することを勧めています。
それは、以下の理由からです。
完全アップグレード (以下に記述しています) を直接行った場合、残しておきたいパッケージが大量に削除されてしまうことが時折あります。
>
ここでも、その推奨に従い作業を進めてみます。
$ apt-get update
...
$ apt-get upgrade
...
この操作後に追加で 12.3 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
...
$ apt-get dist-upgrade
...
この操作後に追加で 451 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
...
設定ファイル '/etc/ssl/openssl.cnf'
==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
==> パッケージ配布元が更新版を提供しています。
どうしますか? 以下の選択肢があります:
Y か I : パッケージメンテナのバージョンをインストールする
N か O : 現在インストールされている自分のバージョンを残す
D : 両バージョンの差異を表示する
Z : 状況を調査するためにシェルを開始する
デフォルトでは現在使っている自分のバージョンを残します。
*** openssl.cnf (Y/I/N/O/D/Z) [デフォルト=N] ? N
...
|
このアップグレード作業の間に、以下のような確認画面が表示されるかもしれません。
特に確認が不要な場合は、以下で <Yes> を選択すれば、以降の確認画面は表示されないようになります。
# ここは、以下の確認です。
# " 確認なしにパッケージのアップグレード中にサービスをリスタートしますか? "
# 一応、ここでは <No> を選択し、確認しながら作業を進めることにします。
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqu Configuring libc6:amd64 tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x x
x There are services installed on your system which need to be restarted when x
x certain libraries, such as libpam, libc, and libssl, are upgraded. Since these x
x restarts may cause interruptions of service for the system, you will normally be x
x prompted on each upgrade for the list of services you wish to restart. You can x
x choose this option to avoid being prompted; instead, all necessary restarts will x
x be done for you automatically so you can avoid being asked questions on each x
x library upgrade. x
x x
x Restart services during package upgrades without asking? x
x x
x <Yes> <No> x
x x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
# ここは、先のサービスのリスタート確認です。
# " cron " がリスタートしますよ・・という確認です。<Ok> で次に進めます。
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu Configuring libc6:amd64 tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Running services and programs that are using NSS need to be restarted, otherwise x
x they might not be able to do lookup or authentication any more (for services such x
x as ssh, this can affect your ability to login). Please review the following x
x space-separated list of init.d scripts for services to be restarted now, and x
x correct it if needed. x
x x
x Note: restarting sshd/telnetd should not affect any existing connections. x
x x
x Services to restart for GNU libc library upgrade: x
x x
x cron_______________________________________________________________________________ x
x x
x <Ok> x
x x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
|
Debian 9 へ アップグレードできたか確認する
ここまででシステムおよび関連するパッケージは、全てDebian 9 へ アップグレードできているはずです。
Debian 9 へ アップグレードできたか確認してみましょう。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.1 (stretch)
Release: 9.1
Codename: stretch
$ mysql --version
mysql Ver 15.1 Distrib 10.1.23-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
...
|
OKのようです。
Debian 9 へ 削除したパッケージを再インストールする
いかがだったでしょうか?
ちょっと、アップグレードまでの手間がありますが、
概ね、それほど難しいことではありません。
これで nginxのHTTP/2対応バージョン が手に入りました。
基本的に Debian は、2年毎にメジャーアップデートします。
メインのメンテナンスの期間は、新しいバージョンが正式リリースされて1年間とされています。(LTSのメンテナンスは、3年です。)
そのため、サーバとして活用されている場合、セキュリティの面からも いずれアップグレードによるメンテナンスが必要となります。
ただ、最大5年程度使えますから、ハードスペック的にもサーバ自体を入れ替えるというのもありえます。
いずれにしても現状のシステム構築を一からやるのは、馬鹿げていますから、現在のサーバのバックアップからアップグレードする方が
かなり楽にできるのではないかと思います。
既に Debian 9 も 9.1 をリリースしていますので、そろそろアップグレードを考えても良いのかもしれませんね。
その際の参考になれば幸いです。
コメントを投稿 :