Shadowsocks 프로필을 구성할 때 이 문제가 발생했습니다.
$ ssserver -c profile.json
/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/common.py:221: SyntaxWarning: "is" with a literal. Did you mean "=="?
if addr is "":
/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/common.py:233: SyntaxWarning: "is" with a literal. Did you mean "=="?
if len(block) is 1:
/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/common.py:235: SyntaxWarning: "is not" with a literal. Did you mean "!="?
while (ip & 1) == 0 and ip is not 0:
INFO: loading config from profile.json
Traceback (most recent call last):
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/bin/.ssserver-real", line 11, in <module>
load_entry_point('shadowsocks==3.0.0', 'console_scripts', 'ssserver')()
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/server.py", line 34, in main
config = shell.get_config(False)
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/shell.py", line 355, in get_config
check_config(config, is_local)
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/shell.py", line 210, in check_config
cryptor.try_cipher(config['password'], config['method'],
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/cryptor.py", line 51, in try_cipher
Cryptor(key, method, crypto_path)
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/cryptor.py", line 98, in __init__
self.cipher = self.get_cipher(
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/cryptor.py", line 130, in get_cipher
return m[METHOD_INFO_CRYPTO](method, key, iv, op, self.crypto_path)
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/crypto/openssl.py", line 150, in __init__
OpenSSLCryptoBase.__init__(self, cipher_name, crypto_path)
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/crypto/openssl.py", line 98, in __init__
load_openssl(crypto_path)
File "/gnu/store/yvjgk9n6xzpr32maq1mqw1ij2vhm9jxb-shadowsocks-2.8.2-0.e332ec9/lib/python3.8/site-packages/shadowsocks/crypto/openssl.py", line 51, in load_openssl
raise Exception('libcrypto(OpenSSL) not found with path %s' % path)
Exception: libcrypto(OpenSSL) not found with path None
해결책은 무엇입니까?
답변1
편집하다
이 글을 쓰는 시점에서 나보다 소스 코드를 더 잘 아는 사람이 디자인했습니다.패치, Guix 업스트림에 제출되었습니다. 즉, 이 문제는 곧 해결될 수도 있습니다.
원본 게시물
Shadowsocks의 패키지 정의를 보면 OpenSSL을 입력으로 나열하지 않고 거의 아무것도 없는 것처럼 보입니다. 또한, Shadowsocks는 이러한 모든 경로를 일부 구성에 저장하기를 원하는 것 같습니다.
config['crypto_path'] = {'openssl': config['libopenssl'],
'mbedtls': config['libmbedtls'],
'sodium': config['libsodium']}
이러한 트릭은 전통적인 배포판(예: Debian 기반 배포판 등)에서는 매우 영리할 수 있지만 모든 종류의 패키지 관리와 결합하면 완전히 깨집니다. Guix가 이런 종류의 문제를 처리하는 방식은 빌드 타임에 있습니다 substitute*
. 스테이지는 다음과 같습니다:
(add-after 'unpack 'patch-crypto-paths
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "shadowsocks/shell.py"
(("config\\['libopenssl'\\]")
(string-append (assoc-ref inputs "openssl") "/path/to/libopenssl"))
[...])
#t))
[위 코드는 분명히 Guix 코드이므로 SO가 일반적으로 CC BY-SA를 시행하더라도 GPLv3+에서 자유롭게 사용할 수 있습니다. ]
#t
요즘에는 in으로 끝나는 것이 꼭 필요한 것은 아니지만 Guix 코드에서는 여전히 자주 찾을 수 있을 것입니다.