답을 읽을 때이 게시물, 나는 우리 컴퓨터에서 자주 사용하는 프로그램을 휴대용(Windows 의미에서)으로 만들어 플래시 드라이브에 복사할 수 있는지 궁금합니다. 다른 컴퓨터에서 우리가 좋아하는 프로그램에 액세스할 수 있나요?
이동식 설치가 가능한가요?
답변1
예, 그렇게 할 수 있습니다. 이는 패키지 관리자에 의존하는 것보다 더 많은 작업입니다. Windows에서 "이식 가능한" 설치의 주요 매력은 괜찮은 패키지 관리자가 부족하다는 점입니다.
프로그램이 종속성(데이터 파일, 라이브러리 등)을 찾도록 준비해야 합니다. 많은 프로그램이 환경 변수를 지원합니다. 일부는 바이너리가 있는 디렉토리나 관련 디렉토리(예: ../lib
동반 파일이 있는지 확인)를 확인합니다.
루트 디렉터리에 소프트웨어를 설치합니다. 이 루트 디렉터리 아래에 일반적으로 사용되는 범주 디렉터리 를 만듭니다: bin
, 등. 모든 소프트웨어를 관리하려면 각 소프트웨어를 독립적으로 설치한 다음 다음과 같은 프로그램을 사용하십시오.lib
man
집어 챙겨 넣다카테고리 디렉토리에 연결하기 위해 심볼릭 링크 포리스트를 생성합니다. 바라보다추적 프로그램Stowe에 대해 간략하게 소개합니다. 그래서 당신은 다음과 같은 심볼릭 링크를 갖게 될 것입니다
bin/foo -> ../stow/foo-1.42/bin/foo
bin/foobar -> ../stow/foo-1.42/bin/foobar
man/man1/foo.1 -> ../../stow/foo-1.42/man/man1/foo.1
…
환경변수를 설정하려면 스크립트가 필요합니다. 이를 설치의 루트 디렉터리에 놓고 이를 사용하여 $0
스크립트를 찾습니다. 스크립트는 상위 스크립트에 영향을 미칠 수 없으므로 일반적인 접근 방식은 스크립트가 호출 셸에서 평가할 수 있는 출력을 생성하도록 하는 것입니다. 이 스크립트를 이라고 부르자 setup.sh
.
#!/bin/sh
set -e
root=$(dirname -- "$0")
cd -- "$root"
printf "PORTABLE_ROOT='%s'\\n" "${PWD}" | sed "s/'/'\\\\''/g"
prepend () {
eval "set -- \"\$1\" \"\$2\" \"${$1}\""
case :$3: in
*:$PORTABLE_ROOT/$2:*) :;; # already there (at any location)
:: echo '$1=$PORTABLE_ROOT/$2; export $1';; # the path was empty
*) echo '$1=$PORTABLE_ROOT/$2:$3; export $1';; # prepend
esac
}
prepend PATH bin
prepend MANPATH man
prepend LD_LIBRARY_PATH lib
prepend PERL5LIB lib/perl
prepend PYTHONPATH lib/python
…
(경고: 테스트되지 않은 코드)
셸에서 휴대용 설치를 사용하려면 를 실행하세요 eval "`/path/to/setup.sh`"
.
답변2
틀림없이. 일부 언어(예: Java 또는 Python)는 어느 정도 이식성을 달성하지만 운영 체제별 시스템 호출을 포함하면 이식성이 떨어질 수 있습니다.