我正在尝试安装斯勒。尚未提供 Debian 软件包所以我决定从源代码构建。手动的
- 安装Lua
$ curl -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz
$ tar -xf lua-5.4.6.tar.gz
$ cd lua-5.4.6
$ make linux test
$ sudo make install
$ lua
Lua 5.4.6 Copyright (C) 1994-2023 Lua.org, PUC-Rio
> ^C
- 安装luarocks
$ cd ..
$ curl -R -O https://luarocks.github.io/luarocks/releases/luarocks-3.9.2.tar.gz
$ tar -xf luarocks-3.9.2.tar.gz
$ cd luarocks-3.9.2
$ ./configure --with-lua-include=/usr/local/include
$ make
$ sudo make install
$ cd ..
$ tar -xf sile-0.14.11.tar.xz
$ cd sile-0.14.11
- 安装lua依赖
$ luarocks install --only-deps sile-dev-1.rockspec
(All dependencies were successfully installed)
$ luarocks install --only-deps sile-dev-1.rockspec
sile dev-1 depends on lua >= 5.1 (5.4-1 provided by VM)
sile dev-1 depends on bit32 (scm-1 installed)
sile dev-1 depends on cassowary 2.3.2-1 (2.3.2-1 installed)
sile dev-1 depends on cldr 0.3.0-0 (0.3.0-0 installed)
sile dev-1 depends on compat53 0.8-1 (0.8-1 installed)
sile dev-1 depends on cosmo 16.06.04-1 (16.06.04-1 installed)
sile dev-1 depends on fluent 0.2.0-0 (0.2.0-0 installed)
sile dev-1 depends on linenoise 0.9-1 (0.9-1 installed)
sile dev-1 depends on loadkit 1.1.0-1 (1.1.0-1 installed)
sile dev-1 depends on lpeg 1.0.2-1 (1.0.2-1 installed)
sile dev-1 depends on lua-zlib 1.2-2 (1.2-2 installed)
sile dev-1 depends on lua_cliargs 3.0-2 (3.0-2 installed)
sile dev-1 depends on luaepnf 0.3-2 (0.3-2 installed)
sile dev-1 depends on luaexpat 1.5.1-1 (1.5.1-1 installed)
sile dev-1 depends on luafilesystem 1.8.0-1 (1.8.0-1 installed)
sile dev-1 depends on luarepl 0.10-1 (0.10-1 installed)
sile dev-1 depends on luasec 1.3.1-1 (1.3.1-1 installed)
sile dev-1 depends on luasocket 3.1.0-1 (3.1.0-1 installed)
sile dev-1 depends on luautf8 0.1.5-1 (0.1.5-1 installed)
sile dev-1 depends on penlight 1.13.1-1 (1.13.1-1 installed)
sile dev-1 depends on vstruct 2.1.1-1 (2.1.1-1 installed)
Stopping after installing dependencies for sile dev-1
- 安装硅石
$ ./configure --with-system-luarocks
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking how to create a pax tar archive... gnutar
checking whether make supports nested variables... (cached) yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of gcc... gcc3
checking for gcc... gcc
checking whether the compiler supports GNU Objective C... no
checking whether gcc accepts -g... no
checking dependency style of gcc... gcc3
checking for gawk... (cached) gawk
checking for grep that handles long lines and -e... /usr/bin/grep
checking for a sed that does not truncate output... /usr/bin/sed
checking for cmp... /usr/bin/cmp
checking for git... /usr/bin/git
checking for find... /usr/bin/find
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking how to print strings... printf
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... mt
checking if mt is a manifest tool... no
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for shl_load... no
checking for shl_load in -ldld... no
checking for dlopen... yes
checking whether a program can dlopen itself... yes
checking whether a statically linked program can dlopen itself... no
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for grep that handles long lines and -e... (cached) /usr/bin/grep
checking for fc-match... /usr/bin/fc-match
checking whether font family Gentium Plus is available... yes
checking for pdfinfo... /usr/bin/pdfinfo
checking for OS X... no
checking for fontconfig... yes
checking for harfbuzz >= 2.7.4... yes
checking for harfbuzz-subset >= 6.0.0... yes
checking for icu-uc icu-io... yes
checking for a Lua interpreter with version >= 5.1... Hello Lua 5.4!
lua
checking for lua... /usr/local/bin/lua
checking for lua version... 5.4
checking for lua platform... unknown
checking for lua script directory... ${prefix}/share/lua/5.4
checking for lua module directory... ${exec_prefix}/lib/lua/5.4
checking if LUA_VERSION is defined... yes
checking for lua.h... yes
checking for lualib.h... yes
checking for lauxlib.h... yes
checking for luaconf.h... yes
checking for Lua header version... 5.4
checking if Lua header version matches 5.4... yes
checking if LUA_VERSION is defined... yes
checking for library containing exp... -lm
checking for library containing dlopen... none required
checking for library containing lua_load... -llua
checking for required Lua library cassowary... found
checking for required Lua library cosmo... found
checking for required Lua library cldr... found
checking for required Lua library fluent... found
checking for required Lua library linenoise... found
checking for required Lua library loadkit... found
checking for required Lua library lpeg... found
checking for required Lua library zlib... found
checking for required Lua library cliargs... found
checking for required Lua library epnf... found
checking for required Lua library lxp... found
checking for required Lua library lfs... found
checking for required Lua library repl... found
checking for required Lua library ssl... found
checking for required Lua library socket... found
checking for required Lua library lua-utf8... found
checking for required Lua library pl... found
checking for required Lua library vstruct... found
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for date... /usr/bin/date
checking for build time... 25 August 2023
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating build-aux/list-dist-files.sh
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating sile.1
config.status: creating core/features.lua
config.status: creating core/pathsetup.lua
config.status: creating core/version.lua
config.status: creating sile
chmod: changing permissions of 'tests/regressions.pl': Operation not permitted
config.status: creating tests/regressions.pl
config.status: creating sile-dev-1.rockspec
config.status: executing depfiles commands
config.status: executing libtool commands
=== configuring in libtexpdf (sile-0.14.11/libtexpdf)
configure: running /bin/bash ./configure --disable-option-checking '--prefix=/usr/local' '--with-system-luarocks' --cache-file=/dev/null --srcdir=.
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking how to print strings... printf
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking for gawk... gawk
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... mt
checking if mt is a manifest tool... no
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking whether make sets $(MAKE)... yes
checking whether make supports the include directive... yes (GNU style)
checking whether make supports nested variables... yes
checking dependency style of gcc... gcc3
checking whether to enable maintainer-specific portions of Makefiles... no
checking whether the compiler accepts prototypes... yes
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking for _LARGEFILE_SOURCE value needed for large files... no
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking whether closedir returns void... no
checking for assert.h... yes
checking for float.h... yes
checking for limits.h... yes
checking for pwd.h... yes
checking for stdlib.h... (cached) yes
checking for sys/param.h... yes
checking for putenv... yes
checking for strcasecmp... yes
checking for strtol... yes
checking for strstr... yes
checking for getcwd... yes
checking for getwd... yes
checking for memcmp... yes
checking for memcpy... yes
checking for mkstemp... yes
checking for mktemp... yes
checking for strchr... yes
checking for strrchr... yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for size_t... yes
checking for int64_t... yes
checking for uint64_t... yes
checking for struct stat.st_mtim... yes
checking whether make supports nested variables... (cached) yes
checking for unistd.h... (cached) yes
checking for stdint.h... (cached) yes
checking for inttypes.h... (cached) yes
checking for sys/types.h... (cached) yes
checking for sys/wait.h... yes
checking for stdbool.h... yes
checking for working memcmp... yes
checking for open... yes
checking for close... yes
checking for getenv... yes
checking for basename... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking for gcc options needed to detect all undeclared functions... none needed
checking for struct tm.tm_zone... yes
checking whether byte ordering is bigendian... no
checking for int32_t... yes
checking for uint32_t... yes
checking whether timezone is declared... yes
checking for struct tm.tm_gmtoff... yes
checking size of char... 1
checking size of short... 2
checking size of int... 4
checking size of long... 8
checking for library containing pow... -lm
checking if <zlib.h> defines 'z_const'... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for libpng... yes
checking for png_get_image_width in -lpng... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing libtool commands
config.status: executing depfiles commands
configure: monkey-patching configure to ignore core directory
$ make
make all-recursive
make[1]: Entering directory 'sile-0.14.11'
/bin/bash build-aux/list-dist-files.sh > Makefile-distfiles
Making all in libtexpdf
make[2]: Entering directory 'sile-0.14.11/libtexpdf'
make all-am
make[3]: Entering directory 'sile-0.14.11/libtexpdf'
CC libtexpdf_la-agl.lo
CC libtexpdf_la-bmpimage.lo
CC libtexpdf_la-cff.lo
CC libtexpdf_la-cff_dict.lo
CC libtexpdf_la-cid.lo
CC libtexpdf_la-cidtype0.lo
CC libtexpdf_la-cidtype2.lo
CC libtexpdf_la-cmap.lo
CC libtexpdf_la-cmap_read.lo
CC libtexpdf_la-cmap_write.lo
CC libtexpdf_la-cs_type2.lo
CC libtexpdf_la-dpxcrypt.lo
CC libtexpdf_la-dpxfile.lo
CC libtexpdf_la-dpxutil.lo
CC libtexpdf_la-epdf.lo
CC libtexpdf_la-error.lo
CC libtexpdf_la-fontmap.lo
CC libtexpdf_la-jp2image.lo
CC libtexpdf_la-jpegimage.lo
CC libtexpdf_la-mem.lo
CC libtexpdf_la-mfileio.lo
CC libtexpdf_la-numbers.lo
CC libtexpdf_la-otl_conf.lo
CC libtexpdf_la-otl_opt.lo
CC libtexpdf_la-pdfcolor.lo
CC libtexpdf_la-pdfdev.lo
CC libtexpdf_la-pdfdoc.lo
CC libtexpdf_la-pdfdraw.lo
CC libtexpdf_la-pdfencrypt.lo
CC libtexpdf_la-pdfencoding.lo
CC libtexpdf_la-pdffont.lo
CC libtexpdf_la-pdfnames.lo
CC libtexpdf_la-pdfobj.lo
CC libtexpdf_la-pdfparse.lo
CC libtexpdf_la-pdfresource.lo
CC libtexpdf_la-pdfximage.lo
CC libtexpdf_la-pngimage.lo
CC libtexpdf_la-pst.lo
CC libtexpdf_la-pst_obj.lo
CC libtexpdf_la-sfnt.lo
CC libtexpdf_la-subfont.lo
CC libtexpdf_la-t1_char.lo
CC libtexpdf_la-t1_load.lo
CC libtexpdf_la-truetype.lo
CC libtexpdf_la-tt_aux.lo
CC libtexpdf_la-tt_cmap.lo
CC libtexpdf_la-tt_glyf.lo
CC libtexpdf_la-tt_gsub.lo
CC libtexpdf_la-tt_post.lo
CC libtexpdf_la-tt_table.lo
CC libtexpdf_la-type0.lo
CC libtexpdf_la-type1.lo
CC libtexpdf_la-type1c.lo
CC libtexpdf_la-unicode.lo
CC libtexpdf_la-pkfont.lo
CC libtexpdf_la-tfm.lo
CCLD libtexpdf.la
make[3]: Leaving directory 'sile-0.14.11/libtexpdf'
make[2]: Leaving directory 'sile-0.14.11/libtexpdf'
Making all in src
make[2]: Entering directory 'sile-0.14.11/src'
CC justenoughharfbuzz_la-justenoughharfbuzz.lo
justenoughharfbuzz.c: In function ‘shape’:
justenoughharfbuzz.c:147:33: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
147 | char * shaper_list_string = luaL_checkstring(L, 8);
| ^~~~~~~~~~~~~~~~
justenoughharfbuzz.c:181:64: warning: passing argument 5 of ‘hb_shape_full’ from incompatible pointer type [-Wincompatible-pointer-types]
181 | int res = hb_shape_full (hbFont, buf, features, nFeatures, shaper_list);
| ^~~~~~~~~~~
| |
| char **
In file included from /usr/include/harfbuzz/hb.h:40,
from justenoughharfbuzz.c:4:
/usr/include/harfbuzz/hb-shape.h:54:36: note: expected ‘const char * const*’ but argument is of type ‘char **’
54 | const char * const *shaper_list);
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
CC justenoughharfbuzz_la-hb-utils.lo
CCLD justenoughharfbuzz.la
/usr/bin/ld: /usr/local/lib/liblua.a(lauxlib.o): warning: relocation against `stdin@@GLIBC_2.2.5' in read-only section `.text'
/usr/bin/ld: /usr/local/lib/liblua.a(lstate.o): relocation R_X86_64_PC32 against symbol `lua_newstate' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:608: justenoughharfbuzz.la] Error 1
make[2]: Leaving directory 'sile-0.14.11/src'
make[1]: *** [Makefile:799: all-recursive] Error 1
make[1]: Leaving directory 'sile-0.14.11'
make: *** [Makefile:540: all] Error 2
$ make install
make install-recursive
make[1]: Entering directory 'sile-0.14.11'
Making install in libtexpdf
make[2]: Entering directory 'sile-0.14.11/libtexpdf'
make[3]: Entering directory 'sile-0.14.11/libtexpdf'
/usr/bin/mkdir -p '/usr/local/lib'
/bin/bash ./libtool --mode=install /usr/bin/install -c libtexpdf.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libtexpdf.so.0.0.0 /usr/local/lib/libtexpdf.so.0.0.0
libtool: install: (cd /usr/local/lib && { ln -s -f libtexpdf.so.0.0.0 libtexpdf.so.0 || { rm -f libtexpdf.so.0 && ln -s libtexpdf.so.0.0.0 libtexpdf.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libtexpdf.so.0.0.0 libtexpdf.so || { rm -f libtexpdf.so && ln -s libtexpdf.so.0.0.0 libtexpdf.so; }; })
libtool: install: /usr/bin/install -c .libs/libtexpdf.lai /usr/local/lib/libtexpdf.la
libtool: install: /usr/bin/install -c .libs/libtexpdf.a /usr/local/lib/libtexpdf.a
libtool: install: chmod 644 /usr/local/lib/libtexpdf.a
libtool: install: ranlib /usr/local/lib/libtexpdf.a
libtool: finish: PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/usr/bin/mkdir -p '/usr/local/include/libtexpdf'
/usr/bin/install -c -m 644 agl.h bmpimage.h cff.h cff_dict.h cff_limits.h cff_stdstr.h cff_types.h cid_basefont.h cid.h cid_p.h cidtype0.h cidtype2.h cmap.h cmap_p.h cmap_read.h cmap_write.h cs_type2.h dpxcrypt.h dpxfile.h dpxutil.h epdf.h error.h fontmap.h jp2image.h jpegimage.h libtexpdf.h mem.h mfileio.h numbers.h otl_conf.h otl_opt.h pdfcolor.h pdfdev.h pdfdoc.h pdfdraw.h pdfencrypt.h pdfencoding.h pdffont.h pdflimits.h pdfnames.h '/usr/local/include/libtexpdf'
/usr/bin/install -c -m 644 pdfobj.h pdfparse.h pdfresource.h pdftypes.h pdfximage.h pngimage.h pst.h pst_obj.h sfnt.h subfont.h t1_char.h t1_load.h truetype.h tt_aux.h tt_cmap.h tt_glyf.h tt_gsub.h tt_post.h tt_table.h type0.h type1.h type1c.h unicode.h pkfont.h tfm.h '/usr/local/include/libtexpdf'
make[3]: Leaving directory 'sile-0.14.11/libtexpdf'
make[2]: Leaving directory 'sile-0.14.11/libtexpdf'
Making install in src
make[2]: Entering directory 'sile-0.14.11/src'
CCLD justenoughharfbuzz.la
/usr/bin/ld: /usr/local/lib/liblua.a(lauxlib.o): warning: relocation against `stdin@@GLIBC_2.2.5' in read-only section `.text'
/usr/bin/ld: /usr/local/lib/liblua.a(lstate.o): relocation R_X86_64_PC32 against symbol `lua_newstate' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:608: justenoughharfbuzz.la] Error 1
make[2]: Leaving directory 'sile-0.14.11/src'
make[1]: *** [Makefile:799: install-recursive] Error 1
make[1]: Leaving directory 'sile-0.14.11'
make: *** [Makefile:1105: install] Error 2
为什么会make
失败?我应该采取什么不同的方式来安装 sile?