સુવિધાઓ
ccam અપડેટ કરવું
આ પેજનો અંગ્રેજીમાંથી મશીન અનુવાદ થયો છે. સુધારાઓનું સ્વાગત છે. આ પેજ GitHub પર સંપાદિત કરો
ccam update GitHub પરથી ccam ની રિલીઝ ડાઉનલોડ કરે છે, તેને રિલીઝની checksums.txt સામે તપાસે છે અને ચાલતી binary ને એક rename માં બદલે છે. જો તમે ccam ને install સ્ક્રિપ્ટ વડે કે archive માંથી ઇન્સ્ટૉલ કર્યું હોય તો તેને વાપરો. ccam ક્યારેય જાતે અપડેટ તપાસતું નથી: ફક્ત આ કમાન્ડ જ GitHub નો સંપર્ક કરે છે, તેથી બાકીનો દરેક કમાન્ડ offline પણ એ જ રીતે કામ કરે છે.
ઉપયોગ
ccam update # install the latest release
ccam update --check # only say whether a newer release exists
ccam update --version v0.3.0 # install that release, also an older one
ccam --dry-run update # show what would be downloaded and replaced$ ccam update --check
ccam 0.5.0 is available (you have 0.4.0). Run `ccam update`.
$ ccam --dry-run update
Would update ccam 0.4.0 → 0.5.0:
download https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
verify with https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/checksums.txt
replace /home/you/.local/bin/ccam
$ ccam update
→ downloading https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
✓ Updated ccam 0.4.0 → 0.5.0 (/home/you/.local/bin/ccam)જ્યારે કોઈ નવી રિલીઝ ન હોય, ત્યારે ccam ccam 0.4.0 is up to date. છાપે છે અને કંઈ બદલતું નથી. --version અને તમે પહેલેથી ચલાવતા હો તે વર્ઝન સાથે, તે ccam 0.4.0 is already installed. છાપે છે.
ઓપ્શન
| ઓપ્શન | શું કરે છે | ડિફૉલ્ટ |
|---|---|---|
--check |
ફક્ત જણાવે છે કે નવી રિલીઝ છે કે નહીં | off |
--version <tag> |
આ રિલીઝ tag ઇન્સ્ટૉલ કરે છે, જેમ કે v0.3.0, હાલના કરતાં નવો કે જૂનો |
નવીનતમ |
--dry-run |
માનવામાં આવે છે: નવીનતમ tag શોધે છે (સિવાય કે --version કોઈ tag આપે), binary પર એ જ તપાસો ચલાવે છે, અને ડાઉનલોડ કર્યા વગર download, checksum અને replace ના પાથ છાપે છે |
off |
--check અને --version સાથે વાપરી શકાતા નથી. tag vMAJOR.MINOR.PATCH જેવો હોવો જોઈએ, વૈકલ્પિક pre-release કે build પ્રત્યય સાથે; શરૂઆતનો v છોડી શકાય છે. બીજું કંઈ પણ નિષ્ફળ જાય છે, ઉદાહરણ તરીકે --version takes a release tag such as v0.3.0, not "1.2".
environment variable CCAM_RELEASES_URL mirror માટે કે tests માટે https://github.com/jhyunwoo/ccam/releases ને બદલે છે. તેની રચના એ જ હોવી જોઈએ: <url>/latest <url>/tag/<tag> પર redirect કરે, અને assets <url>/download/<tag>/<asset> પર હોય.
તે કેવી રીતે કામ કરે છે
કોડ internal/update માં છે, જે ફક્ત ccam update import કરે છે. શરૂઆતનો પાથ તેને ક્યારેય બોલાવતો નથી.
cli.updateCmdos.Executableવડે ચાલતી binary શોધે છે અનેfilepath.EvalSymlinksવડે symlink ઉકેલે છે. એ સાચો પાથ જ બદલાય છે.--versionવગર,Updater.Latestredirect અનુસર્યા વગર<releases>/latestને request કરે છે, અનેLocationheader (…/tag/v0.5.0) માંથી tag વાંચે છે. આ GitHub API ને બદલે releases પેજ વાપરે છે, તેથી API ની કલાકના 60 request ની મર્યાદા લાગુ પડતી નથી. lookup પાસે 10 સેકન્ડ છે.parseVersiontag ને કડક pattern સામે તપાસે છે. tag download URL માં અને છપાયેલા shell કમાન્ડમાં જાય છે, તેથી/,%, space કે shell અક્ષરોવાળું કંઈ પણ પસાર થતું નથી.compareVersionsતેની ચાલતા વર્ઝન સાથે સરખામણી કરે છે; pre-release તેની રિલીઝ પહેલાં આવે છે.managed()અનેwritable()નક્કી કરે છે કે ccam binary બદલી શકે કે નહીં (નીચે જુઓ).Updater.Fetchccam_<os>_<arch>.tar.gzઅનેchecksums.txtએકસાથે ડાઉનલોડ કરે છે, બંને માટે 2 મિનિટ સાથે. દરેક download 256 MB સુધી મર્યાદિત છે.- બીજું કંઈ પણ થાય તે પહેલાં archive નો SHA-256
checksums.txtમાંની તેની લાઇન સાથે મેળ ખાવો જોઈએ. લાઇન ન હોય કે checksum જુદો હોય તો અપડેટnothing was changedસાથે અટકે છે. extract()tar વાંચે છે અનેccamનામની પહેલી સામાન્ય ફાઇલ લે છે. ફોલ્ડર, લિંક અને બીજી એન્ટ્રીઓ અવગણાય છે, અને binary પણ 256 MB સુધી મર્યાદિત છે.Updater.Installનવી binaryfsutil.AtomicWriteવડે લખે છે: binary ની બાજુમાં કામચલાઉ ફાઇલ.ccam.tmp*, જૂની ફાઇલના permission bits સાથે, જે ડિસ્ક પર flush થાય છે અને જૂની ફાઇલ પર rename થાય છે.
tag lookup થી rename સુધીની આખી pipeline:
archive અને checksums.txt બાજુબાજુમાં ડાઉનલોડ થાય છે, અને checksum મેળ ન ખાય ત્યાં સુધી કંઈ લખાતું નથી. rename atomic છે, તેથી crash કે ભરાયેલી ડિસ્ક જૂની કે નવી binary છોડે છે, ક્યારેય અડધી નહીં. ~/.local/bin/ccwork જેવા શૉર્ટકટ કમાન્ડ ccam binary ની symlink છે, તેથી તેઓ કોઈ ફેરફાર વગર નવું વર્ઝન ચલાવે છે.
package થી ઇન્સ્ટૉલ થયેલું
.deb માંથી ઇન્સ્ટૉલ થયેલું ccam apt નું છે, અને apt ની જાણ બહાર તેને બદલવાથી package database ખોટો રહે. ડાઉનલોડ કરતાં પહેલાં, ccam તપાસે છે કે binary કોની છે:
/usr/bin,/bin,/usr/sbinકે/sbinમાંની binary package-managed ગણાય છે.- બીજે ક્યાંક, જો
dpkgઇન્સ્ટૉલ હોય અનેdpkg -S <path>સફળ થાય, તો તે પણ package-managed ગણાય છે. - નહીં તો ccam ત્યાં લખી શકે છે તેની ખાતરી કરવા binary ની બાજુમાં કામચલાઉ
.ccam-update-*ફાઇલ બનાવે છે અને દૂર કરે છે.
package-managed binary માટે ccam અટકે છે અને apt નાં પગલાં છાપે છે:
$ ccam update
ccam: /usr/bin/ccam was installed by a package, so `ccam update` leaves it alone.
To update the .deb, download ccam_0.5.0_linux_amd64.deb from https://github.com/jhyunwoo/ccam/releases/tag/v0.5.0 and run:
sudo apt install ./ccam_0.5.0_linux_amd64.deb
Or install a copy in ~/.local/bin with the install script:
curl -fsSL https://raw.githubusercontent.com/jhyunwoo/ccam/main/install.sh | shLinux સિવાયની સિસ્ટમ પર ફક્ત install સ્ક્રિપ્ટની લાઇન છપાય છે. જ્યારે ફોલ્ડરમાં લખી ન શકાય, ત્યારે ccam install સ્ક્રિપ્ટ ફરી ચલાવવાનું સૂચવે છે, જે ccam ને ~/.local/bin માં ઇન્સ્ટૉલ કરે છે.
સલામતી અને ખાસ કિસ્સા
- development build પોતાનું વર્ઝન
devબતાવે છે અને તેની પાસે સરખામણી માટે કોઈ રિલીઝ નથી, તેથીccam updateઅનેccam update --checkતેનો ઇનકાર કરે છે.ccam update --version vX.Y.Zતેના પર રિલીઝ ઇન્સ્ટૉલ કરે છે. - નિષ્ફળ download, તમારા platform માટે ખૂટતું asset, કે checksum નો મેળ ન ખાવો ઇન્સ્ટૉલ થયેલી binary ને જેમ હતી તેમ રહેવા દે છે.
- અસ્તિત્વમાં ન હોય તેવી રિલીઝ
there is no release <tag>સાથે નિષ્ફળ જાય છે. જ્યારે GitHub HTTP 403 કે 429 સાથે ઇનકાર કરે, ત્યારે ccam કહે છે કે તે કદાચ rate limit છે અને પછીથી ફરી પ્રયાસ કરવા કહે છે. --checkફક્ત વાંચે છે. તે binary package-managed છે કે લખી શકાય તેવી છે તે તપાસતું નથી.- જૂના tag સાથેનું
--versionએ પાછા જવાની રીત છે.